一般的系统总是由小到大发展的。一开始使用一个数据库,而后逐渐扩展。在分库过程中经常使用对特定的键值进行hash的办法进行分库分表。但是使用hash来进行分库分表,在具体的应用中可能不能满足需求。比如,在SAAS平台下,不同租户的数据量是千差万别的,根据二八现象,20%的租户可能占用了80%的存储资源。如果使用hash算法,很可能导致数据分布不均匀。
这里提出一个分库分表算法,解决SAAS平台下,数据存储的二八现象。
元数据准备
1. 业务数据按照租户ID进行分库。
2. 用一张表存储,租户ID->虚拟库ID的映射关系,(可在启动后,导入内存)。
3. 用另一张表存储,虚拟库ID->实际库连接信息(也可以在启动后,导入内存)。
业务数据存取
1. 需要存储数据前,先根据租户ID(数据中总是带有租户ID),切换数据源
2. 数据源查找的过程,基本上是对上述两张元数据表进行查找,先找到虚拟库ID,进而找到实际的库连接信息。
3. 需要提取数据时,也按照上述方法找到实际的库连接信息,进行数据源切换。
分析
1. 之所以使用两张表而不是一张表(直接租户ID->实际库连接信息),是为了便于管理。及减少内存消耗。
2. 可以在虚拟库ID上进行某种业务划分,如,分为散户,小客户,普通客户,大客户,超大客户。被划分在同一个虚拟库ID上的租户必将共享一个实际的物理库。所以在开始规划的时候,应当尽量均匀地将租户分配到不同的虚拟库ID上。
3. 在虚拟库ID上的数据是基本均匀的假设下,就可以将虚拟库ID映射到实际的物理库上。
4. 在物理库扩展的情况下,可以将部分虚拟库ID的数据,迁移到新的物理库上。
实际案例模拟
1. 租户A被分配了虚拟库#12;虚拟库#12实际处于物理库#1上。
2. 由于物理库#1已经负载过重,决定扩展一个物理库#5,并把虚拟库#12迁移到物理库#5.
3. 停机(不知道有没有更好的办法),将虚拟库#12的数据导出,导入到物理库#5中。注意,此时虚拟库#12的数据同时在#1和#5上。
4. 切换元数据表,进行验证。如果验证通过,则,择机回收物理库#1上的数据空间;如果验证失败,恢复元数据信息,找到失败原因,下次再做数据迁移。
利弊分析
1. 引入虚拟库的原因是:一次可以将有逻辑关联的一组租户一并迁移,减少维护成本。
2. 该算法仍旧不支持“不停机”数据迁移,可能都不支持“部分停机,大部分不停机”数据迁移。
分享到:
相关推荐
水平拆分数据分库和分表的核心问题是表的ID唯一,然后根据唯一的ID映射到一个物理存储位置,这个映射方案要考虑到满足数据量暴增线性扩展和业务上容易保持一致,本文主要讨论分库分表如何映射的问题。
2. 数据扩展性:当数据量不断增长时,分库分表可以帮助系统无缝扩展,避免单一数据库的性能瓶颈。 3. 数据安全性:通过分散数据到不同的库和表中,可以提高数据的安全性,一旦某个库或表出现问题,不会影响整个系统...
在之前的文章中,我介绍了分库分表的几种表现形式和玩法,也重点介绍了垂直分库所带来的问题和解决方法。本篇中,我们将继续聊聊水平分库分表的一些技巧。 关系型数据库本身比较容易成为系统性能瓶颈,单机存储容量...
Mycat 分库分表、主从文档及代码demo,Mycat安装配置 Mycat分库实战 Mycat扩展应用 Mycat主从同步 Mycat实战demo
58同城mysql分库分表实践,非常不错的分享文档,适合学习如何扩展MySQL的。
在快速上手和掌握基础用法的同时,我们还需要了解和理解其背后的技术原理和潜在问题,本文阐述了分库分表解决方案所带来的问题,也分析了ShardingSphere的SPI扩展,让读者理解其机制和用法。 最后,本文进行了一定的...
NULL 博文链接:https://javatea.iteye.com/blog/2383983
NULL 博文链接:https://mingkongeye.iteye.com/blog/2242715
本文深入探讨了ShardingSphere的内核原理及其核心源码,提供了关于其解析、路由、改写、执行和归并引擎的详细分析。首先,解析引擎部分介绍了...此外,还包括了设置源码环境和具体实现分库分表功能的步骤。
定制开发sysbench扩展版压测分库分表场景-附件资源
使用Mysql来搭建可扩展的SNS网站(浅谈)
具有以下功能点:配置集中管理,动态刷新支持读写分离,分库分表丰富的监控信息在CAT上展现初步化数据库请求,多数据源支持核心价值简化了识别分离,分库分表的开发工作,并在业务方在分库分库,识读分离的情况下,...
Laravel表分片 安装 composer xialin/table 注入 'providers' => [ /* * Laravel Framework Service Providers... */ Illuminate \ Auth \ AuthServiceProvider ::class, Illuminate \ Broadcasting \ ...
一、背景 随着零售门店数量的增长,库存表,优惠劵表,消息表,订单表数据量不断的增多,目前一主(写)多从的MySQL...支持独有的基于E-R 关系的分片策略,实现了高效的表关联查询 三、架构设计改造 目前生产数据库架构
这是一个SDL音频扩展动态库文件,有了它可以支持播放其他格式的音频。
其核心采用微内核 + 可插拔架构,通过插件开放扩展功能。它提供多源异构数据库增强平台,进而围绕其上层构建生态。 Apache ShardingSphere 设计哲学为 Database Plus,旨在构建异构数据库上层的标准和生态。它关注...