应用程序中主键ID生成与UUID

1.ID生成策略

 在一个数据库设计里,假如使用了逻辑主键,那么你一般都需要一个ID生成器去生成逻辑主键。
  
  在许多数据库里面,都提供了ID生成的机制,如Oracle中的sequence,MSSQL中的identity,可惜这些方法各种数据库都不同的,所以很多

人愿意找寻一种通用的方式。
  
  编写代码,1、2、3……这样一直累加是最直接的想法,JAVA用以下方式去实现
  
  private static AtomicInteger uniqueId = new AtomicInteger(0);
  
  public static String nextId() {
  return Integer.toString(uniqueId.incrementAndGet());
  }
  
  当然,这样太简单了,并且一重新启动,计数器就归 0 了,一般的做法可以用 时间 + 计数器 的方式,

2.集群环境ID生成

 在一个群集的环境里面,通常还需要加上IP的前缀,即 IP + 时间 + 计数器,这个就是JAVA原版本的实现了。

3.UUID
UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在

同一时空中的所有机器都是唯一的。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址

、纳秒级时间、芯片ID码和许多可能的数字。由以下几部分的组合:当前日期和时间(UUID的第一个部

分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同)

,时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),

UUID的唯一缺陷在于生成的结果串会比较长。

//d68de284-475e-41d6-b193-da8cc5052a79

在Java中生成UUID主要有以下几种方式:

1. JDK1.5
如果使用的JDK1.5的话,那么生成UUID变成了一件简单的事,以为JDK实现了UUID: java.util.UUID,直接调用即可.
UUID.randomUUID().toString()

//d68de284-475e-41d6-b193-da8cc5052a79

2. 第三方开源类库(推荐使用):
最著名的是 JUG .特点上是: 纯Java实现,开源,LGPL协议。采用了Native的方式产生真正的Uuid.而

且提供了不同平台的实现,包括:
Linux / x86
Windows (98, ME, NT, 2K, XP?) / x86
Solaris / Sparc
Mac OS X
FreeBSD / x86
import org.safehaus.uuid.UUID;
import org.safehaus.uuid.UUIDGenerator;
public class Test {
public static void main(String[] args){
//http://jug.safehaus.org/
UUIDGenerator g=UUIDGenerator.getInstance();
UUID uuid=g.generateRandomBasedUUID();
System.out.println(uuid.toString());
}
}

Powered by Zoundry

应用程序中主键ID生成与UUID相关推荐

  1. 分库分表的 9种分布式主键ID 生成方案

    <sharding-jdbc 分库分表的 4种分片策略> 中我们介绍了 sharding-jdbc 4种分片策略的使用场景,可以满足基础的分片功能开发,这篇我们来看看分库分表后,应该如何为 ...

  2. 分库分表的 9种分布式主键ID 生成方案,挺全乎的

    <sharding-jdbc 分库分表的 4种分片策略> 中我们介绍了 sharding-jdbc 4种分片策略的使用场景,可以满足基础的分片功能开发,这篇我们来看看分库分表后,应该如何为 ...

  3. java id主键_JAVA主键ID生成工具类:改自twitter的分布式ID算法snowflake

    祝大家新年快乐,有任何问题可与我联系: 关于snowflake算法的介绍和原理这里不过多说明了,网上有很多. 这里简单描述下SnowflakeUtil的优点: 1.做为底层工具使用,可用于数据库主键. ...

  4. JPA 主键ID生成策略

    在定义Entity的ID字段时,我们可以使用@GeneratedValue注解指定以何种方式生成数据库的主键ID的值.有几种策略: 1. 默认情况下,是自动生成策略. 比如下边两种方式效果是一样的.如 ...

  5. hibernate中主键的生成策略

    1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主 ...

  6. MySQL之主键ID生成策略

    5种全局ID生成方式.优缺点及改进方案 全局唯一id特点: 1.数据库自增长序列或字段生成id 2.UUID 3.Redis生成ID 4.zookeeper生成ID 5.Twitter的snowfla ...

  7. 如何用分库分表的9种分布式主键ID生成方案?附小技巧

    1. 前言 大家都知道,Postman是一个非常受欢迎的API接口调试工具,提供有Chrome扩展插件版和独立的APP,不过它的很多高级功能都需要付费才能使用. 如果你连Postman都还没有用过,不 ...

  8. sqlite数据库主键自增_sqlite 中主键id自增的方法(转)

    困扰了一段时间,先前的解决方法是定义静态变量rid=0,然后把++rid插入数据库的id列中,但是每次重启的时候,rid就自动从0开始,就会导致有相同的id,插入数据库发生错误.今天在网上又查了一下, ...

  9. 如何用分库分表的9种分布式主键ID生成方案?完整PDF

    前言 前段时间,我向一位在阿里的朋友寻求进大厂的秘诀,他分享给我一份阿里内部资料--JAVA核心进阶手册,仔细翻阅一番才知道里面收纳整理的知识可真是齐全,不得不来感叹一番- 我将JAVA核心进阶手册大 ...

  10. 主键ID是什么,做什么用的?(能够唯一表示数据表中的每个记录,防止数据冲突,冗余)

    能够唯一表示数据表中的每个记录的[字段]或者[字段]的组合就称为主码(主键). 作用 1.主键唯一的识别每一记录; 2.主键将记录和存放在其他表中的数据进行关联.在这一点上,主键是不同表中各记录之间的 ...

最新文章

  1. laravel5.6 数组传递到前端
  2. 独家直播双十一全网动态?前黑客“劳改”带你玩转大数据
  3. Hadoop MapReduce的模式、算法和用例
  4. Spring Boot和Apache Camel
  5. nw.js FrameLess Window下的窗口拖拽与窗口大小控制
  6. linux推出超级用户_linux添加root权限用户
  7. 第三百二十六节,web爬虫,scrapy模块,解决重复ur——自动递归url
  8. sqlserver2014内存数据库特性介绍
  9. ant通用模板(build_common.xml)使用介绍
  10. springboot与docker整合
  11. jwt和传统session的区别?
  12. Install and Use SourceMonitor in Windows7
  13. 精灵骑士二觉_守护者二觉转职分析 精灵骑士二觉能有多强
  14. 毁灭者DC W650DC装黑苹果心得
  15. 压箱底的10款在线工具平台
  16. 直击网易人工智能事业部:闷声发大财的新面孔
  17. html中数字输入框,HTML “input number数字”输入控件简介说明
  18. 计算机毕业设计Java宠物互助领售平台(源码+系统+mysql数据库+lw文档)
  19. 【EMC基础篇①】噪声是什么?EMC是什么?噪声损害是电子社会的现代病
  20. [SCOI2012]喵星球上的点名

热门文章

  1. Vue.js 还是 React?你会选择哪一个?为什么?
  2. 复制linux虚拟机后ifconfig没有出现网卡处理方法
  3. H5中新增加的一些标签
  4. 将html导出到excel或word
  5. Windows Workflow RC HOL学习笔记(四):使用Listen,Delay和event-based自定义Activities
  6. .NET Core微服务实施之Consul服务发现与治理
  7. solrCloud相关的管理命令
  8. php 加密解密算法
  9. HTTP Content-type整理
  10. python 异步IO编程