首页
技术笔记
网址导航
Json在线解析
二维码
Ip地址查询
在线流程图
新用户注册
|
会员登录
在线工具
开发笔记
毒鸡汤
网址导航
免费在线流程图
6赞
411
当前位置:
开发笔记
>
后端
> 正文
Mysql水平分表_MySQL
作者:mylvfamily | 2021-09-07 09:18
Mysql水平分表
bitsCN.com Mysql在数据量大的情况下,会遇到水平分表的情况。
1. 根据业务属性拆表
这种分表方式的算法大致是取模,hash,md5等。
用业务属性拆表,业务关系复杂的情况下,如果要根据其他条件查询,其他的条件都必须和这个属性关联起来,查询条件必须带有这个属性。
例子:
用户profile表根据用户ID取模进行水平拆分。
社区里有群组,群组里有应用,应用有各种类型。可以用群组ID,应用ID拆表。
问题:
根据某个条件查询时无法获取拆表的属性
1) 条件中含有分表的信息
比如用户在某网站下了订单,我们根据用户ID对订单进行了分表,这样用户可以方便地查询他所关联的订单。但用户投诉时,客服需要根据订单号查询订单,订单号中可以含有分表的信息,比如订单拆分成100张表,订单号中可以有两位用来表明该订单处于哪张表中
2) 用key-value store存储对应关联
原理是用key value store做索引表
3) 数据冗余
需要关联的表可以进行数据冗余。避免了查询。
例子:
购买礼品。购买虚拟礼品时,我们根据了购买者的ID进行了拆表,同时订单号中也含有了分表信息。但是用户还可能根据被赠送方进行查询,这时我们可以在购买成功后为被赠送方冗余生成一条记录。
4) 缓存,NOSQL
和数据冗余类似。例子中提到的群组应用的拆表例子,我们已经按照群组ID和应用类型进行了分表。但是当我要查询最近所有类型的应用时,就遇到困难了。我们需要把该群组的所有应用类型都查询一遍,而且还要再进行排序,分页等等。其实,可以用缓存的方式存储最近几百条应用。
2. 根据时间拆表
当表的关系比较复杂时,无法根据某个维度进行分表。但是有明显的时效性。
例子:
想必大家都用微薄,某人发的微薄,会被推送到千家万户。所以某条微薄是无法根据用户ID进行分表查询。而微薄是有很强的时效性的。一年前的默认的动态信息是不会再关心的。我们把微薄按时间分表,三个月一张表。而行级缓存(memcached)只存储了一个月。用户微薄收件箱(微薄ID列表)一般都是限长的。当缓存服务器重启或不命中时,需要查询Mysql,mysql按时间分表,缓存不命中的情况下,大部分情况下都是查近三个月的微薄。所以近1年的微薄我们可以存储在物理资源比较好的数据库服务器上。
3. 根据自增长ID拆表
这种分割法不是取模分,而是每张表存指定量的数据。如果数据量到了,就存放到新表中。这样可以完全控制每张表的数据量。关系非常简单并且有时效性的情况下可以用。
4. 数据迁移的方式
当一些很久之前的数据,很少再查询。比如员工工资表,我们可以只存今年的工资情况。而历史数据我们可以迁移到一张salary_old表中,保证数据不会丢失。但也可以用来查询。
分库的原理也类似。
by 第零空间 bitsCN.com
推荐阅读
程序员
Karma-Coverage报告显示代码覆盖(显然未涵盖)
如何解决《Karma-Coverage报告显示代码覆盖(显然未涵盖)》经验,为你挑选了1个好方法。 ...
[详细]
程序员
查找具有最大前K点总和的区域
如何解决《查找具有最大前K点总和的区域》经验,为你挑选了0个好方法。 ...
[详细]
程序员
为什么使用gnu90和c90标准编译时strerror_r的行为会有所不同?
如何解决《为什么使用gnu90和c90标准编译时strerror_r的行为会有所不同?》经验,为你挑选了1个好方法。 ...
[详细]
程序员
多个scipy.integrate.ode实例
如何解决《多个scipy.integrate.ode实例》经验,为你挑选了1个好方法。 ...
[详细]
程序员
如何用Java中的泛型实现工厂模式?
如何解决《如何用Java中的泛型实现工厂模式?》经验,为你挑选了1个好方法。 ...
[详细]
程序员
使用WPF MVVM预加载/隐藏加载?
如何解决《使用WPFMVVM预加载/隐藏加载?》经验,为你挑选了0个好方法。 ...
[详细]
程序员
对象/布尔等价如何在python中工作?
如何解决《对象/布尔等价如何在python中工作?》经验,为你挑选了1个好方法。 ...
[详细]
程序员
Android Studio模拟器不附带Play Store for API 23
如何解决《AndroidStudio模拟器不附带PlayStoreforAPI23》经验,为你挑选了4个好方法。 ...
[详细]
程序员
CSS图像到全宽和垂直居中?
如何解决《CSS图像到全宽和垂直居中?》经验,为你挑选了1个好方法。 ...
[详细]
程序员
D3.js多个y轴具有相同的刻度位置?
如何解决《D3.js多个y轴具有相同的刻度位置?》经验,为你挑选了1个好方法。 ...
[详细]
程序员
单击android中通知内的按钮打开对话框
如何解决《单击android中通知内的按钮打开对话框》经验,为你挑选了0个好方法。 ...
[详细]
程序员
Google地图在模拟器上显示,但不在设备上显示
如何解决《Google地图在模拟器上显示,但不在设备上显示》经验,为你挑选了1个好方法。 ...
[详细]
程序员
重新排列数组 - java
如何解决《重新排列数组-java》经验,为你挑选了1个好方法。 ...
[详细]
程序员
正则表达式:+ $ VS*$ VS无
如何解决《正则表达式:+$VS*$VS无》经验,为你挑选了2个好方法。 ...
[详细]
程序员
如何将复合文字用于`fprintf()`具有任意碱基的多个格式化数字?
如何解决《如何将复合文字用于`fprintf()`具有任意碱基的多个格式化数字?》经验,为你挑选了1个好方法。 ...
[详细]
程序员
Pandas Bar图,如何注释分组的水平条形图
如何解决《PandasBar图,如何注释分组的水平条形图》经验,为你挑选了0个好方法。 ...
[详细]
程序员
是否有任何保证在JavaScript中访问对象属性的恒定时间?
如何解决《是否有任何保证在JavaScript中访问对象属性的恒定时间?》经验,为你挑选了1个好方法。 ...
[详细]
程序员
Jupyter R Notebook中的HTML小部件
如何解决《JupyterRNotebook中的HTML小部件》经验,为你挑选了0个好方法。 ...
[详细]
程序员
插入表并将另一列设置为自动增量列值
如何解决《插入表并将另一列设置为自动增量列值》经验,为你挑选了1个好方法。 ...
[详细]
程序员
Raspberry Pi上无法运行Qt5视频播放器示例
如何解决《RaspberryPi上无法运行Qt5视频播放器示例》经验,为你挑选了1个好方法。 ...
[详细]
吐了个 "CAO" !
吐个槽吧,看都看了
会员登录
|
用户注册
mylvfamily
这个屌丝很懒,什么也没留下!
关注作者
Tags | 热门标签
asp.net
c#
c++
c语言
django
go
golang
java
lavarel
lua
mvc
mysql
nginx
node.js
php
python
redis
ruby
rust
ssl
swoole
vb
爬虫
RankList | 热门文章
1
从ASP.net项目调用静态异步方法
2
如何创建永远不会读取$ scope的$ scope函数?
3
将IISExpress绑定到IP地址失败
4
切换git分支时如何处理vim缓冲区?
5
使用CSV和PowerSHell输出格式
6
如何通过刷出元素删除ListItem?
7
"UserControl"类型不支持直接内容
8
从Go中的切片中删除字符串
9
当您无法提供色彩美感时,手动创建图例
10
Django持续时间字段具有负值
11
Newtonsoft JsonSerializer - 小写属性和字典
12
中心页脚UILabel分组UITableView - Swift
13
SQL Server sys.databases vs sysdatabases?
14
为什么我们需要dnx或跨平台的网络
15
两个同时发生的Ajax请求导致同一操作错误
16
Android camera2镜头内在校准
17
具有"NaN"值的函数表的意外行为
18
如何在Vue.js中传递动态页面:id到$ http.get url
19
谁首先在类加载过程中创建Class <?>对象?
20
Intellij Maven:创建包含所有库依赖项的jar
DevBox开发工具箱 | 专业的在线开发工具网站
京公网安备 11010802040832号
|
京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有