UUID和数据库的主键策略
来源:互联网 发布:软件安全工程师 编辑:程序博客网 时间:2024/05/21 04:41
今天在看Spring3.x企业级开发一书中说:“数据库层主键方案”已经成为历史的遗留产物,他的缺点和不足已经随着应用层的发展不断凸显,其一:不方便应用开发,因为你必须通过一个查询获取新增的数据主键;其二,吧方便主键值的全局管理和控制,使系统丧失灵活性;其三,不方便数据的整合和迁移。 所以应尽量避免采用“数据库层主键方案”。
因为现在的数据一般比较大,数据库著就爱你开始肩负起更多的功能,包括数据库切分、资源定位等。在牵扯点大数据分布式时这个特点更明显了,书中提到UUID,我就google了一下,找到如下的方案,看下面的介绍 :
应用程序中主键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());
}
}
- UUID和数据库的主键策略
- 数据库主键策略uuid和identity
- 数据库主键UUID,GUID和自己写的工具类
- 关于Hibernate的oracle主键id生成策略uuid、native和sequence
- 关于Hibernate的oracle主键id生成策略uuid、native和sequence
- 关于Hibernate的oracle主键id生成策略uuid、native和sequence .
- 关于Hibernate的oracle主键id生成策略uuid、native和sequence
- 关于Hibernate的oracle主键id生成策略uuid、native和sequence
- hibernate中uuid和native等主键生成策略
- 常用SpringJPA主键生成策略,UUID和自增
- Jpa主键UUID生成策略
- JPA使用Hibernate实现,使用UUID.主键的生成策略.
- 数据库主键UUID生成方式
- hibernate注解UUID主键生成策略
- JAVA UUID 生成【主键生成策略】
- hibernate中uuid主键注解生成策略
- JPA注解主键生成策略-UUID
- hibernate注解UUID主键生成策略
- 百度贴吧恶意代码分析
- #define #ifdef #endif
- struts2中的Action接口和Actionsupport接口的作用
- 自学Android开发中的那些事儿(android虚拟机的键盘没有?)
- LISP 简单的数据库 3.2 录入CD
- UUID和数据库的主键策略
- Linux 内存映射函数 mmap()函数详解
- ISO IEC公开的标准
- 第二次测试
- MeasureSpec介绍及使用详解
- 《大话设计模式》之--第2章 商场促销----策略模式
- 《大话设计模式》之--第3章 拍摄UFO----单一职责原则
- 《大话设计模式》之--第4章 考研求职两不误----开放-封闭原则
- 《大话设计模式》之--第5章 会修电脑不会修收音机?----依赖倒转原则