分库分表

生产环境Oracle数据库大表性能出现瓶颈:该表用于事务申请、检验和销毁业务,每天千万级请求量,16个应用节点,均操作单数据库单表,当请求量短时间飙升时数据库性能出现扛不住的迹象。考虑进行分库分表优化:

1、单数据库扩展为多数据库。新增两个数据库,用来分担原来的主库压力。主库原来其他表不动,大表数据割接到分库中。在主库新增路由表,保存分库映射分表关系,通过分表定位分库,供程序识别数据源。

2、单表扩展为多表。分表均衡分布在两个新增数据库中。大表分16张表,原t_wlf分为t_wlf_0至t_wlf_15,两个分库各负责8张分表。分库1对应分表0到7,分库2对应分表8到15,映射关系保存到路由表。大表割接算法:取大表中的关键字段手机号码最后两位跟16取模,得到对应的分表后缀数值。大表数据的增删改查均使用该算法找到对应分表。

3、数据割接:分库1建立到主库DBLINK,将大表备份到分库1的t_wlf_bak1,使用上述割接算法导入到分表0到7中,删除备份表;重复该过程,分库2建立到主库DBLINK,将大表备份到分库2的t_wlf_bak2,使用割接算法导入到分库7到15中,删除备份表。

3、分库分表支持水平扩容。假如只新增两张分表,直接在分库上分别新增t_wlf_16和t_wlf_17,取模由16改为18,路由表新增映射数据:分库1对应分表16,分库2对应分布17,无需数据割接。若新增一个分库3同时新增分表16和17,则直接将新分表放在新分库上,新增分库3和分表16和17的映射,无需数据割接。若只新增分库3,修改路由表映射:分库1对应分表0到5,分库2对应分表6到11,分库3对应分表12到15。数据割接:分库1上的分表6和7导入到分库2,分库2上的分表12到15导入到分库3。

数据库操作完了还得注意修改其他地方。原来只有单一数据源,现在需要将新增分库的数据源和数据实例配置到对应的容器和ORM中。

时间: 2025-01-03 23:10:30

分库分表的相关文章

MySQL分库分表方案

1. MySQL分库分表方案 1.1. 问题: 1.2. 回答: 1.2.1. 最好的切分MySQL的方式就是:除非万不得已,否则不要去干它. 1.2.2. 你的SQL语句不再是声明式的(declarative) 1.2.3. 你招致了大量的网络延时 1.2.4. 你失去了SQL的许多强大能力 1.2.5. MySQL没有API保证异步查询返回顺序结果 1.2.6. 总结 MySQL分库分表方案 翻译一个stackoverflow上的问答,关于分库分表的缺点的,原文链接: MySQL shard

数据库分库分表

1. 数据库分库分表 1.1. 前言 1.1.1. 名词解释 1.2. 数据库架构演变 1.3. 分库分表前的问题 1.3.1. 用户请求量太大 1.3.2. 单库太大 1.3.3. 单表太大 1.4. 分库分表的方式方法 1.4.1. 垂直拆分 1.4.2. 水平拆分 1.5. 分库分表后面临的问题 1.5.1. 事务支持 1.5.2. 多库结果集合并(group by,order by) 1.5.3. 跨库join 1.6. 分库分表方案产品 1.7. 为什么不建议分库分表 1.8. 参考

sharding-jdbc结合mybatis实现分库分表功能

最近忙于项目已经好久几天没写博客了,前2篇文章我给大家介绍了搭建基础springMvc+mybatis的maven工程,这个简单框架已经可以对付一般的小型项目.但是我们实际项目中会碰到很多复杂的场景,比如数据量很大的情况下如何保证性能.今天我就给大家介绍数据库分库分表的优化,本文介绍mybatis结合当当网的sharding-jdbc分库分表技术(原理这里不做介绍) 首先在pom文件中引入需要的依赖 <dependency> <groupId>com.dangdang</gr

