水平分库分表的策略

简介: 水平分库分表的策略

公众号merlinsea


方式1:按照范围进行划分


   优点:数据的id可以自增长,在进行扩容的时候原来的老旧数据不需要迁移。


   缺点:⼤部分读和写都访会问新的数据,有IO瓶颈,整体资源利⽤率低;    数据倾斜严重,热点数据过于集中,部分节点有瓶颈。


640.jpg


方式2:按照时间进行划分


   按照时间的方式进行划分数据,这种方式在做日志采集的时候常常采用,既可以用于分库也可以用于分表。


   优点:数据的id可以自增长,在进行扩容的时候原来的老旧数据不需要迁移。


   缺点:⼤部分读和写都访会问新的数据,有IO瓶颈,整体资源利⽤率低    数据倾斜严重,热点数据过于集中,部分节点有瓶颈

640.jpg


方式3:按照地理位置进行划分


   按照地理位置进行数据的划分,在做云服务器售卖平台的时候就会用到这种方式,但考虑到不同的城市访问量的区别,可以将访问量高的大区继续向更细粒度划分。

640.jpg


方式4:按照hash取模进行划分


   假设要将数据分到100个表,假设来了数据data,hash(data)%100=具体某个表 。

   为什么不直接取模而要用hash以后再取模?


    答:   1、并不是每一个数据的字段都是可以进行数值运算的,通过hash可以将数据变为数值类型    2、hash可以进一步将数据随机化,这便于热点数据均匀分布。

   优点:保证数据较均匀的分散落在不同的库、表中,可以有效的避免热点数据集中问题

   缺点:扩容不是很⽅便,需要数据迁移


640.jpg


说明


   上述的分库分表策略大都是用于水平分库分表,即表的结构是不会改变的,如果说需要垂直分库分表,则实际上是需要将一个项目按照业务 领域进行拆分。在实际的工作中,其实程序员最常用的也都是水平分库分表


  • 关于leetcode算法训练营:
  •    加我微信号私聊参加训练营,尤其是想进入大厂工作的同学,算法是绕不过去的坎,我自己花了三年时间刷算法,总结思路,刷各种数据结构课程,加入我的训练营,我手把手以在线直播课的形式带你理思路,手把手带你写代码,让你真正体会算法之美~,同时遇到不明白的地方可以直接课上和我沟通,彻底解决你的代码困难证~

本人用c++刷了800道左右的算法,java语言刷了600道左右的算法题,并对这些题做了详细的个人总结。本科期间系统学习了数据结构与算法课程,同时考研过程中写完了率辉主编的《2020年数据结构高分笔记》和《数据结构1000题》,看完的视频包括《mooc浙大数据结构国家精品课程》和《王道考研408数据结构课程》,《王道2019年算法题讲解视频》,最终以初试专业第三名进入了北理工软件工程专业。熟悉并掌握常见的数据结构,比如链表、数组、树、图、队列、堆栈等等,精通数据结构教材中的所有算法,比如常见的遍历算法、动态规划,递归,回溯,剪枝,并查集,最短路径,拓扑排序等,所以快加入训练营吧,我们一起进步

奔跑的小梁,公众号:梁霖编程工具库我决定了,算法文档开源!!


相关文章
|
2月前
|
存储 大数据 数据库
分库分表知识总结(三)之水平分表
分库分表知识总结(三)之水平分表
56 0
|
11月前
|
数据库
分库分表后路由策略设计
分库分表后设计到的第一个问题就是,如何选择路由key,应该如何对key进行路由。路由key应该在每个表中都存在而且唯一。路由策略应尽量保证数据能均匀进行分布。 如果是对大数据量进行归档类的业务可以选择时间作为路由key。比如按数据的创建时间作为路由key,每个月或者每个季度创建一个表。按时间作为分库分表后的路由策略可以做到数据归档,历史数据访问流量较小,流量都会打到最新的数据库表中。 也可以设计其与业务相关的路由key。这样可以保证每个数据库的资源都能很好的承担流量。
|
12月前
|
SQL 算法 Java
自定义水平分库分表策略【范围分片】
自定义水平分库分表策略【范围分片】
|
12月前
|
算法 Java 数据库连接
自定义水平分库分表的策略【精准分片】
自定义水平分库分表的策略【精准分片】
|
12月前
|
SQL 算法 Java
自定义水平分库分表策略【hint分片】
自定义水平分库分表策略【hint分片】
|
12月前
|
SQL 算法 Java
水平分库和水平分表
水平分库和水平分表
|
存储 程序员 数据库
如何选择合适的分表分库方案
如何选择合适的分表分库方案
75 0
|
存储 大数据 数据库
水平分库
水平分库
97 0
水平分库
|
算法 Java 数据库连接
ShardingJDBC实现水平分库、水平分表
ShardingJDBC实现水平分库、水平分表
ShardingJDBC实现水平分库、水平分表
|
分布式数据库 SQL 数据库
分布式数据库选型——数据水平拆分方案
本文尝试从数据的角度总结分布式数据的复制(replication)和分区(partition)技术原理和方案,其中分区也有称为分片(sharding),希望能引起读者一些思考,在分布式数据库选型中能注意这些细节的区别,选择适合业务的数据水平拆分方案。
3554 0
分布式数据库选型——数据水平拆分方案

热门文章

最新文章

  • 1
    流量控制系统,用正则表达式提取汉字
    27
  • 2
    Redis09-----List类型,有序,元素可以重复,插入和删除快,查询速度一般,一般保存一些有顺序的数据,如朋友圈点赞列表,评论列表等,LPUSH user 1 2 3可以一个一个推
    27
  • 3
    Redis08命令-Hash类型,也叫散列,其中value是一个无序字典,类似于java的HashMap结构,Hash结构可以将对象中的每个字段独立存储,可以针对每字段做CRUD
    27
  • 4
    Redis07命令-String类型字符串,不管是哪种格式,底层都是字节数组形式存储的,最大空间不超过512m,SET添加,MSET批量添加,INCRBY age 2可以,MSET,INCRSETEX
    28
  • 5
    S外部函数可以访问函数内部的变量的闭包-闭包最简单的用不了,闭包是内层函数+外层函数的变量,简称为函数套函数,外部函数可以访问函数内部的变量,存在函数套函数
    25
  • 6
    Redis06-Redis常用的命令,模糊的搜索查询往往会对服务器产生很大的压力,MSET k1 v1 k2 v2 k3 v3 添加,DEL是删除的意思,EXISTS age 可以用来查询是否有存在1
    31
  • 7
    Redis05数据结构介绍,数据结构介绍,官方网站中看到
    22
  • 8
    JS字符串数据类型转换,字符串如何转成变量,+号只要有一个是字符串,就会把另外一个转成字符串,- * / 都会把数据转成数字类型,数字型控制台是蓝色,字符型控制台是黑色,
    20
  • 9
    JS数组操作---删除,arr.pop()方法从数组中删除最后一个元素,并返回该元素的值,arr.shift() 删除第一个值,arr.splice()方法,删除指定元素,arr.splice,从第一
    21
  • 10
    定义好变量,${age}模版字符串,对象可以放null,检验数据类型console.log(typeof str)
    20