最近自己在做一个javaWeb项目,使用的SpringMVC+ibatis,基于性能考虑及个人习惯没有使用hibernate。目前数据库用的mysql,对于主键生成采用那一种方法很是头疼,目前生成主键方法主要有以下几种:
1、采用mysql自增长主键策略
:简单,不需要程序特别处理
:这种方法对以后如果项目移植到其它数据库上改动会比较大,oracle、 db2采用Sequence,mysql、sqlServer又采用自增长,通用性不好
2、使用时间戳+随机数
:实现简单,与数据库无关,移植性较好
:长度太长,最少也得20位,不仅占空间并且建索引的话性能会比较差点吧
3、每次取主键最大值+1做为新的主键
:主键长度可控,移植性较好
:并发写可能会造成主键冲突,对并发也不太好控制
4、单独建一个存放主键的表
:实现简单,移植性较好
:需要考虑并发问题,整个系统主键生成都依赖该表,性能影响可能较大
大概就是这几种比较容易想到,
即想做到移植性好,性能好,又不会出现并发问题,似乎是没有完美的方案了吗,不知道有木有童鞋有更好的推荐吗?
既然这样又经过思考后打算根据项目实际情况来定,主要分为以下几种情况
1、项目基础功能部分,例如菜单功能管理、用户管理、权限管理、机构组织管理、参数管理等采用【方案3】,这些功能一般数据量不大,基本没有大的性能问题和并发问题,如果移植的话改动也比较小
2、对于某些流水、日志类的表可采用【方案2】时间戳+随机数,时间戳做主键此时会更有意义
3、对于系统中大部分实际的业务功能采用【方案1】mysql的自增长策略,这样可减少开发工作量,并且性能和并发都有保障,如果项目就算移植的话,业务功能这部分肯定会有些变动,做二次开发,所以就暂不考虑移植性了。
PS:希望童鞋们推荐一些更好的解决方法。
分享到:
相关推荐
数据库主键生成,对主键的操作,主键,标识记录,找到记录 主键
1主键常用的生成策略 2对数据库的依赖性总结 3关于主键生成策略的选择 详细解释
主要介绍了java实现数据库主键生成示例,需要的朋友可以参考下
分布式数据库中全局唯一主键生成策略的设计与实现,胡云亭,王晶,随着互联网的发展以及数据的爆炸式增长,集中式数据库已经无法满足海量数据快速存储和查询的要求了,这时分布式数据库应运而生。
oracle数据库主键自动生成
Hibernate各种主键生成策略与配置详解 1、assigned 主键由外部程序负责生成,在 save() 之前必须指定一个。Hibernate不负责维护主键生成。与Hibernate和底层数据库都无关,可以跨数据库。在存储对象前,必须要使用...
GUID 的优点带来的便利远超出其缺点带来的影响,随着诸如 WebService 等系统互联与整合技术的不断发展,其唯一标识的特性使得其应用越来越广,在您的应用程序中也应考虑使用它了。
数据库主键设计原则:我在设计主键,会采用字符型的.不采用自动递增,在新增记录时,系统生成主键值.一般为全数字进行存入,至于主键值的生成规则,可以按需求进行规则定义.如果没有特殊的要求,只是为了保持唯一...
我们在建立数据库的时候,需要为每张表指定一个主键,所谓主键是能够标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引。因为主键可以标识某一行记录,所以可以确保执行数据更新、删除的...
数据库主键和外键设计的原则
关于数据库主键和外键 终于弄懂啦
介绍数据库中主键设计的方法,以及各种方法的优点和缺陷。希望大家喜欢
数据库试卷生成系统数据库试卷生成系统数据库试卷生成系统数据库试卷生成系统数据库试卷生成系统数据库试卷生成系统数据库试卷生成系统数据库试卷生成系统数据库试卷生成系统数据库试卷生成系统数据库试卷生成系统...
数据库分库分表(sharding)系列(二) 全局主键生成策略
获取数据库所有主键获取数据库所有主键获取数据库所有主键获取数据库所有主键获取数据库所有主键获取数据库所有主键
在我们的数据库设计中,不可逃避的就是数据库表的主键,可能有很多朋友没有深入思考过,主键的设计对整个数据库的设计影响很大,因此我们不得不要重视起来。
hibernata 映射主键自动生成,跨数据库时,如何设置,主要讲述在oracle的mapping文件中的设置,以及orcle数据库中的设置
es种一共两种主键生成策略,一个是手动指定和一个是自动生成 1.document的id 1)根据应用情况来说,是否满足是否指定document id的手动指定,一般情况,是从某些其他的系统中,导入一些数据到es时,会采用这种方式,...
现在提供C#编写的数据库文档生成工具,可以方便快捷的为现有的数据库自动生成设计文档,文档内容包括字段名称,字段类型,字段大小,主键,允许为空,说明等信息。为ACCESS,SQL SERVER数据库生成设计文档,已经测试...
该策略会根据雪花算法生成主键ID,主键类型为Long或String(具体到MySQL数据库就是BIGINT和VARCHAR),该策略使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法) ...