我正在编写一个将 RDBMS 转换为 HBase 的程序。我选择了一个顺序实体作为 Employee ID (1,2,3....) 之类的行键,但我在某处读到该行键不应该是顺序实体。我的问题是为什么不建议选择顺序行键。与此相关的设计前景是什么?
2 回答
尽管顺序行键允许更快的扫描,但在某个点之后它会成为一个问题,因为它RegionServer hotspotting
在读/写期间会导致不良。默认情况下,Hbase 将具有相似键的行存储到同一区域。它允许更快的范围扫描。因此,如果行键是顺序的,您的所有数据将开始进入同一台机器,导致该机器上的负载不均匀。这称为 RegionServer Hotspotting,是不使用顺序键的主要动机。我会用“写”来解释这里的问题。
当具有顺序键的记录被写入 HBase 时,所有写入都命中一个区域。如果一个 Region 由多个 RegionServer 提供服务,这将不是问题,但事实并非如此——每个 Region 只存在于一个 RegionServer 上。每个区域都有一个预定义的最大大小,因此在一个区域达到该大小后,它会被分成两个较小的区域。之后,这些新区域之一获取所有新记录,然后该区域和为其提供服务的 RegionServer 成为新的热点受害者。显然,这种不均匀的写入负载分布是非常不可取的,因为它将写入吞吐量限制为单个服务器的容量,而不是利用 HBase 集群中的多个/所有节点。
您可以在此处找到对问题的很好解释及其解决方案。
您可能还会发现此页面很有帮助,它向我们展示了如何有效地设计行键。
希望这能回答你的问题。
主要是因为顺序增加的行键将被写入同一区域,并且在写入方面不均匀分布。如果您有一个写入密集型应用程序,那么在您的行键中具有一些随机性是有意义的。
这是一个很好的解释(带有图形),为什么顺序增加的行键对 HBase 来说是个坏主意。