马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
系列文章目次
🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀
一、前言 🍃
雪花算法(Snowflake)是一种用于天生唯一标识符(ID)的分布式算法。它可以天生趋势递增且具有肯定时间序次的 64 位整数,实用于分布式体系中的唯一 ID 天生需求。下面将先容雪花ID在 SqlSugar 中的用法。
二、ORM中利用雪花ID ❄️
2.1 平凡插入
调用 ExecuteReturnSnowflakeId 方法主键会主动赋值雪花ID。
- public class 实体
- {
- [SugarColumn(IsPrimaryKey =true)]//long类型的主键会自动赋值
- public long Id { get; set; }
-
- public string Name{get;set; }
- }
- long id= db.Insertable(实体).ExecuteReturnSnowflakeId();//单条插入返回雪花ID
- List<Long> ids=db.Insertable(List<实体>).ExecuteReturnSnowflakeIdList();//多条插入批量返回,比自增好用
复制代码 2.2 导航插入
在导航操纵中假如主键是 Long 不赋值也会主动赋值雪花ID。
2.3 手动调用雪花ID
- var id=SnowFlakeSingle.Instance.NextId();//也可以在程序中直接获取ID
复制代码 三、雪花ID重复 题目 🔁
用雪花ID肯定要设置 WorkId , 只要静态变量 SnowFlakeSingle 不能共享的情况都要有单独的WorkId。
✅养成精良风俗服务器上的 WorkId 和当地不要一样,而且多服务器都要设置不一样的 WorkId。
- //程序启时动执行一次就行
- SnowFlakeSingle.WorkId= 唯一数字; //从配置文件读取一定要不一样
- //服务器时间修改一定也要修改WorkId
-
- //参数说明:
- //workerId机器ID 2进制5位 32位减掉1位 31个
- //datacenterId机房ID 2进制5位 32位减掉1位 31个
复制代码 标注:SqlSugar自带雪花ID是成熟算法,精确设置WorkId无一例重复反馈,标题5也可以用自界说雪花算法。
四、Javascript精度题目
4.1 方案1
精度 long 没有19 位长度,以是序列化 雪花ID 时要序列化成 string 。
- [Newtonsoft.Json.JsonConverter(typeof(ValueToStringConverter))] //JsonConverter的命名空间不要搞错了
- [SugarColumn(IsPrimaryKey =true)]
- public long Id { get; set; }
-
- //配置API使用JSON.NET
- //Nuget安装 Microsoft.AspNetCore.Mvc.NewtonsoftJson
- services.AddControllers().AddNewtonsoftJson(opt =>
- {
- //忽略循环引用
- opt.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
-
- //不改变字段大小
- opt.SerializerSettings.ContractResolver = new DefaultContractResolver();
- });
复制代码 4.2 方案2
利用短雪花ID,这个算法须要你自已提供,由于短雪花ID不成熟以是我不提供,怎样将自界说算法集成进SqlSugar看标题5。
五、自界说雪花ID算法 🎨
假如你有好用的雪花ID组件用风俗了也可以利用你自个的算法(用自已的算法WorkId等都须要你的算法自已支持)
- //程序启动时执行一次就行
- StaticConfig.CustomSnowFlakeFunc = () =>
- {
- return 你的雪花ID方法();
- };
复制代码 六、时间回退处置处罚 🔙
体系由于暂时故障引起的时间回退,一样寻常就是几十毫秒,好比体系卡了等,可以用暂时ID举行处置处罚,不让步伐报错,默认是扔堕落误。
假如是人为调解就须要重启服务,不能长时间用自界说ID,大概修改 workId
- //程序启时动执行一次就行
- var ran=new Random();
- StaticConfig.CustomSnowFlakeTimeErrorFunc = () =>
- {
- return ran.Next(16, 18);//出现时间回退使用临时算法插入
- };
复制代码 🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀
【开篇】.NET开源 ORM 框架 SqlSugar 系列
【入门必看】.NET开源 ORM 框架 SqlSugar 系列
【实体设置】.NET开源 ORM 框架 SqlSugar 系列
【Db First】.NET开源 ORM 框架 SqlSugar 系列
【Code First】.NET开源 ORM 框架 SqlSugar 系列
【数据事件】.NET开源 ORM 框架 SqlSugar 系列
【毗连池】.NET开源 ORM 框架 SqlSugar 系列
【查询目次】.NET开源 ORM 框架 SqlSugar 系列
【查询底子】.NET开源 ORM 框架 SqlSugar 系列
【排序用法】.NET开源 ORM 框架 SqlSugar 系列
【分组去重】.NET开源 ORM 框架 SqlSugar 系列
【联表查询】.NET开源 ORM 框架 SqlSugar 系列
【导航查询】.NET开源 ORM 框架 SqlSugar 系列
【子查询】.NET开源 ORM 框架 SqlSugar 系列
【嵌套查询】.NET开源 ORM 框架 SqlSugar 系列
【设置查询】.NET开源 ORM 框架 SqlSugar 系列
【并集查询】.NET开源 ORM 框架 SqlSugar 系列
【树型查询】.NET开源 ORM 框架 SqlSugar 系列
【表格查询】.NET开源 ORM 框架 SqlSugar 系列
【动态表达式】.NET开源 ORM 框架 SqlSugar 系列
【查询函数】.NET开源ORM框架 SqlSugar 系列
【过滤器】.NET开源 ORM 框架 SqlSugar 系列
【跨库查询、多库查询】.NET开源 ORM 框架
【报表查询】.NET开源ORM框架 SqlSugar 系列
【Where语法全解密】.NET开源ORM框架 SqlSugar 系列
【Select 语法全解密】.NET开源ORM框架 SqlSugar 系列
【查询返回结果范例】.NET开源ORM框架 SqlSugar 系列
【insert 插入数据语法合集】.NET开源ORM框架 SqlSugar 系列
【SqlSugar雪花ID常见题目】.NET开源ORM框架 SqlSugar 系列
|