`
caizi12
  • 浏览: 178127 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于数据库主键生成策略的一些想法

 
阅读更多
最近自己在做一个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:希望童鞋们推荐一些更好的解决方法。
分享到:
评论

相关推荐

    持久化类主键生成策略+例子

    在Java的持久化框架中,如JPA(Java Persistence API)和Hibernate,主键生成策略是数据模型设计的重要部分。主键通常是表中唯一标识记录的一列或一组列,用于确保数据的完整性和唯一性。本篇文章将深入探讨JPA的4种...

    Hibernate中主键生成策略

    在Java的持久化框架Hibernate中,主键生成策略是一个至关重要的概念,它决定了数据库表中主键值如何自动生成。主键通常是表中唯一标识记录的一列,对于数据的完整性和一致性至关重要。以下是对Hibernate中主键生成...

    JPA学习笔记-EJB-03JPA主键生成策略总结

    ### JPA主键生成策略详解 #### 一、概述 持久化对象的主键生成机制在JPA(Java Persistence API)中占据着重要的位置。它不仅关乎数据的唯一标识符如何确定,还与数据的存储效率及应用逻辑紧密相关。JPA通过`@...

    hibernate主键生成策略

    总之,Hibernate提供了丰富的主键生成策略选项,开发人员可以根据具体的应用需求和数据库特性,选择最合适的策略来优化数据持久化的性能和可靠性。每种策略都有其独特的应用场景和限制,了解这些细节有助于做出明智...

    Java探索之Hibernate主键生成策略详细介绍

    Increment主键生成策略是由Hibernate从数据库中获取主键的最大值,然后在内存中生成主键。这种策略可以跨数据库,但它有一个缺点,即在多进程并发更新数据库时,可能会产生主键冲突。因此,它适合单一进程访问数据库...

    MybatisPlus主键生成策略方法详解.docx

    以下是关于MybatisPlus主键生成策略的详细说明: 1. **默认主键生成策略:雪花算法** 当MybatisPlus未进行任何主键策略配置时,它会默认采用雪花算法生成主键。雪花算法是由Twitter开源的一种分布式ID生成策略,...

    Hibernate主键生成策略

    - **定义**:`native`策略根据底层数据库的不同选择最合适的主键生成策略。例如,在Oracle中,它会使用`sequence`方式;而在MySQL或SQL Server中,则会使用`identity`方式。 - **优点**: - 自动适配不同的数据库...

    oracle数据库主键自动生成

    Oracle 数据库主键自动生成 在 Oracle 数据库中,主键自动生成是指在插入数据时自动生成唯一的主键值,从而简化数据录入和维护工作。下面将详细介绍 Oracle 数据库主键自动生成的实现方法和相关知识点。 序列...

    hibernate的主键生成策略

    Hibernate 是一个流行的对象关系映射(ORM)框架,它允许开发者...选择合适的主键生成策略取决于项目需求,包括数据库类型、性能需求、并发性和可移植性等。在设计时,应充分考虑这些因素以确保主键的正确性和一致性。

    mybatis-plus主键生成策略

    MyBatis-Plus主键生成策略是其框架中一个重要的特性,它提供了多种方式来生成主键ID,以便适应不同的数据库环境和业务需求。MyBatis-Plus的默认策略是Twitter的“Snowflake”算法,它能生成全局唯一的长整型ID。然而...

    数据库主键设计原则 设计数据库主健

    本文将根据提供的描述和部分内文,深入探讨数据库主键设计的原则与策略。 #### 二、主键设计原则概述 在设计主键时,通常有多种选择,包括但不限于GUID、自增字段等。根据描述,作者倾向于使用字符型而非自增方式...

    Hibernate主键生成策略.docx

    Hibernate 是一种流行的 Java 持久化框架,它简化了数据库操作,并提供了多种主键生成策略。主键是表中的一个或多个字段组合,用于唯一标识表中的每一条记录。Hibernate 支持多种主键生成策略,包括 `assigned`、`...

    hibernate映射文件--主键生成策略[参考].pdf

    Hibernate映射文件主键生成策略详解 Hibernate.cfg.xml配置文件是Hibernate框架中的一部分,该文件用于配置Hibernate的各种设置,例如数据库连接、dialect、mapping文件等。在这个文件中,我们可以看到hibernate-...

    关于数据库主键和外键 终于弄懂啦.doc

    关于数据库主键和外键 终于弄懂啦

    Hibernate主键策略-sequence

    Hibernate还提供了其他主键生成策略,如`increment`(适用于单线程环境),`identity`(数据库自增,如MySQL),`table`(通过独立的主键生成表)等,开发者应根据具体需求选择合适的策略。 6. **跨数据库兼容性**...

    MySQL数据库主键重复原因分析及处理.pdf

    但是,MySQL数据库主键也存在一些问题,例如主键重复的问题。主键重复是指在同一个表中存在多个相同的主键值。这会导致数据库的混淆和不一致。 主键重复的原因有多种,例如: 1. 数据库设计不当:如果数据库设计...

    数据库主键设计之思考

    GUID 主键是一种比较好的主键,采用 GUID 生成,GUID 是可以自动生成,也可以程序生成,而且键值不可能重复,可以解决系统集成问题,几个系统的 GUID 值导到一起时,也不会重复。 主键的设计是非常重要的,我们需要...

    Mysql数据库文档生成工具(含使用说明)

    MySQL数据库文档生成工具是一款高效实用的软件,专为MySQL数据库设计者和开发者提供方便,能够自动生成详尽的数据库设计文档。这款工具极大地简化了在项目验收阶段对数据库设计进行整理和呈现的工作流程,尤其适合...

    mysql数据库文档生成工具

    MySQL数据库文档生成工具是一款实用的软件,主要用于帮助用户快速、便捷地生成关于MySQL数据库的详细文档,包括数据库结构、表信息、字段描述等。这款工具的出现极大地简化了数据库管理员和开发人员的工作流程,使...

Global site tag (gtag.js) - Google Analytics