公众号merlinsea
方式1:按照范围进行划分
优点:数据的id可以自增长,在进行扩容的时候原来的老旧数据不需要迁移。
缺点:⼤部分读和写都访会问新的数据,有IO瓶颈,整体资源利⽤率低; 数据倾斜严重,热点数据过于集中,部分节点有瓶颈。
方式2:按照时间进行划分
按照时间的方式进行划分数据,这种方式在做日志采集的时候常常采用,既可以用于分库也可以用于分表。
优点:数据的id可以自增长,在进行扩容的时候原来的老旧数据不需要迁移。
缺点:⼤部分读和写都访会问新的数据,有IO瓶颈,整体资源利⽤率低 数据倾斜严重,热点数据过于集中,部分节点有瓶颈
方式3:按照地理位置进行划分
按照地理位置进行数据的划分,在做云服务器售卖平台的时候就会用到这种方式,但考虑到不同的城市访问量的区别,可以将访问量高的大区继续向更细粒度划分。
方式4:按照hash取模进行划分
假设要将数据分到100个表,假设来了数据data,hash(data)%100=具体某个表 。
为什么不直接取模而要用hash以后再取模?
答: 1、并不是每一个数据的字段都是可以进行数值运算的,通过hash可以将数据变为数值类型 2、hash可以进一步将数据随机化,这便于热点数据均匀分布。
优点:保证数据较均匀的分散落在不同的库、表中,可以有效的避免热点数据集中问题
缺点:扩容不是很⽅便,需要数据迁移
说明
上述的分库分表策略大都是用于水平分库分表,即表的结构是不会改变的,如果说需要垂直分库分表,则实际上是需要将一个项目按照业务 领域进行拆分。在实际的工作中,其实程序员最常用的也都是水平分库分表
- 关于leetcode算法训练营:
- 加我微信号私聊参加训练营,尤其是想进入大厂工作的同学,算法是绕不过去的坎,我自己花了三年时间刷算法,总结思路,刷各种数据结构课程,加入我的训练营,我手把手以在线直播课的形式带你理思路,手把手带你写代码,让你真正体会算法之美~,同时遇到不明白的地方可以直接课上和我沟通,彻底解决你的代码困难证~
本人用c++刷了800道左右的算法,java语言刷了600道左右的算法题,并对这些题做了详细的个人总结。本科期间系统学习了数据结构与算法课程,同时考研过程中写完了率辉主编的《2020年数据结构高分笔记》和《数据结构1000题》,看完的视频包括《mooc浙大数据结构国家精品课程》和《王道考研408数据结构课程》,《王道2019年算法题讲解视频》,最终以初试专业第三名进入了北理工软件工程专业。熟悉并掌握常见的数据结构,比如链表、数组、树、图、队列、堆栈等等,精通数据结构教材中的所有算法,比如常见的遍历算法、动态规划,递归,回溯,剪枝,并查集,最短路径,拓扑排序等,所以快加入训练营吧,我们一起进步
奔跑的小梁,公众号:梁霖编程工具库我决定了,算法文档开源!!