

入门篇
Mycat开源宣言
随着技术的不断进步,是否应该有一种比公司形态更有效的组织来支撑经济的进一步发展?
这种新型组织在以有形资产为核心的,以农业经济和工业经济为主导的社会是不可能取得成功的,而在以无形资产逐渐成为核心
的,以知识经济为主导的信息社会将会成为可能。如国内崛起的分布式数据库中间件产品Mycat并不是由任何一家公司主导开发
的,而是由民间自发组织的由那些喜爱它的不知名的程序员共同开发,如今该产品的发展速度极快其影响力也逐渐扩大。
国内外类似的开源组织和产品还有很多,这些开源产品潜力无限,无论开发效率和质量都逐渐超越任何一家公司的产品。这也导
致了一些公司试图通过收购等手段遏制开源产品的发展。那么这些开源产品爱好者和贡献者获得了什么呢?在「无私奉献」的过
程中他们获得了知识——信息社会最有价值的资产,他们可以用这些知识以任何形式换来不可估量的财富,信息社会的开源组织
使「按劳分配」达到了前所未有的公平与公正。
企业所采取的期权激励、扁平化管理、自由工作时间等模式,正是对公司这种生产关系「自顶向下」的改良,以适应持久技术进
步带来的生产力的高速发展。但公司的本质:追求股东利益最大化,使其不可能实现真正意义的去中心化。
信息社会的开源组织形态是对原有公司模式「自底向上」的一次颠覆式创新,他们将带来生产力的极速发展。这种组织先天具有开
放、共享、敏捷、去中心化等等这些可以带来高效率的特性,可以想像拥有杰出技术与高效团队的开源组织可以创造出超越一切
公司的更优秀的产品。
「每一个人为改变他的状况而自然做出的努力,当其具有施展的自由和安全时,就是一个十分强有力的原则,不需要借助其他,
这种个人的努力,就能给社会带来财富和繁荣」亚当斯密的这段话是工业革命中的小公司向拥有国家特许经营权的垄断企业发出
的呐喊。没有工业革命就没有现代公司存在的必要性;没有现代公司的存在和发展,工业革命的快速进程也无法出现。历史总在
重演,信息社会的开源组织将亚当斯密这段话原封不动的回赠给了现代公司制度。它让知识经济不再只是少数资本家的游戏,而
成为普通人登台表演的机会。技术不再高高在上,而是落地生根。开源组织将成为引领信息社会进步的发动机,接下来的竞争,
就看谁能在无限的数字世界里更好的发挥开源组织的能量了,一个新的时代即将到来!
随着信息技术的持续快速发展和中国经济实力的不断加强,以Mycat为代表的中国开源组织和产品的价值和发展前景不可限量!
————By 正能量

概述
数据库切分概述
数据切分概述
OLTP和OLAP
在互联网时代,海量数据的存储与访问成为系统设计与使用的瓶颈问题,对于海量数据处理,按照使用场景,主要分为两种类
型:联机事务处理(OLTP)和联机分析处理(OLAP)。
联机事务处理(OLTP)也称为面向交易的处理系统,其基本特征是原始数据可以立即传送到计算中心进行处理,并在很短的时间
内给出处理结果。
联机分析处理(OLAP)是指通过多维的方式对数据进行分析、查询和报表,可以同数据挖掘工具、统计分析工具配合使用,增强
决策分析功能。
对于两者的主要区别可以用下表来说明:
OLTP OLAP
系统功能 日常交易处理 统计、分析、报表
DB 设计 面向实时交易类应用 面向统计分析类应用
数据处理 当前的, 最新的细节的, 二维的分立的 历史的, 聚集的, 多维的集成的, 统一的
实时性 实时读写要求高 实时读写要求低
事务 强一致性 弱事务
分析要求 低、简单 高、复杂
关系型数据库和NoSQL数据库
针对上面两类系统有多种技术实现方案,存储部分的数据库主要分为两大类:关系型数据库与NoSQL数据库。
关系型数据库,是建立在关系模型基础上的数据库,其借助于集合代数等数学概念和方法来处理数据库中的数据。主流的
oracle、DB2、MS SQL Server和mysql都属于这类传统数据库。
NoSQL数据库,全称为Not Only SQL,意思就是适用关系型数据库的时候就使用关系型数据库,不适用的时候也没有必要非使用
关系型数据库不可,可以考虑使用更加合适的数据存储。主要分为临时性键值存储(memcached、Redis)、永久性键值存储
(ROMA、Redis)、面向文档的数据库(MongoDB、CouchDB)、面向列的数据库(Cassandra、HBase),每种NoSQL都
有其特有的使用场景及优点。
oracle,mysql等传统的关系数据库非常成熟并且已大规模商用,为什么还要用NoSQL数据库呢?主要是由于随着互联网发展,数
据量越来越大,对性能要求越来越高,传统数据库存在着先天性的缺陷,即单机(单库)性能瓶颈,并且扩展困难。这样既有单
机单库瓶颈,却又扩展困难,自然无法满足日益增长的海量数据存储及其性能要求,所以才会出现了各种不同的NoSQL产
品,NoSQL根本性的优势在于在云计算时代,简单、易于大规模分布式扩展,并且读写性能非常高。

