`
m635674608
  • 浏览: 5043423 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

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

 
阅读更多

随着时光流逝,数据库中的数据表越来越大,服务器已经不堪重负,为了解决这个问题,提出了数据分区的软件理念,简称sharding。下面就是这一软件理念的相关介绍。


1.Sharding定义
  "Shard" 这个词英文的意思是"碎片",而作为数据库相关的技术用语,似乎最早见于大型多人在线角色扮演游戏(MMORPG)中。"Sharding" 姑且称之为"分片"。
  Sharding 不是一门新技术,而是一个相对简朴的软件理念。如您所知,MySQL 5 之后才有了数据表分区功能,那么在此之前,很多 MySQL 的潜在用户都对 MySQL 的扩展性有所顾虑,而是否具备分区功能就成了衡量一个数据库可扩展性与否的一个关键指标(当然不是唯一指标)。数据库扩展性是一个永恒的话题,MySQL 的推广者经常会被问到:如在单一数据库上处理应用数据捉襟见肘而需要进行分区化之类的处理,是如何办到的呢? 答案是:Sharding。
  Sharding不是一个某个特定数据库软件附属的功能,而是在具体技术细节之上的抽象处理,是水平扩展(Scale Out,亦或横向扩展、向外扩展)的解决方案,其主要目的是为突破单节点数据库服务器的 I/O 能力限制,解决数据库扩展性问题。
  
2.事关数据库扩展性
  说起数据库扩展性,这是个非常大的话题。目前的商业数据都有自己的扩展性解决方案,在过去相对来说比较成熟,但是随着互联网的高速发展,不可避免的会带来一些计算模式上的演变,这样很多主流商业系统也难免暴露出一些不足之处。比如 Oracle 的 RAC 是采用共享存储机制,对于I/O 密集型的应用,瓶颈很容易落在存储上,这样的机制决定后续扩容只能是 Scale Up(向上扩展) 类型,对于硬件成本、开发人员的要求、维护成本都相对比较高。
  Sharding 基本上是针对开源数据库的扩展性解决方案,很少有听说商业数据库进行 Sharding 的。目前业界的趋势基本上是拥抱Scale Out,逐渐从 Scale Up 中解放出来。
  
3.Sharding 的应用场景
  任何技术都是在合适的场合下能发挥应有的作用。 Sharding 也一样。联机游戏、IM、BSP 都是比较适合 Sharding 的应用场景。其共性是抽象出来的数据对象之间的关联数据很小。比如IM ,每个用户如果抽象成一个数据对象,完全可以独立存储在任何一个地方,数据对象是 Share Nothing 的;再比如 Blog 服务提供商的站点内容,基本为用户生成内容(UGC),完全可以把不同的用户隔离到不同的存储集合,而对用户来说是透明的。
  这个"Share Nothing" 是从数据库集群中借用的概念,举例来说,有些类型的数据粒度之间就不是 "Share Nothing" 的,比如类似交易记录的历史表信息,如果一条记录中既包含卖家信息与买家信息,如果随着时间推移,买、卖家会分别与其它用户继续进行交易,这样不可避免的两个买卖家的信息会分布到不同的 Sharding DB 上,而这时如果针对买卖家查询,就会跨越更多的 Sharding ,开销就会比较大。
  Sharding 并不是数据库扩展方案的银弹,也有其不适合的场景,比如处理事务型的应用就会非常复杂。对于跨不同DB的事务,很难保证完整性,得不偿失。所以,采用什么样的 Sharding 形式,不是生搬硬套的。
  
4.Sharding与数据库分区(Partition)的区别
  有的时候,Sharding 也被近似等同于水平分区(Horizontal Partitioning),网上很多地方也用水平分区来指代 Sharding,但我个人认为二者之间实际上还是有区别的。的确,Sharding 的思想是从分区的思想而来,但数据库分区基本上是数据对象级别的处理,比如表和索引的分区,每个子数据集上能够有不同的物理存储属性,还是单个数据库范围内的操作,而 Sharding 是能够跨数据库,甚至跨越物理机器的。

 

Sharing和数据库分区的差别

 

       对于这个区别,在本次的spider storage engine实践中深有体会。

       针对现有项目,简单应用了spider storage engine后,发现性能还不如以前的读写分离&主从服务器机制 。于是就想为什么一定要用spider storage engine呢?直接应用MySQL5.1提供的 分区(Partition)功能不就行了吗,这样实现起来还会更简单。。。。。。

       针对上述疑惑试验了一下,发现MySQL5.1提供的 分区(Partition)功能确实可以实现表的分区,但是这种分区是局限在单个数据库范围里的,它不能跨越服务器的限制。

       然而Sharding理念则不同,它的数据分区并不局限在单个数据库范围,它是能够跨数据库,甚至跨越物理机器的。

而spider storage engine就是实现Sharding理念的一项技术。

 

      经过上面的分析,个人认为,如果能够保证数据量很难超过现有数据库服务器的物理承载量,那么只需利用MySQL5.1提供的 分区(Partition)功能来改善数据库性能即可;否则,还是考虑应用Sharding理念吧,spider storage engine就是一个不错的选择。

转自:http://like-eagle.iteye.com/blog/704629

分享到:
评论

相关推荐

    mysql sharding(碎片)介绍

    2. **Sharding与数据库分区(Partition)的区别** - **数据分布范围**:Sharding是跨服务器的数据分布,可以将数据切分到多个数据库实例,形成一个分布式数据库集群,而Partition是单个数据库内的数据划分,通常在...

    分布式数据库的一致性与可用性分析.pdf

    CAP理论指出,一个分布式计算系统不可能同时完全满足一致性(Consistency)、可用性(Availability)和分区容忍性(Partition tolerance)这三个保证,最多只能同时满足其中两项。因此,在设计和实现分布式数据库时...

    如果规划大规模网站架构

    Sharding与Partition的主要区别在于,Partition通常局限于单个数据库内的不同表空间,而Sharding可以跨越多个数据库。 对于垂直分区,可以根据业务逻辑将相关数据放在同一部分,例如,将用户相关的数据集中在一个...

    大规模网站架构思路指南

    Sharding与Partition的区别在于,Sharding更侧重于数据的分布式存储,可以跨越数据库和物理机器,而Partition更多是在同一数据库内部的表空间进行,不涉及不同物理属性的跨DB存储。Sharding适合于web 2.0网站等需要...

    CAP理论与分布式数据库[归纳].pdf

    CAP 理论是指在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)三者不可兼得,必须有所取舍。传统数据库保证了强一致性和高可用性,但这也使得数据库的扩展能力...

    CAP理论与分布式数据库.doc

    CAP理论是分布式系统设计中的核心概念,全称为Consistency、Availability和Partition Tolerance。这个理论指出,在分布式系统中,无法同时保证数据一致性(C)、高可用性(A)和分区容错性(P)。在面临网络分区的...

    大规模网站架构培训资料

    Sharding与Partition的区别在于,Partition通常在单一数据库内部进行,而Sharding则涉及到多个数据库和可能的物理机器。 扩展性有两种主要方式:Scale Out(横向扩展)和Scale Up(纵向扩展)。Scale Out是通过添加...

    大规模网站架构.ppt

    Sharding与Partition的主要区别在于,Partition通常在同一数据库内部进行,而Sharding可能涉及不同数据库甚至物理机器。 在Sharding的实现中,可以使用独立的DAL Proxy服务器(如MySQL的Amoeba,PostgreSQL的PL/...

    经典大规模网站架构.ppt

    Sharding和Partition的主要区别在于数据分布的方式和是否跨越数据库存储。 扩展性有两种主要方式:Scale Out和Scale Up。Scale Out通过增加更多廉价设备实现横向扩展,适合大型网站的需求;而Scale Up则是升级现有...

    NoSQL数据库-MongoDB和Redis

    CAP理论(Consistency,Availability,Partition Tolerance)指出,在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)这三个特性之间存在权衡,任何分布式系统都...

    MongoDB简介与实践.pdf

    NoSQL数据库是区别于传统关系型数据库的数据存储方式,它主要面对数据高并发性的实时读取与写入、海量数据存储和智能计算与挖掘的场景。NoSQL数据库注重高性能、可扩展性和可用性。NoSQL的数据模型通常没有固定的...

    计算机-mysql-基于NoSQL的大数据处理的研究.pdf

    本研究将重点讨论NoSQL数据库的数据一致性理论、存储模型、分区与放置策略以及数据复制技术,并分析它们如何适应大数据处理的需求。 ### 第二章 NoSQL与大数据技术 2.1 数据一致性理论 2.1.1 CAP理论 CAP理论是...

    mongo开发指南

    关系型数据库与NoSQL数据库: 关系型数据库通常遵循ACID(原子性、一致性、独立性和持久性)属性。这类数据库包括MySQL、Oracle等,它们有严格的结构化模式,适合结构化数据的管理和复杂查询。然而,随着大数据时代...

Global site tag (gtag.js) - Google Analytics