数据库分片(Sharding)与分区(Partition)的区别(转)

标签:
数据库分片分区shardingpartition |
分类: DB.NoSQL.Cache |
Sharding不是一个某个特定数据库软件附属的功能,而是在具体技术细节之上的抽象处理,是水平扩展(Scale Out,亦或横向扩展、向外扩展)的解决方案,其主要目的是为突破单节点数据库服务器的 I/O 能力限制,解决数据库扩展性问题。
Sharding 的应用场景
任何技术都是在合适的场合下能发挥应有的作用。
Sharding 也一样。联机游戏、IM、BSP 都是比较适合 Sharding
的应用场景。其共性是抽象出来的数据对象之间的关联数据很小。比如IM
,每个用户如果抽象成一个数据对象,完全可以独立存储在任何一个地方,数据对象是 Share Nothing 的;再比如 Blog
服务提供商的站点内容,基本为用户生成内容(UGC),完全可以把不同的用户隔离到不同的存储集合,而对用户来说是透明的。
这个"Share Nothing"
是从数据库集群中借用的概念,举例来说,有些类型的数据粒度之间就不是 "Share Nothing"
的,比如类似交易记录的历史表信息,如果一条记录中既包含卖家信息与买家信息,如果随着时间推移,买、卖家会分别与其它用户继续进行交易,这样不可避免的两个买卖家的信息会分布到不同的
Sharding DB 上,而这时如果针对买卖家查询,就会跨越更多的 Sharding ,开销就会比较大。
Sharding
并不是数据库扩展方案的银弹,也有其不适合的场景,比如处理事务型的应用就会非常复杂。对于跨不同DB的事务,很难保证完整性,得不偿失。所以,采用什么样的
Sharding 形式,不是生搬硬套的。
Sharding与数据库分区(Partition)的区别
有的时候,Sharding 也被近似等同于水平分区(Horizontal
Partitioning),网上很多地方也用水平分区来指代
Sharding,但我个人认为二者之间实际上还是有区别的。的确,Sharding
的思想是从分区的思想而来,但数据库分区基本上是数据对象级别的处理,比如表和索引的分区,每个子数据集上能够有不同的物理存储属性,还是单个数据库范围内的操作,而
Sharding 是能够跨数据库,甚至跨越物理机器的。
http://s13/bmiddle/72ef7beate1d8fa6f3eec&690
原文:http://hi.baidu.com/1babyo/item/236ece6ef25880106995e67f
不赞同原文中Replication机制作用的描述,稍作修改。