下面分析下两者的特点,及优缺点:
关系型数据库
<1>关系数据库的特点是:
- 数据关系模型基于关系模型,结构化存储,完整性约束。
- 基于二维表及其之间的联系,需要连接、并、交、差、除等数据操作。
- 采用结构化的查询语言(SQL)做数据读写。
- 操作需要数据的一致性,需要事务甚至是强一致性。
<2>优点:
- 保持数据的一致性(事务处理)
- 可以进行join等复杂查询。
- 通用化,技术成熟。
<3>缺点:
- 数据读写必须经过sql解析,大量数据、高并发下读写性能不足。
- 对数据做读写,或修改数据结构时需要加锁,影响并发操作。
- 无法适应非结构化存储。
- 扩展困难。
- 昂贵、复杂。
NoSQL数据库
<1>NoSQL数据库的特点是:
- 非结构化的存储。
- 基于多维关系模型。
- 具有特有的使用场景。
<2>优点:
- 高并发,大数据下读写能力较强。
- 基本支持分布式,易于扩展,可伸缩。
- 简单,弱结构化存储。
<3>缺点:
- join等复杂操作能力较弱。
- 事务支持较弱。
- 通用性差。
- 无完整约束复杂业务场景支持较差。
虽然在云计算时代,传统数据库存在着先天性的弊端,但是NoSQL数据库又无法将其替代,NoSQL只能作为传统数据的补充而
不能将其替代,所以规避传统数据库的缺点是目前大数据时代必须要解决的问题。如果传统数据易于扩展,可切分,就可以避免
单机(单库)的性能缺陷,但是由于目前开源或者商用的传统数据库基本不支持大规模自动扩展,所以就需要借助第三方来做处
理,那就是本书要讲的数据切分,下面就来分析一下如何进行数据切分。
何为数据切分?
简单来说,就是指通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面,以达到分散

单台设备负载的效果。
数据的切分(Sharding)根据其切分规则的类型,可以分为两种切分模式。一种是按照不同的表(或者Schema)来切分到不同的
数据库(主机)之上,这种切可以称之为数据的垂直(纵向)切分;另外一种则是根据表中的数据的逻辑关系,将同一个表中的
数据按照某种条件拆分到多台数据库(主机)上面,这种切分称之为数据的水平(横向)切分。
垂直切分的最大特点就是规则简单,实施也更为方便,尤其适合各业务之间的耦合度非常低,相互影响很小,业务逻辑非常清晰
的系统。在这种系统中,可以很容易做到将不同业务模块所使用的表分拆到不同的数据库中。根据不同的表来进行拆分,对应用
程序的影响也更小,拆分规则也会比较简单清晰。
水平切分于垂直切分相比,相对来说稍微复杂一些。因为要将同一个表中的不同数据拆分到不同的数据库中,对于应用程序来
说,拆分规则本身就较根据表名来拆分更为复杂,后期的数据维护也会更为复杂一些。
垂直切分
一个数据库由很多表的构成,每个表对应着不同的业务,垂直切分是指按照业务将表进行分类,分布到不同的数据库上面,这样
也就将数据或者说压力分担到不同的库上面,如下图:
系统被切分成了,用户,订单交易,支付几个模块。
一个架构设计较好的应用系统,其总体功能肯定是由很多个功能模块所组成的,而每一个功能模块所需要的数据对应到数据库中
就是一个或者多个表。而在架构设计中,各个功能模块相互之间的交互点越统一越少,系统的耦合度就越低,系统各个模块的维
护性以及扩展性也就越好。这样的系统,实现数据的垂直切分也就越容易。
但是往往系统之有些表难以做到完全的独立,存在这扩库join的情况,对于这类的表,就需要去做平衡,是数据库让步业务,共
用一个数据源,还是分成多个库,业务之间通过接口来做调用。在系统初期,数据量比较少,或者资源有限的情况下,会选择共
用数据源,但是当数据发展到了一定的规模,负载很大的情况,就需要必须去做分割。
一般来讲业务存在着复杂join的场景是难以切分的,往往业务独立的易于切分。如何切分,切分到何种程度是考验技术架构的一
个难题。