原文地址:http://whosmall.com/?post=431
初创企业在发展过程中,一般不会遇到类似问题,但是随着业务量的增加,特别是电商系统,由于每日的订单数量过多,导致数据库的承载量过大,更换服务器的成本很大,所以如何来合理解决电商系统数据承载过大的问题呢?
1、从初始阶段,这应该是属于系统架构师应该考虑进去的事情,所以这项工作应该由架构师来完成;
2、如果没有合理的架构,那么在需要解决这个问题的时候,可以通过数据库分库,分表、切片的方式来进行。(再次强调这是个技术问题,产品不背锅)
顾名思义,就是把原本存储于一个库的数据分块存储到多个库上,把原本存储于一个表的数据分块存储到多个表上。
在未进行分库分表的情况下,随着时间和业务的发展,库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作,增删改查的开销也会越来越大;另外,由于无法进行分布式式部署,而一台服务器的资源(CPU、磁盘、内存、IO等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。
分库分表一般有垂直切分和水平切分两种方法
1、垂直切分,即将表按照功能模块、关系密切程度划分出来,部署到不同的库上。例如,我们会建立定义数据库workDB、商品数据库payDB、用户数据库userDB、日志数据库logDB等,分别用于存储项目数据定义表、商品定义表、用户数据表、日志数据表等。
2、水平切分,当一个表中的数据量过大时,我们可以把该表的数据按照某种规则,例如userID散列,进行划分,然后存储到多个结构相同的表,和不同的库上。例如,我们的userDB中的用户数据表中,每一个表的数据量都很大,就可以把userDB切分为结构相同的多个userDB:part0DB、part1DB等,再将userDB上的用户数据表userTable,切分为很多userTable:userTable0、userTable1等,然后将这些表按照一定的规则存储到多个userDB上。
如何合理选择切分的方式,应该通过具体业务类型进行考虑。
如果数据库是因为表太多而造成海量数据,并且项目的各项业务逻辑划分清晰、低耦合,那么规则简单明了、容易实施的垂直切分必是首选。
而如果数据库中的表并不多,但单表的数据量很大、或数据热度很高,这种情况之下就应该选择水平切分,水平切分比垂直切分要复杂一些,它将原本逻辑上属于一体的数据进行了物理分割,除了在分割时要对分割的粒度做好评估,考虑数据平均和负载平均,后期也将对项目人员及应用程序产生额外的数据管理负担。
写在最后:FOR Freedom 看看外边的世界,以及IT这一行,少不了去Google查资料,最后,安利一些速器代理。
加速器推荐 | 免费方案 | 付费方案 | 官方网站 |
一枝红杏加速器 | 免费方案暂无,稳定高速 | 输入8折优惠码wh80,年付只需80元/年 | 官网直达 |
安云加速器 | 最好用的外贸VPN | 最低¥30/月 | 官网直达 |
LoCo加速器 | 每天免费2小时 | 最低¥15/月 | 官网直达 |
转自 SUN‘S BLOG - 专注互联网知识,分享互联网精神!
相关阅读:《Chrome 扩展 Stylish :给不喜欢某个网站一键「换肤」》
相关阅读:《将 QQ 音乐、网易云音乐和虾米音乐资源「整合」一起的Chrome 扩展Listen 1》
相关阅读:《8 个「新标签页」Chrome 扩展: 教你把 New Tab 页面玩的溜溜溜》
相关阅读:《7 款实用 Chrome 扩展推荐:帮你提升 Chrome 使用体验》
相关阅读:《无扩展就不是 Chrome 了:15 款优质的Chrome 扩展推荐给大家》
相关阅读:《12 款不能少的使网页浏览获得的最佳体验Chrome 扩展》
相关阅读:《5 款可以带来幸福感的 Chrome 扩展》
相关阅读: 《关于 Android 中的 Palette 类的使用案例:色彩自适应的 Toolbar》
相关阅读:《GIT能做什么、它和SVN在深层次上究竟有什么不同》
相关阅读:《分享一些对开发者最有用的、用户友好和功能丰富的Google Chrome扩展工具》
相关阅读:《分享一些实际Android开发过程中很多相见恨晚的工具或网站》
相关阅读:《我是 G 粉,一直关注 Google,最近 Google 有一些小动作,可能很多人不太了解》
相关阅读:《机器学习引领认知领域的技术创新,那么SaaS行业会被机器学习如何改变?》
相关阅读:《VPS 教程系列:Dnsmasq + DNSCrypt + SNI Proxy 顺畅访问 Google 配置教程》
原文地址:http://whosmall.com/?post=431