记录一次经历的数据库从单库到分库分表的过程

前言 目前所在的的项目组,由于项目正在处于一个业务爆发期,每天数据的增长量已经给我们数据库乃至系统造成了很多不确定的因数,前期依靠优化业务和SQL等方式暂时还能够支撑住.但是最近发现某些表数据达到500W+以后查询统计性能严重下降,高峰时段出现了很多SQL阻塞的情况例如: 这种阻塞带来的灾难是滚雪球的,由于越堆越多基本上把数据库已经拖死,所以我们就面临数据库切分的问题. 技术选型 既然要分库分表那数据库集群是少不了的,那我们的项目怎样和这些集群打交道呢?我调研了大概分为以下几种来完成这个功能(仅

分库分表之后的搜索策略

所谓分库,就是把原来在一个库中的数据放到多个库中存储: 分表就是把原来在一个表中的数据放到多个表中存储. 这里不讨论分库分表的策略和具体实现,主要想记录的一点,就是分库分表后的搜索如何实现? 工作中遇到的是通过将库.表中的数据抽取出来,可用的工具有Solr.ElasticSearch等, 对你想要查询的字段建立索引,形成搜索库,这个搜索库和原来对表的搜索差不多,不同的是,搜索这个库并不是为了获取记录的完整数据. 完整的记录数据是通过查询条件在搜索库中找到满足条件的记录的id,然后通过获取的id再

Mycat读写分离和分库分表配置

Mycat是一个开源的分布式数据库系统,不同于oracle和mysql,Mycat并没有存储引擎,但是Mycat实现了mysql协议,前段用户可以把它当做一个Proxy.其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端mysql存储引擎里面.最新版本的Mycat不仅支持mysql,还可以支持MS SqlServer,Oracle,DB2等关系型数据库,而且还支持MongoDB这种NoSQL.Mycat对调用者屏蔽了后端存储具体实现. Mycat的原理是先拦截用户的SQL语句并做分

TSharding:用于蘑菇街交易平台的分库分表组件

tsharding TSharding is the simple sharding component used in mogujie trade platform. 分库分表业界方案 分库分表TSharding TSharding组件目标 很少的资源投入即可开发完成 支持交易订单表的Sharding需求,分库又分表 支持数据源路由 支持事务 支持结果集合并 支持读写分离 TSharding Resources Abstract TSharding Resources Classes TSha

关系型数据库分库分表解决方案

关系型数据库分库分表解决方案 关系型数据库单库或单表在数据达到一定量级后,单个节点的就会出现性能瓶颈.通常的做法就是考虑分库分表. 为什么要分? 分库降低了单点机器的负载:分表,提高了数据操作的效率,尤其是Write操作的效率. 如何分? 按号段分: (1) user_id为区分,1-1000的对应DB1,1001-2000的对应DB2,以此类推:优点:可部分迁移缺点:数据分布不均 (2)hash取模分: 对user_id进行hash(或者如果user_id是数值型的话直接使用user_id 的

分库分表实践之路

对于大型数据分库分表实践可以参考:http://dbaplus.cn/news-10-264-1.html http://leibinhui.iteye.com/blog/1949056 http://geek.csdn.net/news/detail/62793 http://dataunion.org/14895.html http://blog.csdn.net/column/details/sharding.html

分享一个 MySQL 分库分表类(php)

当一个表数据记录过大时就会出现性能瓶颈,而一般对应的解决办法是要么做分区表,要么分表,分区表就不说了,分表又分为垂直分割和水平分割,具体区别请自行搜索.一般而言,分库分表属于水平分割,按照一定的规则将数据插入到不同的表中去.而分库则可以很方便的转移数据库的压力,比如将一个很大库的分别放在不同的服务器上. 下面是我写的一个分库分表的实现: <?php /** * User: guoyu * Date: 14-8-12 * Time: 下午3:16 */ namespace App\Model\Da