当前位置:  开发笔记 > 数据库 > 正文

Sharding vs DFS

如何解决《ShardingvsDFS》经验,为你挑选了1个好方法。

据我所知,分片(例如在MongoDB中)和分布式文件系统(例如HBase或HyperTable中的HDFS)是数据库用于横向扩展的不同机制,但是我想知道它们如何比较?



1> 小智..:

传统的分片涉及将表分成少量部分并在单独的机器上的单独数据库中运行每个部分(或"分片").由于碎片大小较大,这种机制可能由于热点和不均衡的增长而容易出现不平衡,如Foursquare事件所证明的那样.此外,由于每个分片都在单独的计算机上运行,​​因此如果其中一台计算机出现故障,这些系统可能会遇到可用性问题.为了缓解此问题,大多数分片系统(包括MongoDB)都实现了副本组.每台机器由一台主机中的三台机器和两台从机配置替换.这样,如果计算机出现故障,则有两个剩余的副本用于提供数据.这种设计存在一些问题:首先,如果副本组中的副本失败,并且该组只剩下两个成员,要将复制计数恢复为三个,则这两台计算机之一上的数据需要克隆.由于整个群集中只有两台机器可用于重新创建副本,因此在重新复制时会对这两台机器中的一台机器造成巨大阻力,从而导致严重的性能问题(在千兆链路上复制1TB 需要两个多小时).第二个问题是当其中一个副本发生故障时,需要用新机器替换它.即使群集中有足够的备用容量来解决复制问题,也不能使用该备用容量来纠正这种情况.解决它的唯一方法是更换机器.从操作的角度来看,这变得非常具有挑战性,因为群集大小会增长到数百或数千台计算机.

Bigtable + GFS设计解决了这些问题.首先,表数据被分解为更精细的"平板电脑".Bigtable集群中的典型计算机通常具有500多个平板电脑.如果出现不平衡,解决它只是将少量平板电脑从一台机器迁移到另一台机器的简单问题.如果TabletServer出现故障,由于数据集被分解并以如此精细的粒度进行复制,因此可能有数百台计算机参与恢复过程,从而分配恢复负担并加快恢复时间.此外,由于数据不依赖于特定的一台或多台计算机,因此群集中所有计算机上的备用容量都可以应用于故障.由于整个群集中的任何备用容量都可用于纠正复制不平衡,因此无需更换机器的操作要求.

Doug Judd,Hypertable Inc.首席执行官

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有