怎样加快master数据库的写操作?分表原则!将表水平划分!或者添加写数据库的集群
2016-11-13 01:00
190 查看
1.怎样加快master数据库的写操作?分表原则!将表水平划分!减少表的锁定时间!!!
或者或者添加写数据库的集群!!!或者添加写数据库的集群!!!
2.既然分表了,就一定要注意分表的规则!要在代码层,代码层知道将数据insert/select到哪张表上。
3.要在代码层知道将数据操作到哪张表上!分表规则,
所以分表规则要用代码设计出来,与数据库中的分表规则对应!!!一样!!!一样的分表规则!!
4.那么按什么规则分表呢?有不同的策略,常见的有按照01234556789,账号尾数0对应0表,1对应1表。
还可以按照区域划分,比如用户表,按照省份划分,湖南省用户表,北京市用户表等。
分表意思就是:将一张表划分为许多个小表,每个小表组合起来就是完整的User表。
所以,还可以按照用户省份划表。
还可以根据业务来分表。如按照用户或者商品。
具体分表规则,这叫维度。按照什么维度来分表。
假如用户购买了商品,需要将交易记录保存取来,如果按照用户的纬度分表,则每个用户的交易记录都保存在同一表中,所以很快很方便的查找到某用户的购买情况,但是某商品被购买的情况则很有可能分布在多张表中,查找起来比较麻烦。反之,按照商品维度分表,可以很方便的查找到此商品的购买情况,但要查找到买人的交易记录比较麻烦。
5.单表进行分表之后,又要注意分开的表存储位置问题。因为只有同一个数据库中才能进行联合查询。(一个数据库服务器可以多个数据库,多个数据库)
所以尽量将分开的表保存在一个数据库中,以方便联合查询!!!!
2. 联合查询的问题
联合查询基本不可能,因为关联的表有可能不在同一数据库中。
6.跨数据库分表还容易带来跨数据库事务操作,跨数据库事务操作效率很低。
所以单表水平划分多表时,要注意将拆分的表保持在同一个数据库中。
以避免不能联合查询,或者跨数据库事务这两个问题!!!!
7.Mysql提供了读写分离的机制,所有的写操作都必须对应到Master,读操作可以在Master和Slave机器上进行,Slave与Master的结构完全一样,一个Master可以有多个Slave,
所以基本在master写的数据库上进行拆分好表,然后slave数据库与主相同结构
8.所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。
此外,可以看出Master是集群的瓶颈,当写操作过多,会严重影响到Master的稳定性,如果Master挂掉,整个集群都将不能正常工作。
所以,1. 当读压力很大的时候,可以考虑添加Slave机器的分式解决,但是当Slave机器达到一定的数量就得考虑分库了。
2. 当写压力很大的时候,就必须得进行分库操作。
或者或者添加写数据库的集群!!!或者添加写数据库的集群!!!
2.既然分表了,就一定要注意分表的规则!要在代码层,代码层知道将数据insert/select到哪张表上。
3.要在代码层知道将数据操作到哪张表上!分表规则,
所以分表规则要用代码设计出来,与数据库中的分表规则对应!!!一样!!!一样的分表规则!!
4.那么按什么规则分表呢?有不同的策略,常见的有按照01234556789,账号尾数0对应0表,1对应1表。
还可以按照区域划分,比如用户表,按照省份划分,湖南省用户表,北京市用户表等。
分表意思就是:将一张表划分为许多个小表,每个小表组合起来就是完整的User表。
所以,还可以按照用户省份划表。
还可以根据业务来分表。如按照用户或者商品。
具体分表规则,这叫维度。按照什么维度来分表。
假如用户购买了商品,需要将交易记录保存取来,如果按照用户的纬度分表,则每个用户的交易记录都保存在同一表中,所以很快很方便的查找到某用户的购买情况,但是某商品被购买的情况则很有可能分布在多张表中,查找起来比较麻烦。反之,按照商品维度分表,可以很方便的查找到此商品的购买情况,但要查找到买人的交易记录比较麻烦。
5.单表进行分表之后,又要注意分开的表存储位置问题。因为只有同一个数据库中才能进行联合查询。(一个数据库服务器可以多个数据库,多个数据库)
所以尽量将分开的表保存在一个数据库中,以方便联合查询!!!!
2. 联合查询的问题
联合查询基本不可能,因为关联的表有可能不在同一数据库中。
6.跨数据库分表还容易带来跨数据库事务操作,跨数据库事务操作效率很低。
所以单表水平划分多表时,要注意将拆分的表保持在同一个数据库中。
以避免不能联合查询,或者跨数据库事务这两个问题!!!!
7.Mysql提供了读写分离的机制,所有的写操作都必须对应到Master,读操作可以在Master和Slave机器上进行,Slave与Master的结构完全一样,一个Master可以有多个Slave,
所以基本在master写的数据库上进行拆分好表,然后slave数据库与主相同结构
8.所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。
此外,可以看出Master是集群的瓶颈,当写操作过多,会严重影响到Master的稳定性,如果Master挂掉,整个集群都将不能正常工作。
所以,1. 当读压力很大的时候,可以考虑添加Slave机器的分式解决,但是当Slave机器达到一定的数量就得考虑分库了。
2. 当写压力很大的时候,就必须得进行分库操作。
相关文章推荐
- 1:分区与分表有无交集? 2:分区与分表操作,与集群应该没什么冲突吧? 3:集群算不算是加强版的分区或者分表,集群是分了数据库而已?
- 怎样用XML技术对数据库进行操作
- 数据库的相关操作:如连接、查询、添加、删除、修改、分页显示
- 使用PHPMYADMIN操作mysql数据库添加新用户和数据库的方法
- 为了方便维护,以后无论如何,数据库操作一定使用封装的强类型,或者自己封装的数据操作类。后记,使用分布式查询解决多个数据库之间的查询操作。
- 将dataGridView中的添加/删除等修改保存至数据库 ,支持多条操作,最后一次性保存
- 怎样操作数据库的Blob字段将文件写入数据库!!!
- Solar Model数据库操作之添加数据
- 用SQL语句添加删除修改字段、一些表与字段的基本操作、数据库备份等
- 请问有没有什么方法将dmp文件导入到指定的表空间去?或者怎样改变数据库所有表所在的表空间
- 关于数据库分表操作
- 简单数据库操作代码(添加删除修改读取)
- 怎样清理或者删除MSSQL数据库日志文件?
- SQL2K数据库开发七之表操作添加删除和修改列 推荐
- 树的操作(绑定数据库,添加新节点,删除节点)(转载加实现)
- asp.net数据库操作常用函数,创建,删除,数据库,创建,删除数据库表,用户必须拥有master权限
- .net 添加自定义操作----安装数据库
- 怎样清理或者删除MSSQL数据库日志文件?
- 网站设计--数据库集群和数据库垂直分割,水平分割,库表散列
- 网站设计--数据库集群和数据库垂直分割,水平分割,库表散列