`
cppmule
  • 浏览: 447108 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

分库分表(sharding)后主键全局唯一性的解决方案

 
阅读更多

分库分表(sharding)后主键全局唯一性的解决方案


随着数据量的增大,在数据库的扩展上通常遇到切分时保证键值的唯一性问题,遇到这种情况,通常有如下几种相对简单的解决方案:

1  UUID 这种方案的优点是实现和管理简单,缺点是占用空间大,查询效率低下。

2  Sequence Number 优点是实现和管理简单,确定是有性能瓶颈和单点问题。

3  不同的集群采用的起始点或者增长间隔不同 这种方案实现简单,但是后期管理麻烦。

除了上述解决方案之外其实还有很多简单可行的办法,但是通用性不太好,在各种解决方案的接触上,本人总结出一个实现和性能上都很好的解决方案,那就是采用时间戳加毫秒数再加随机数来解决,存储字段采用bigint。
下面给出php代码实现:
function ivan_fetch_unique_bigint_id()
{
    $start_timestamp = 1238119411;
    $ivan_len = 3;
    $time = explode( ‘ ‘microtime());
    $id = ($time[1] – $start_timestamp) . sprintf(‘%06u’substr($time[0]26));
    if ($ivan_len > 0) {
        $id .= substr(sprintf(‘%010u’mt_rand())0$ivan_len);
    }
    return $id;
}
取模测试均分性很好。
分享到:
评论

相关推荐

    分库分表shardingjdbc

    - **分布式主键**:在分片环境中保证全局唯一性的关键。 - **强制分片路由**:确保特定类型的查询能够准确地定位到正确的数据片段。 - **内核剖析** - **SQL 解析**:将 SQL 语句分解为易于处理的结构。 ...

    MySQL分库分表技术

    1. **数据一致性**:分库分表后,事务处理变得复杂,需要考虑分布式事务的实现,如两阶段提交、补偿事务等。 2. **跨库查询**:分库后,部分原先的单表查询变为跨库查询,需要设计中间件(如MyCat、ShardingSphere)...

    基于mybatis插件实现轻量级分库分表方案-亿级数据mysql存储解决方案-mybatis-sharding.zip

    - **分布式主键**:提供全局唯一ID生成器,保证跨库分表后数据的唯一性。 3. **实现原理** - **SQL拦截与改写**:利用 MyBatis 的插件机制,拦截 SQL 执行过程,根据分片规则修改 SQL,使其指向正确的数据库和表...

    sharding-jdbc分布式数据库培训方案

    **分布式主键** 在分布式环境中至关重要,需要保证全局唯一性。Sharding-JDBC 提供了去中心化的主键生成方案,如使用 snowflake 算法,生成的主键基本有序,有利于数据库性能。 **主要流程** 包括 SQL 解析、SQL ...

    shardingsphere_docs_cn.pdf

    在分库分表后,如何生成全局唯一的主键成为了一个问题。ShardingSphere 提供了分布式主键生成策略,可以确保在各个分片之间生成不重复的主键,确保数据的一致性。 4. **事务支持** 面对分库分表后的事务处理,...

    using-oracle-sharding.pdf

    3. **全局唯一标识符(Global Unique Identifier, GUID)**:在Oracle Sharding中,全局唯一标识符用于确保每个分片中的数据都有唯一的主键,即使这些数据在不同的分片之间有相同的分片键值。 4. **分片配置器...

    Springboot2.x+ShardingSphere实现分库分表的示例代码

    ShardingSphere 是一个分布式数据库解决方案,提供分片、读写分离、数据库事务一致性等能力。 首先,我们要理解分库分表的基本概念。垂直分片是指根据业务功能将数据库中的表进行拆分,把相关的表放在同一个数据库...

    MyCat主键自增字段开启1

    在MyCat中,主键自增字段的管理是一个关键特性,特别是在需要保证全局唯一性的场景下。 要开启主键自增功能,我们需要进行以下步骤: 1. 修改`server.xml`配置文件: 在`server.xml`中,找到`sequnceHandlerType`...

    mysql面试题100题,包含答案和解析.docx

    - 分布式主键的选择要考虑全局唯一性和性能需求,例如UUID或自增ID。 - 事务隔离级别有读未提交、读已提交、可重复读和串行化,MySQL默认是可重复读。 - 幻读、脏读和不可重复读是事务一致性问题,与隔离级别有关...

    高级mysql运维工程师面试题20道

    **MySQL 运维面试题详解** ...20. **复杂项目案例**:涉及复杂的数据库架构可能包括分库分表、读写分离、分布式事务处理等;优化项目可能包括索引优化、SQL查询重构、存储引擎选择等,目标是提高系统性能和稳定性。

    50万字大厂后端面经,java生态全链路面试真题总结

    - **分库(Sharding):** 将数据分散到不同的数据库实例上,减轻单个数据库的压力。 - **分表(Partitioning):** 将一个大表拆分成多个小表,以提高查询性能。 - **选择策略:** 常见的分片策略包括哈希分片、...

    分布式数据库DRDS.pdf

    9. **全局唯一数字序列**:提供了自动生成全局唯一数字序列的功能,支持主键自增(auto_increment)等应用场景。 10. **并发型只读实例**:通过物理资源和链路隔离的方式,处理高并发查询,保障在线业务链路的稳定性...

    JAVA数据库设计14个技巧

    通常,自动递增整数或GUID(全局唯一标识符)作为主键是较为常见的做法。 ### 7. 理解并应用ER图的标准化 标准化ER图是确保数据库设计准确反映业务需求的关键步骤。它涉及到对ER图进行细致审查和调整,以确保所有...

    MongoDB表的设计

    确保全局唯一性可以采用类似Twitter Snowflake的算法。 5. **索引设计** - 索引加速查询速度,尤其是配合内存使用。不同类型的索引(唯一索引、联合索引)满足不同需求。 - 联合索引支持前缀查询,提高查询效率。...

    mysql 群集配置

    MySQL集群,也称为MySQL Cluster,是一种分布式数据库系统,它通过数据分片(sharding)、冗余和自动故障转移来提供高可用性和可扩展性。 首先,MySQL集群的核心组件包括管理节点(NDG - Node Group)、数据节点...

Global site tag (gtag.js) - Google Analytics