`
graymood
  • 浏览: 7325 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

数据库主键策略的一些感想

阅读更多
目前在做一个Rss收集相关的web系统。

1.数据库是使用多台mysql。
2.用mysql 的 replication来分离读写。
3.根据用户ID来分布数据库中的数据。

问题:
1.mysql没有像oracle中的sequence。自制sequence的话怕影响效率。
2.采用mysql中的自增长主键,在分布数据库中会有重复主键问题。键值必须在多个数据库中惟一。
3.在网上查了几个程序生成的主键的方式,似乎都很长最长的要128位,这对与键索引来说会太大。
4.用时间到毫秒在加5位随机数来生成主键,但这也要20位,还是不理想。

查询了公司之前项目的主键生成机制。
发现了原项目中用了Oracle的sequence,并用一procedure把数字sequence压缩成字母大小写在加数字的形式。就是把原来的10进变成64进制,相应的位数就减少了很多。

最后决定用php来写一个压缩数字日期加随机数的程序来做,把主键限定在10以内.

大家有什么好的建义,参考参考。
分享到:
评论
5 楼 birdjavaeye 2007-10-02  
字符串可能效率会不够。
可以考虑这样的策略:
类似用户id分配,每个数据库给个编号,每个自增长初始值错开,步长设置超过数据库数量,例如:
1, 11, 21, 31, ...
2, 12, 22, 32, ...
4 楼 fight_bird 2007-10-01  
自制sequence做好是不应该有效率问题的,而且有高度数据库平台无关性的优点,不过要确保任何情况的ID的唯一性,如系统崩溃时怎么保证ID的唯一性,这需要一些技巧。
3 楼 onlytiancai 2007-08-31  
索引用整形比用字符串性能好吧。
2 楼 graymood 2007-08-23  
Zmud 写道
一般情况下同一系统中32位(8个字符的16进制表示)的主键就很难有重复,更保守一点的就是128位(32个字符的16进制表示)的主键了。
你要使用日期+随机数的表示,yyMMddHHmmss就已经12位了,后面精确到毫秒在加至少3位随机数就18位长了,其实也不短,呵呵。


20位是太长了。所要压缩到10位。压缩方式就是把10进制改成正64进制,也就是说每一个位上可以有64种状态。日期表示也不定要yyMMddHHmmss的形式,可以用从2008-08-23 24:00:00:000开始到现在毫秒数。故计这么做可以压缩在10位以内,具体还没有编程。
1 楼 Zmud 2007-08-23  
一般情况下同一系统中32位(8个字符的16进制表示)的主键就很难有重复,更保守一点的就是128位(32个字符的16进制表示)的主键了。
你要使用日期+随机数的表示,yyMMddHHmmss就已经12位了,后面精确到毫秒在加至少3位随机数就18位长了,其实也不短,呵呵。

相关推荐

    Hibernate主键策略-sequence

    在Java的持久化框架Hibernate中,主键策略是管理数据库记录唯一标识的重要组成部分。主键策略定义了如何生成和管理实体对象的主键值。在本篇内容中,我们将深入探讨"Hibernate主键策略-sequence",并结合标签中的...

    数据库主键的五种设计方法

    数据库主键设计的五种方法 数据库主键设计是数据库设计中一个非常重要的环节,好的主键设计可以提高数据库的性能和可扩展性。本文将介绍五种常见的主键设计方法,每种方法都有其优点和缺陷。 第一种:编号作主键 ...

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

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

    数据库主键和外键设计的原则.doc

    数据库主键和外键设计的原则

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

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

    数据库主键生成资料资源

    设计合理的主键策略对于数据库的高效运行至关重要。例如,如果数据量大且需要频繁插入,可能需要选择自增或雪花算法来优化性能;而在分布式环境中,可能需要采用UUID或雪花算法来确保全局唯一性。同时,主键设计还应...

    小议数据库主键选取策略

    我们在建立数据库的时候,需要为每张表指定一个主键,所谓主键是能够标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引。因为主键可以标识某一行记录,所以可以确保执行数据更新、删除的...

    数据库主键设计之思考

    数据库主键设计之思考 在数据库设计中,主键的设计是非常重要的。主键的存在代表着表结构的完整性,表的记录必须得有唯一区分的字段,主键主要是用于其他表的外键关联,本记录的修改与删除。当我们没有主键时,这些...

    JPA主键策略(针对数据库自增字段重置后无效检查项)

    在JPA中,主键策略是指生成主键的机制,用于标识数据库表中的每一行记录。在本文中,我们将详细讨论JPA主键策略的类型、特点和应用场景。 GenerationType.IDENTITY GenerationType.IDENTITY 是一种常用的主键...

    oracle数据库主键自动生成

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

    数据库中表的主键设计原则收藏.doc

    "数据库中表的主键设计原则收藏" 在设计数据库表时,主键的设计是非常重要的一步。一个好的主键设计可以提高数据库的性能和可维护性,而一个糟糕的主键设计可能会带来一系列的问题。本文将讨论数据库中表的主键设计...

    数据库主键生成GUID

    数据库主键生成GUID 在数据库设计中,选择合适的主键类型是非常重要的。GUID(Global Unique Identifier,全局唯一标识符)是一种常用的主键类型,它可以提供唯一的标识符,用于标识数据库中的每一条记录。 GUID的...

    sqlserver数据库主键

    SQL Server 数据库主键约束详解 在关系型数据库中,主键(Primary Key)是表中的一个或多个字段,它们的值可以唯一地标识表中的每一行记录。主键约束是数据库中的一种约束,它确保了表中的每一行记录的唯一性。 在...

    获取数据库所有主键获取数据库所有主键

    获取数据库所有主键获取数据库所有主键获取数据库所有主键获取数据库所有主键获取数据库所有主键获取数据库所有主键

    java实现数据库主键生成示例

    在Java编程中,数据库主键生成是一个常见的需求,特别是在创建数据表记录时,主键用于唯一标识每条记录。这个示例将展示如何使用Java来动态生成数据库主键,确保其唯一性。以下是对给定代码的详细解释和扩展。 首先...

    数据库主键 (数据完整性)

    数据库完整性详解,十分详细,附有详细上机图以及步骤。

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

    2. **`GenerationType.IDENTITY`**:此策略适用于支持自动递增主键的数据库,如MySQL。主键值由数据库自动生成并返回给应用程序。 3. **`GenerationType.SEQUENCE`**:适用于支持序列的数据库,如Oracle。需要预先...

    小议sqlserver数据库主键选取策略

    【数据库主键选取策略】 在设计SQL Server数据库时,选择合适的主键策略至关重要,因为它直接影响数据的完整性和系统的性能。主键是用来唯一标识表中每一行数据的关键字段,且一个表只能有一个主键,但可以有多个...

    Hibernate中主键生成策略

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

Global site tag (gtag.js) - Google Analytics