`
badqiu
  • 浏览: 673863 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

数据库sharding下的主键生成策略

阅读更多

数据库水平分区(sharding),即对同一张数据库表,按照规则将数据切分至多个数据库。

 

如上图,将user表切分至三个数据库中.

 

在对数据库水平分区的情况下,面对多个数据库,想要生成一个唯一性的主键这是一个问题。

 

通常解决办法有两种:

 

UUID:

使用UUID很容易就可以生成唯一性主键,并且不用担心主键生成效率问题,当然缺点是UUID的长度过长,浪费空间,所以下面介绍另外一种方法。

 

单独一台服务器负责主键生成:

即我们使用一台单独的服务器(如mysql) 负责主键的生成

 

如果我们是使用mysql数据库,可以创建一张表来模拟oracle的sequence:

表sql:

 

 

create table tab_sequence (value bigint not null)

 oracle数据库直接使用sequence即可.

 

 

但现在我们又会碰到单点问题,即如果master挂了,对我们的应用影响非常大。

 

所以我们可以配合使用mysql 的复制功能。

 

 

配合使用linux HA: heartbeat,就算master服务器或是硬盘故障了,我们也可以很快的切换至slave.保障高可用性。

 

 

 

  • 大小: 12.1 KB
  • 大小: 17.6 KB
  • 大小: 22.8 KB
2
1
分享到:
评论
1 楼 leeqianjun 2010-02-06  
我觉得对于一个方案的采纳要考虑性价比:
方案一:使用UUID有明显的优点,那就是使用起来非常简单、不重复,缺点就如楼主说的字段过长,但是并没有长多少,也就是说对空间和性能方面的影响很微小。
方案二:使用单独的应用的来生成的主键ID,那么该应用就是单独的系统,需要考虑维护、性能、扩张等方面的因素,导致后续的代价很大。
故我觉得小系统采用Oracle/Mysql自增序列即可,也可自定义序列,大的系统采用UUID。方案二是过度设计。

相关推荐

    数据库分库分表(sharding)系列(二) 全局主键生成策略.doc

    数据库分库分表(sharding)系列(二) 全局主键生成策略

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

    Sharding-JDBC 提供了去中心化的主键生成方案,如使用 snowflake 算法,生成的主键基本有序,有利于数据库性能。 **主要流程** 包括 SQL 解析、SQL 路由、SQL 改写、SQL 执行和结果归并,这是 Sharding-JDBC 处理...

    3 Sharding-JDBC读写分离.pdf

    此外,Sharding-JDBC还提供了其他数据分片策略,以及在分布式环境下的分布式主键生成策略,这些策略可以根据应用的特定需求进行配置和优化,以达到最佳的数据处理效果。通过这些功能,Sharding-JDBC帮助开发者解决...

    4-Sharding-JDBC分库分表.pdf

    - `defaultKeyGenerator`:表示默认的主键生成策略,例如`SNOWFLAKE`。 通过上述配置,Sharding-JDBC将根据配置的分片键和分片算法将数据库操作分发到相应的数据节点上,实现数据库的水平拆分。 通过理解Sharding-...

    sharding-jdbc之——分库分表实例完整源码.zip

    1. **环境配置**:了解如何在项目中引入sharding-jdbc依赖,配置数据库连接信息以及分片策略。 2. **规则定义**:理解sharding-jdbc的分片规则,如如何根据表的主键或者特定字段进行数据分片。 3. **数据源配置**...

    Sharding-Jdbc在springboot中配置

    type: SNOWFLAKE # 主键生成策略 ``` 3. 使用分片算法 在配置了分片规则后,Sharding-Jdbc会根据定义的分片策略自动路由查询到正确的分库和分表。开发者可以在编写SQL查询时,像操作普通表一样操作分片表。...

    shardingsphere_docs_cn.pdf

    ShardingSphere 提供了分布式主键生成策略,可以确保在各个分片之间生成不重复的主键,确保数据的一致性。 4. **事务支持** 面对分库分表后的事务处理,ShardingSphere 提供了柔性事务解决方案,即在无法实现强...

    分布式数据库产品.ppt

    然而,分库分表也带来了挑战,如全局主键生成、跨节点查询、事务处理和数据库扩容等问题,需要精心设计和实现相应的解决方案。 在实施分库分表之前,开发者需要深入了解业务逻辑和数据库结构,绘制ER图或领域模型图...

    SpringBoot+Mybatis-Plus整合Sharding-JDBC5.1.1实现单库分表【全网最新】.doc

    `SNOWFLAKE`类型的主键生成器用于自动生成唯一的`cid`值。 #### 六、编写代码 完成配置后,我们可以开始编写业务代码。首先定义实体类、Mapper接口以及Service层。利用Mybatis-Plus的特性,可以大大简化代码编写...

    分库分表中间件 sharding

    在使用Sharding JDBC时,需要配置数据源、数据节点,并且通常需要放弃数据库自带的自增主键,转而采用全局主键生成策略来解决分布式环境下的主键冲突问题。逻辑表和真实表的概念在这里尤为重要,逻辑表是应用程序中...

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

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

    数据库大数据量存储

    此外,还有纠删码技术,通过在原始数据基础上生成额外信息,使得在部分数据丢失的情况下仍能恢复全部数据。 性能优化方面,数据库设计应遵循合适的数据模型,如NoSQL数据库(如MongoDB、Cassandra)或NewSQL(如...

    分布式数据库DRDS.pdf

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

    MyCat主键自增字段开启1

    在IT行业中,数据库管理和数据存储是至关重要的环节。在分布式数据库系统中,如MyCat,主键自增...然而,在实际部署中,应根据业务需求和负载情况调整配置,例如选择适当的序列生成策略,以确保系统的稳定性和高性能。

    分库分表中文手册-shardingsphere.pdf

    数据分片的挑战在于需要处理跨库联合查询、跨库事务和分布式主键生成等复杂场景。 分布式事务管理是保证在分布式系统中保持数据一致性的关键技术。它主要包括本地事务、两阶段提交和柔性事务等概念。ShardingSphere...

    100道MySQL数据库经典面试题

    MySQL数据库在IT行业中是广泛应用的关系型数据库管理系统,其性能优化和面试知识点对于后端开发者至关重要。以下是关于MySQL数据库的一些核心知识点: 1. **索引使用注意事项**: - **索引失效情况**:查询条件...

    MySQL-数据库经典面试题解析.docx

    - **分库**:按字段依据和策略(如哈希、范围)将数据分散到多个数据库。 - **分表**:同理,数据在单个表内按字段分散到多个表。 - **中间件**:如Sharding-JDBC、Mycat、TDDL、Oceanus、Vitess和Atlas等,帮助...

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

    在上述配置中,`actual-data-nodes`定义了实际的数据节点,`key-generator-column-name`指定了主键生成策略所依据的列名,而`database-strategy`和`table-strategy`分别设置了数据库和表的分片策略。你需要根据自己...

Global site tag (gtag.js) - Google Analytics