开发者社区> 好1234> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

数据切分——原理

简介: 声明:本系列教程参考资料《Mysql性能调优与架构设计》         Why Mysql?         大家可能怀疑,数据库有好多种,为什么选择Mysql作为数据切分的案例,为什么不选择Oracle、MS SqlServer或者DB2等等。
+关注继续查看

声明:本系列教程参考资料《Mysql性能调优与架构设计》


        Why Mysql?


        大家可能怀疑,数据库有好多种,为什么选择Mysql作为数据切分的案例,为什么不选择Oracle、MS SqlServer或者DB2等等。原因是大家都知道,淘宝网最开始选择LAMP的架构设计,即Linux+Apache+Mysql+PHP,最开始系统遇到的瓶颈是当时PHP不支持数据库连接池,国外当时有一个支持连接池的PHP技术,但是价格非常昂贵,后来不得不将核心业务用Java改写,经过一段时间的发展,淘宝的架构变成

Java+ibatis+Oracle,但是Oracle需要跑到IBM的微型机上,成本相当高,这时淘宝又选择了Mysql,因为Mysql是第一个在Linux下运行的数据库,集群性能和稳定性特别好,对服务器的性能要求也不高,所以淘宝最新的系统更多的是用Mysql来承担的。


       抛开淘宝,京东、新浪等等都是选择Mysql,他们在大数据的处理上面都选择Mysql,证明应用Mysql数据库是一个不错的选择。


       什么是数据切分?


        数据切分(Sharding)是指通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面,以达到分散单台设备负载的效果。数据的切分同时还可以提高系统的总体可用性,因为单台设备Crash之后,只有总体数据的某部分不可用,而不是所有的数据。


        数据的切分(Sharding)根据其切分规则的类型,可以分为两种切分模式。一种是按照不同的表(或者Schema)来切分到不同的数据库(主机)之上,这种切可以称之为数据的垂直(纵向)切分;另外一种则是根据表中的数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库(主机)上面,这种切分称之为数据的水平(横向)切分。


        垂直切分还是水平切分?


       垂直切分的最大特点就是规则简单,实施也更为方便,尤其适合各业务之间的耦合度非常低,相互影响很小,业务逻辑非常清晰的系统。在这种系统中,可以很容易做到将不同业务模块所使用的表分拆到不同的数据库中。根据不同的表来进行拆分,对应用程序的影响也更小,拆分规则也会比较简单清晰。


       水平切分于垂直切分相比,相对来说稍微复杂一些。因为要将同一个表中的不同数据拆分到不同的数据库中,对于应用程序来说,拆分规则本身就较根据表名来拆分更为复杂,后期的数据维护也会更为复杂一些。

        

       在我们的系统中,如果用垂直切分足够解决问题,那么我们首选垂直切分,垂直切分带来的好处是不言而喻的,假如垂直切分仍然不能满足要求的时候,那么我们就不得不垂直切分和水平切分联合使用了,但是进行水平切分的时候一定要仔细斟酌切分规则,不同的切分规则会带来截然不同的维护成本,尽量做到符合业务需求。


         Why Sharding?


       理由通常是这样的,要么数据量很大,要么并发很大,总之,因为数据库不能很好的为他的客户端服务了。


       大家有没有想过,腾讯的QQ号是放在一个数据库了吗?新浪的微博信息是存放在一张表里了吗?还有微信的聊天记录是放在一个数据库的一张表了吗?答案当然是否定的。几个亿的QQ号、海量的微博信息和聊天记录放在一个数据库的一张表里无疑是一场灾难,如此大的数据量就要用到数据的切分技术。


       数据的切分不光是解决大数据的问题,同时也会给高并发提供了一定的帮助。对于聊天记录,我们可以利用数据的垂直切分,将聊天记录业务与其他业务分离开来,这样客户端访问数据库的时候可以有更理想的性能,同时,我们可以利用水平切分,每个人一张表,这样可以保证每个人读取自己的聊天记录的时候也会有更理想的效果,当然,即使你这样做了,数据量还是很大,你也可以根据业务进行更大力度的切分,一般垂直切分和水平切分联合使用可以解决大部分问题。


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
数据预处理-数据拆分代码及效果|学习笔记
快速学习数据预处理-数据拆分代码及效果
0 0
数据分布背后的逻辑
在分布式数据库及大数据平台中,数据如何分布到多台机器中是个很关键的问题。因为很多运算是数据密集型的,如果数据分布做得不好,就会导致网络传输量变大,从而影响性能。 一般来讲,分布式数据库会提供两种分布策略:对于大表按某个字段(的 HASH 值)去分布,大多数情况会使用主键,这样可以把数据分拆到多台机器上;对于小表则采用复制性分布,也就是每个机器上都会复制一份。
850 0
数据切分——Atlas介绍
        Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。
1325 0
+关注
好1234
在PHP技术圈摸爬滚打四五载,经历了高并发、大数据项目的各种坑,不断的在坑中打磨成长。热衷技术领域:Yii2 、 Mysql 、Redis 、ElasticSearch 、Nginx、设计模式、分布式存储、分布式编程,对面向对象编程有比较独到的见解,重视团队协作。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
RowKey与索引设计:技巧与案例分析
立即下载
Quanta:Quora的HBase分层计数系统
立即下载
HBase Rowkey设计要点
立即下载