数据库的分库分表的一些总结
来源:互联网 发布:库里数据统计职业生涯 编辑:程序博客网 时间:2024/06/11 20:22
1. 把一个实例中的多个数据库拆分到不同的实例。
1.1 比如把订单,用户和促销的节点一分为订单节点一,用户节点二,促销节点三。
2. 把一个库中的表分离到不同的数据库中。
3. 对一个库中的相关表进行水平拆分到不同实例的数据库中。(可以使用oneProxyp中间件来控制)
3.1 选择分区键值
(1)分区键要能尽量避免跨分片查询的发生;
(2)分区键要能尽量使各个分片中的数据平均。
3.2 存储无需分片的表的方式
(1)每个分片中存储一份相同的数据
优点:可以联表查询,并且对业务逻辑也不会太大改变;
缺点:造成了数据冗余。
(2)使用额外的节点统一存储
优点:不会造成数据冗余;
缺点:是不能连表查询,得通过程序来合并查询的数据,所以查询效率较(1)差一些。
3.3 在节点上部署分片,有三种常用方式
(1)每个分片使用单一数据库,并且数据库名也相同;
(2)将多个分片表存储在一个数据库中,并在表名上加入分片号后缀;
(3)在一个节点中部署多个数据库,然后将数据库名进行编号,每个数据库包含一个分片;
3.4 分配分片中的数据的方式
(1)按分区键的Hash值取模来分配分片数据
优点:能相对平均分配数据到每个分片中;
缺点:很难决定什么样的数据分配到哪个分片中。
(2)按分区键的范围来分配分片数据
优点:能清楚知道分区键在哪个分片中;
缺点:可能造成数据分配和访问量不平均。
(3)利用分区键和分片的映射表来分配分片数据。
优点:能平均分配数据到每个分片中;
缺点:该表读压力会很大,很可能会造成影响性能的瓶颈,所以建议开启缓存。
3.5 分片生成全局唯一ID的方式
(1)使用auto_increment_increment(自增步长)和auto_increment_offset(自增开始数)(参数适用于一个节点中只保存一个数据表,如果一个节点中有多个数据表就不能使用该方式);
(2)使用全局节点来生成ID(可能造成系统的性能瓶颈);
(3)在Redis等缓存服务器中创建全局ID(因为redis读写效率远大于mysql,所以建议使用)。
- 数据库的一些总结
- 数据库的分库分表的一些总结
- 关于数据库的一些总结
- 数据库复习的一些小总结
- 关于数据库修改表的一些总结
- 数据库查询优化的一些总结
- oracle数据库的一些打开导入总结
- 关于数据库操作的一些总结
- 一些常用的图像数据库总结
- 总结的一些MySQL数据库面试题
- 总结的一些MySQL数据库面试题
- 数据库Update操作的一些技巧总结
- 数据库表结构设计的一些总结
- Informix数据库临时表的一些总结
- 数据库基础知识--数据库知识的一些小总结
- 总结的关于数据库的一些面试题
- 关于数据库的一些易犯错的总结
- 关于今天数据库学习的一些内容和总结
- Spark Hadoop Free 安装遇到的问题
- HTTP详解--响应首部字段(11)
- Android自定义View之属性解析
- Http详解--实体首部字段(12)
- 第二周第二节课:线性表的链式存储结构
- 数据库的分库分表的一些总结
- inline函数
- python + selenium + chrome环境搭建
- Win7 32 不能安装STM32 虚拟串口驱动解决方法
- 【喜科堂】在主窗体中嵌入子窗体
- 构造函数练习(17/09/24)
- 1024. 科学计数法 (20)--PAT乙级
- hdu 1542 (线段树求矩形面积并)
- c++ 格雷码的生成