`

Sharding扩容方案(实现)

 
阅读更多

数据库扩容配置设计方案:

CREATE TABLE `business_unit` (
   `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '唯一主键',
   `name` varchar(100) NOT NULL COMMENT '业务标志',
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8


CREATE TABLE `share_group` (
   `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id',
   `business_id` bigint(20) NOT NULL COMMENT '业务线id',
   `start_id` bigint(20) NOT NULL COMMENT '开始id',
   `end_id` bigint(20) NOT NULL COMMENT '结束id',
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8

CREATE TABLE `share` (
   `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '分片主键id',
   `share_group_id` bigint(20) NOT NULL COMMENT '分片组id',
   `ip` varchar(100) NOT NULL COMMENT '数据库ip',
   `port` varchar(100) NOT NULL COMMENT '数据库端口号',
   `db_name` varchar(100) NOT NULL COMMENT '数据库名字',
   `hash` tinyint(4) NOT NULL COMMENT '取模值',
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8

CREATE TABLE `share_table` (
   `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '表主键id',
   `share_id` bigint(20) NOT NULL COMMENT '分片id',
   `start_id` bigint(20) NOT NULL COMMENT '业务主键开始id',
   `end_id` bigint(20) NOT NULL COMMENT '业务主键结束id',
   `table_name` varchar(100) NOT NULL COMMENT '表的名字',
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8


 

init数据:

/*Data for the table `business_unit` */

insert  into `business_unit`(`id`,`name`) values (1,'user'),(2,'order'),(3,'product');

/*Data for the table `share` */

insert  into `share`(`id`,`share_group_id`,`ip`,`port`,`db_name`,`hash`) values (1,1,'127.0.0.1','3309','user_db_1',0),(2,1,'127.0.0.2','3309','user_db_2',1),(3,1,'127.0.0.3','3319','user_db_3',2),(4,1,'127.0.0.4','3313','user_db_4',3),(5,2,'127.0.0.1','3309','user_db_5',0),(6,2,'127.0.0.1','3309','user_db_6',1),(7,3,'127.0.0.1','3309','user_db_7',0),(8,3,'127.0.0.1','3309','user_db_8',1),(9,3,'127.0.0.1','3309','user_db_9',2);

/*Data for the table `share_group` */

insert  into `share_group`(`id`,`business_id`,`start_id`,`end_id`) values (1,1,1,500000),(2,1,500001,1000000),(3,1,1000001,1500000),(4,2,1,1000000),(5,2,1000001,2000000),(6,3,1,100000),(7,3,100001,500000);

/*Data for the table `share_table` */

insert  into `share_table`(`id`,`share_id`,`start_id`,`end_id`,`table_name`) values (1,1,1,200000,'t_user_1'),(2,1,200001,400000,'t_user_2'),(3,1,400001,500000,'t_user_3'),(4,2,1,500000,'t_user_4'),(5,3,1,300000,'t_user_5'),(6,3,300001,500000,'t_user_6'),(7,4,1,500000,'t_user_7'),(8,5,500001,700000,'t_user_8'),(9,5,700001,1000000,'t_user_9'),(10,6,500001,1000000,'t_user_10'),(11,7,1000001,1500000,'t_user_11'),(12,8,1000001,1500000,'t_user_12'),(13,9,1000001,1500000,'t_user_13');

 

 

以上四张表,是对扩容的配置:

SELECT
  b.name,
  g.start_id,
  g.end_id,
  s.hash,
  s.db_name,
  s.ip,
  s.port,
  
  t.start_id,
  t.end_id,
  t.table_name
FROM business_unit b,
  share_group g,
  `share`s,
  share_table t
WHERE b.id = g.business_id
    AND s.share_group_id = g.id
    AND t.share_id = s.id;
    

 

输出为:

 

  • 大小: 12.4 KB
分享到:
评论

相关推荐

    数据库秒级平滑扩容架构方案

    该平滑扩容方案的核心优势在于无需停机即可实现数据库的秒级扩容,并且能够有效地减少数据迁移的工作量,提高扩容过程的安全性和稳定性。通过成倍扩容而非直接迁移数据,不仅减少了运维人员的工作压力,还大大提升了...

    分布式数据库-MySQL Sharding1

    在扩容 MySQL Sharding 集群时,通常采用双倍扩容的方案,例如从 2 个 dbgroup 扩展到 4 个 dbgroup。这个过程需要停止写服务,修改中间层的映射规则,并将原来的 dbgroup 数据同步到新的 dbgroup 上。 在实践中, ...

    该项目主要采用springboot2.x+sharding -spring-boot-sharding-jdbc.zip

    2. 数据库容量规划:预先评估数据规模,合理规划分片数量,避免后期扩容困难。 3. 分片策略调整:随着业务发展,可能需要动态调整分片策略,因此设计时要考虑其灵活性。 总结,SpringBoot2.x结合Sharding-JDBC为...

    sharding-jdbc-demo.zip

    Sharding-JDBC允许在线动态调整分片策略,实现平滑扩容和缩容。 7. **监控与运维**: - Sharding-JDBC提供监控接口,方便运维人员查看数据库运行状态,包括SQL执行情况、性能指标等,有助于问题排查和性能优化。 ...

    sharding-jdbc分库分表

    在使用Sharding-JDBC时,需考虑数据迁移、扩容缩容、监控报警等问题。同时,为了保证数据一致性,需要谨慎设计分片策略,避免出现跨表查询。 8. **未来发展趋势**: 随着云原生理念的普及,ShardingSphere(包括...

    sharding-jdbc-study.zip

    最后,Sharding-JDBC的动态数据源功能允许在运行时添加、删除和修改数据源,这对于应对业务变化和扩容需求非常灵活。这在压缩包中的示例代码中也有所体现,可以学习如何动态管理数据源。 总结来说,“sharding-jdbc...

    Shark分布式mysql分库分表中间件sharding领域的一站式解决方案

    Shark 分布式mysql分库分表...具备丰富、灵活的路由算法支持,能够方便DBA实现库的水平扩容和降低数据迁移成本。shark采用应用集成架构,放弃通用性,只为换取更好的执行性能与降低分布式环境下外围系统的宕机风险。

    MySQL分库分表-sharding_demo.zip

    6. **运维挑战**:分片后,数据库的运维任务会增加,包括监控、备份、恢复、扩容等。这可能需要借助自动化工具,如ShardingSphere等,以简化管理和维护工作。 7. **读写分离**:为了进一步提高性能,可以结合读写...

    redis集群搭建及各方案比较

    Redis 集群采用了分片(Sharding)策略,将数据分散存储在多个节点上,以实现数据的水平扩展。每个节点负责一部分数据,节点之间通过网络进行通信。Redis 集群的核心组件包括主节点、从节点、槽(Slots)和客户端。 ...

    腾讯私有云MySQL解决方案-TDSQL.docx

    4. 水平扩展性:通过Auto Sharding机制,实现在线无缝扩容,性能和容量线性增长。分布式事务机制降低了业务迁移的难度,性能损耗仅30%。 5. 自动化运营:提供完整的运营体系,包括自动化运营发布平台、机器资源管理...

    sharding:Golang 的分片支持

    当切片的容量不足时,可以通过 append 函数自动扩容。在分片场景中,我们可能需要将数据分布到多个切片中。例如,我们可以按照一定的规则(如哈希值、范围等)将数据分配到不同的切片,实现数据的分片存储。 3. **...

    黑马程序员_高并发解决的方案的报告书的模板.doc

    数据扩容则涉及无状态和有状态两种,前者主要针对应用服务器,后者针对数据存储,如数据分片(sharding)和副本。 2. **动静分离**:将静态资源(如图片、CSS和JavaScript)与动态请求分开,以减轻应用服务器的负担...

    DB总结

    "DB扩容迁移方案.docx"可能详细介绍了如何在不影响服务的情况下,平滑地扩展数据库硬件资源或切换到新的架构。这通常涉及负载均衡、数据分片、读写分离等策略,确保服务的连续性和数据的一致性。 2. Sharding JDBC...

    跨平台redisproxy代理服务器RedisProxy.zip

    当然其服务器C 代码主体并不涉及任何sharding方案,必须由用户自己在Config.lua里自己实现sharding函数 (当然,也可以从网上找现成的,譬如lua版的一致性hash lua-consistent-hash)感谢一定程度上借鉴了redis-...

    JAVA程序员培训(系列四)-REDIS集群、分片Sharding及使用场景介绍.pptx

    每个CODIS-server负责一部分slot的数据,这种方式便于数据的管理和扩容。 - **Redis Cluster分片**:Redis Cluster将key的空间划分为16384个hash slot,并通过CRC16(key)&16384的算法确定每个key所在的slot。每个...

    MYSQL 数据库水平切分的实现原理解析

    2. **数据迁移**:在进行扩容时,需要考虑如何高效地进行数据迁移,以最小化服务中断时间。 3. **故障恢复**:建立可靠的备份和恢复机制,确保在发生故障时能够迅速恢复正常服务。 4. **监控与维护**:建立全面的...

    高并发大容量NoSQL解决方案探索.docx

    - **扩容和缩容**:随着技术架构的演进,扩容和缩容的操作变得更加简便。Codis的使用减轻了一部分运维压力,而对于Aerospike等新方案的选择,也为未来提供了更多的灵活性。 综上所述,个推通过不断的实践和探索,...

    mysql海量数据的存储和访问解决方案归类.pdf

    同时,如何在不影响服务的情况下进行数据库扩容,也是需要解决的重要问题。 总结,MySQL海量数据的存储和访问解决方案主要包括数据切分、负载均衡和读写分离,这些策略通过分布数据、优化访问路径和平衡负载,有效...

Global site tag (gtag.js) - Google Analytics