超大数据量存储常用数据库分表分库算法总结
这篇文章主要介绍了超大数据量存储常用数据库分表分库算法总结,本文讲解了按自然时间来分表/分库、按数字类型hash分表/分库、按md5值来分表/分库三种方法,以及分表所带来的问题探讨,需要的朋友可以参考下
当一个应用的数据量大的时候,我们用单表和单库来存储会严重影响操作速度,如mysql的myisam存储,我们经过测试,200w以下的时候,mysql的访问速度都很快,但是如果超过200w以上的数据,他的访问速度会急剧下降,影响到我们webapp的访问速度,而且数据量太大的话,如果用单表存储,就会使得系统相当的不稳定,mysql服务很容易挂掉。所以当数据量超过200w的时候,建议系统工程师还是考虑分表.
以下是几种常见的分表算法。
1.按自然时间来分表/分库;
如一个应用的数据在一年后数据量会达到200w左右,那么我们就可以考虑用一年的数据来做为一个表或者库来存储,例如,表名为app,那么2010年的数据就是app_2010,app_2011;如果数据量在一个月就达到了200w左右,那么我们就可以用月份来分,app_2010_01,app_2010_02.
2.按数字类型hash分表/分库;
如果我们要存储用户的信息,我们应用的注册量很大,我们用单表是不能满足存储需求的,那么我们就可以用用户的编号来进行hash,常见的是用取余操作,如果我们要分30张表来存储用户的信息,那么用户编号为1的用户1%30=1,那么我们就存在user_01表里,如用户的编号为500,那么500%30=20,那么我们就将此用户的信息存储在user_20的表里.
3.按md5值来分表/分库;
我们假设要存储用户上传的文件,如果上传量大的话,也会带来系统的瓶颈问题,我们做过试验,在一个文件夹下如果超过200个文件的话,文件的浏览效率会降低,当然,这个不属于我们本文讨论的范围,这块也要做散列操作.我们可以用文件的用户名来md5或者用文件的md5校验值来做,我们就可以用md5的前5位来做hash,这样最多我们就可以得到5^5=3125个表,每次在存储文件的时候,就可以用文件名的md5值的前5位来确定这个文件该存那张表.
4.实例:某微博的url加密算法和存储策略的猜想.
现在好多微博都用这样的url来访问,如果他们的域名为www.example.com,那么如果你发微博的时候,你会发现你所发的url都变成了http://t.cn/Mx4ja1,这样的形式,他们是怎么进行这样的转换呢?我猜想就是用到了我们上面讲的md5的存储和查找规则,用你发的url来进行md5,得到md5值之后,如我们例子来说,就会用前6位来进行分表.
5.分表所带来的问题.
分表也会带来一系列的问题,如分页的实现,统计的实现,如果我们要做一个所有数据的分页,那么我们得每张表都得遍历一遍,这样访问效率会很低下.之前我尝试过用mysql的代理来实现,最终用tcsql来实现了.
6.分表算法的选择.
如果你的应用数据量不是特别大的话,最好别用分表。
来源:http://www.jb51.net/article/68990.htm
超大数据量存储常用数据库分表分库算法总结相关推荐
- 数据量大了一定要分表,分库分表 Sharding-JDBC 入门与项目实战
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:juejin.im/post/684490418236581 ...
- 数据量大了一定要分表,分库分表Sharding-JDBC入门与项目实战
作者:六点半起床 juejin.im/post/6844904182365814797 最近项目中不少表的数据量越来越大,并且导致了一些数据库的性能问题.因此想借助一些分库分表的中间件,实现自动化分库 ...
- 数据库分表分库相关知识
分表的方式 垂直分表 垂直分表在日常开发和设计中比较常见,通俗的说法叫做"大表拆小表",拆分是基于关系型数据库中的"列"(字段)进行的.通常情况,某个表中的字段 ...
- 数据库分表分库策略和原则
概念 数据库分库分表原则遵循:垂直拆分和水平拆分 ①垂直拆分 垂直拆分就是根据不同的业务,分为不同的数据库,比如会员数据库.订单数据库.支付数据库等,垂直拆分在大型电商系统中用的非常常见. 优点: ...
- 软件架构场景之—— 分表分库:单表数据量大读写缓慢如何解决?
业务背景 一个电商系统的架构优化,该系统中包含用户和订单 2 个主要实体,每个实体涵盖数据量如下表所示 实体 数据量 增长趋势 用户 上千万 每日十万 订单 上亿 每日百万级速度增长,之后可能是千万级 ...
- [NewLife.XCode]分表分库(百亿级大数据存储)
NewLife.XCode是一个有15年历史的开源数据中间件,支持netcore/net45/net40,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量 ...
- 学会数据库读写分离、分表分库
https://www.cnblogs.com/joylee/p/7513038.html 系统开发中,数据库是非常重要的一个点.除了程序的本身的优化,如:SQL语句优化.代码优化,数据库的处理本身优 ...
- java集群_「Java知识」MyCat的图文视频讲解,MyCat分片集群分表分库策略
在一个项目当中,项目经理要求把原先的MySQL数据连接基于mycat来进行改造 .当时就在想MyCat是什么东西?为什么要用它呢? 蚂蚁课堂带你学Java 一.什么是MyCat: MyCat是一个开源 ...
- 冷热分离和直接使用大数据库_用读写分离与分表分库解决高访问量和大数据量...
原标题:用读写分离与分表分库解决高访问量和大数据量 一. 数据切分 关系型数据库本身比较容易成为系统瓶颈,单机存储容量.连接数.处理能力都有限.当单表的数据量达到1000W或100G以后,由于查询维度 ...
最新文章
- asyncdata 获取参数_载入页面初始数据(asyncData)《 Nuxt.js:异步数据 》
- 开源网站Open-Open
- 算法----------快乐数 (Java版本)
- Segment Routing — SRv6 — TE 流量工程
- JTAG、JLINK、ULINK、ST-LINK的联系和区别
- 关于Ip地址分配规则(IPV4)
- LinuxCNC学习-HAL库介绍
- solidworks工程图转PDF缺少arial字体
- 远程控制计算机危险,小心远方的黑手 解析远程控制带来的危险 (2)
- 深度解读AMBA、AHB、APB、AXI总线
- 转载 : 10大H5前端框架
- 转行的35岁程序员们
- 商城后台管理系统(EasyUI、jQuery、js、Ajax、Servlet、jsp、mysql、EL,导出订单等)
- css前端知识分享—页面布局分析
- ios移动端兼容:iPhone X等机型底部的安全距离样式的设置
- arm开发板用无线网卡连接ap
- windows10某些文件删不掉的终极解决办法
- 浅析海思麒麟970、960和950
- Camera2 OpenCamera流程
- N76E003之模拟EEPROM
热门文章
- java web开发技巧_java web开发技巧
- quartz-misfire 错失、补偿执行
- datax安装+配置+使用文档
- 数据采集之解析Mysql的binlog日志发送至Kafka实时消费(转:https://blog.csdn.net/liguohuabigdata/article/details/79472777)
- mybatis实战教程(mybatis in action),mybatis入门到精通
- c语言中常见错误总结
- Linux下编写选择排序(C语言)
- java调用wcf控件的两种交互
- Cygwin,Nutch安装配置,检验是否正确(对网友守望者博客的修改---在此感谢守望者)2
- OpenCV学习笔记之掩码操作