• 数据库生成唯一主键的方案列表


    1、  使用数据库自增Id。

    2、  单独开一个数据库,获取全局唯一的自增序列号或各表的MaxId。

       1)         使用自增序列号表。

       2)         使用MaxId表存储各表的MaxId值。

       3)         新方案: 整体思想:建立两台以上的数据库ID生成服务器,每个服务器都有一张记录各表当前ID的MaxId表,但是MaxId表中Id的增长步长是服务器的数量,起始值依次错开,这样相当于把ID的生成散列到每个服务器节点上。例如:如果我们设置两台数据库ID生成服务器,那么就让一台的MaxId表的Id起始值为1(或当前最大Id+1),每次增长步长为2,另一台的MaxId表的ID起始值为2(或当前最大Id+2),每次步长也为2。这样就将产生ID的压力均匀分散到两台服务器上,同时配合应用程序控制,当一个服务器失效后,系统能自动切换到另一个服务器上获取ID,从而解决的单点问题保证了系统的容错。(Flickr思想)。

    3、  Sequence特性。

      1)        这个特性在SQL Server 2012、Oracle中可用。这个特性是数据库级别的,允许在多个表之间共享序列号。它可以解决分表在同一个数据库的情况,但倘若分表放在不同数据库,那将共享不到此序列号。(eg:Sequence使用场景:你需要在多个表之间公用一个流水号。以往的做法是额外建立一个表,然后存储流水号)。

    4、  通过数据库集群编号+集群内的自增类型两个字段共同组成唯一主键。

    5、  通过设置每个集群中自增 ID 起始点(auto_increment_offset),将各个集群的ID进行绝对的分段来实现全局唯一。当遇到某个集群数据增长过快后,通过命令调整下一个 ID 起始位置跳过可能存在的冲突。

    6、  GUID。

    优点:GUID是最简单的方案,全局唯一的Id,数据间同步、迁移都能简单实现。

    7、  GUID TO Int64。

    即将GUID转为了19位数字,数字反馈给客户可以一定程度上缓解友好性问题。

    8、  自己写编码规则。

    9、 Random生成高唯一性随机码。

    1. 使用Environment.TickCount做为Random参数(即Random的默认参数),重复性最大。
    2. 使用DateTime.Now.Ticks做为Random参数,存在重复。
    3. 使用unchecked((int)DateTime.Now.Ticks)做为Random参数,存在重复。
    4. 使用Guid.NewGuid().GetHashCode()做为random参数,测试不存在重复(或存在性极小)。
    5. 使用RNGCryptoServiceProvider做为random参数,测试不存在重复(或存在性极小)。
    6.   代码事例:static int GetRandomSeed()

              {

                  byte[] bytes = new byte[4];

                  System.Security.Cryptography.RNGCryptoServiceProvider rng

      = new System.Security.Cryptography.RNGCryptoServiceProvider();

                  rng.GetBytes(bytes);

                  return BitConverter.ToInt32(bytes, 0);

              }

    注:这个只是方案列表,方案来源http://www.cnblogs.com/heyuquan/p/global-guid-identity-maxId.html

     

     

    Top
    收藏
    关注
    评论
  • 相关阅读:
    Git SVN 版本控制 简介 总结 MD
    shape selector 背景 圆形 矩形 圆环 [MD]
    eclipse library jar包 使用总结 MD
    Visitor 访问者模式 [MD]
    BlazeMeter+Jmeter 搭建接口测试框架
    nGrinder 简易使用教程
    65个面试常见问题技巧回答(绝对实用)
    [面试技巧]16个经典面试问题回答思路
    质量模型测试电梯
    linux apache服务器优化建议整理(很实用)
  • 原文地址:https://www.cnblogs.com/liuyu7177/p/3263956.html
Copyright © 2020-2023  润新知