Nosql 切分vs DFS

Nosql 切分vs DFS,nosql,hdfs,distributed-computing,sharding,distributed-filesystem,Nosql,Hdfs,Distributed Computing,Sharding,Distributed Filesystem,据我所知,分片(例如MongoDB)和分布式文件系统(例如HBase或HyperTable中的HDFS)是数据库用于扩展的不同机制,但我想知道它们之间如何比较?传统的分片包括将表拆分为少量部分并运行每个部分(或“分片”)在单独的计算机上的单独数据库中。由于碎片规模较大,这一机制可能因热点和不平等的增长而容易出现失衡,这一点可以从报告中得到证明。此外,由于每个碎片都在单独的机器上运行,因此如果其中一台机器出现故障,这些系统可能会遇到可用性问题。为了缓解这个问题,大多数分片系统(包括MongoDB)

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

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

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

  • 道格·贾德 Hypertable公司首席执行官
并非“当一个[box]……出现故障时,需要更换一台新机器。”这在灾难性硬件故障的情况下是正确的,但在网络分区、电源故障、重新启动等情况下则不正确。在这些情况下,机器会重新加入副本集并快速恢复。还可以使用数据副本(从备份中,每个人都应该备份!)快速引导全新的机器,并将其添加到副本集中,而无需复制网络上的所有数据。