概述
Sharding不是一个某个特定数据库软件附属的功能,而是在具体技术细节之上的抽象处理,是水平扩展(ScaleOut,亦或横向扩展、向外扩展)的解决方案,其主要目的是为突破单节点数据库服务器的 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 也被近似等同于水平分区(HorizontalPartitioning),网上很多地方也用水平分区来指代Sharding,但我个人认为二者之间实际上还是有区别的。的确,Sharding的思想是从分区的思想而来,但数据库分区基本上是数据对象级别的处理,比如表和索引的分区,每个子数据集上能够有不同的物理存储属性,还是单个数据库范围内的操作,而Sharding 是能够跨数据库,甚至跨越物理机器的。
最后
以上就是超帅灯泡为你收集整理的数据库分片(Sharding)与分区(Partition)的区别的全部内容,希望文章能够帮你解决数据库分片(Sharding)与分区(Partition)的区别所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复