数据切分——原理

声明:本系列教程参考资料《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号、海量的微博信息和聊天记录放在一个数据库的一张表里无疑是一场灾难,如此大的数据量就要用到数据的切分技术。

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

时间: 2024-10-26 21:41:56

数据切分——原理的相关文章

MySQL数据切分的相关概念和原理详解

对于数据切分,我们可能还不是很熟悉,但是它对于MySQL数据库来说也是相当重要的一门技术,本文我们就详细介绍一下MySQL数据库的数据切分的相关知识,接下来就让我们一起来了解一下这部分内容. 什么是数据切分 "Shard" 这个词英文的意思是"碎片",而作为数据库相关的技术用语,似乎最早见于大型多人在线角色扮演游戏中."Sharding" 姑且称之为"分片".Sharding 不是一门新技术,而是一个相对简朴的软件理念.众所周

网站统计中的数据收集原理及实现

转载自:http://blog.sina.com.cn/s/blog_62b832910102w5mx.html Avinash Kaushik将点击流数据的获取方式分为4种:log files.web beacons.JavaScript tags和packet sniffers,其中包嗅探器(packet sniffers)比较不常见,最传统的获取方式是通过WEB日志文件(log files):而beacons和JavaScript是目前较为流行的方式,Google Analytics目前就

网站统计中的数据收集原理及实现(share)

转载自:http://blog.codinglabs.org/articles/how-web-analytics-data-collection-system-work.html 网站数据统计分析工具是网站站长和运营人员经常使用的一种工具,比较常用的有谷歌分析.百度统计和腾讯分析等等.所有这些统计分析工具的第一步都是网站访问数据的收集.目前主流的数据收集方式基本都是基于javascript的.本文将简要分析这种数据收集的原理,并一步一步实际搭建一个实际的数据收集系统. 数据收集原理分析 简单来

数据切分——Atlas读写分离Mysql集群的搭建

关于数据切分的原理可以参见博客: http://blog.csdn.net/jhq0113/article/details/44226789 关于Atlas的介绍可以参见博客: http://blog.csdn.net/jhq0113/article/details/44239823 Atlas源代码用C语言编写,它对于Web Server相当于是DB,相对于DB相当于是Client,如果把Atlas的逻辑放到Web Server程序里去处理,这样会大大增加Web Server程序的复杂度,同时

006-网站统计中的数据收集原理及实现

网站数据统计分析工具是网站站长和运营人员经常使用的一种工具,比较常用的有谷歌分析.百度统计和腾讯分析等等.所有这些统计分析工具的第一步都是网站访问数据的收集.目前主流的数据收集方式基本都是基于javascript的.本文将简要分析这种数据收集的原理,并一步一步实际搭建一个实际的数据收集系统. 数据收集原理分析 简单来说,网站统计分析工具需要收集到用户浏览目标网站的行为(如打开某网页.点击某按钮.将商品加入购物车等)及行为附加数据(如某下单行为产生的订单金额等).早期的网站统计往往只收集一种用户行

大数据技术原理与应用——大数据处理架构Hadoop

Hadoop简介 Hadoop是Apache软件基金会旗下的一个开源分布式计算平台,为用户提供了系统底层细节透明的分布式基础架构. Hadoop是基于Java语言开发的,具有很好的跨平台特性,并且可以部署在廉价的计算机集群中. Hadoop的核心是分布式文件系统(Hadoop Distributed File System,HDFS)和MapReduce. Hadoop被公认为行业大数据标准开源软件,在分布式环境下提供了海量数据的处理能力. Hadoop的特性 Hadoop是一个能够对大量数据进

MYSQL数据切分(分库分表),读写分离和主从复制

参考1 参考2 对于一个大型的互联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载.对于系统的稳定性和扩展性造成了极大的问题.通过数据切分来提高网站性能,横向扩展数据层已经成为架构研发人员首选的方式. 数据切分:可以降低单台机器的负载,同时最大限度的降低了宕机造成的损失: 负载均衡策略:可以降低单台机器的访问负载,降低宕机的可能性: 集群方案:解决了数据库宕机带来的单点数据库不能访问的问题: 读写分离策略:最大限度了提高了应用中读取数据的速度和并发量: 这里主要谈及数据切分和其相关数据库优

MySQL性能调优与架构设计——第 14 章 可扩展性设计之数据切分

第 14 章 可扩展性设计之数据切分 前言 通过 MySQL Replication 功能所实现的扩展总是会受到数据库大小的限制,一旦数据库过于庞大,尤其是当写入过于频繁,很难由一台主机支撑的时候,我们还是会面临到扩展瓶颈.这时候,我们就必须许找其他技术手段来解决这个瓶颈,那就是我们这一章所要介绍恶的数据切分技术. 14.1 何谓数据切分 可能很多读者朋友在网上或者杂志上面都已经多次见到关于数据切分的相关文章了,只不过在有些文章中称之为数据的 Sharding.其实不管是称之为数据的 Shard

《统计推断(Statistical Inference)》读书笔记——第6章 数据简化原理

在外行眼里统计学家经常做的一件事就是把一大堆杂七杂八的数据放在一起,算出几个莫名其妙的数字,然后再通过这些数字推理出貌似很靠谱的结论,简直就像是炼金术士用“贤者之石”把一堆石头炼成了金矿.第六章,应该是全书最抽象的一章,就是介绍统计学中的“贤者之石”——数据简化原理.从蕴含信息的角度看,样本全体蕴含了所有的信息,但是这些信息过于分散,研究起来无从下手,必须有简化样本的手段,把分散在每一个样本的信息聚集起来.这里的聚集是一对矛盾的对立统一体,即样本简化和信息损失的对立统一,这一章便从理论的高度探讨