Database 如何在Hbase中设计行键

Database 如何在Hbase中设计行键,database,hbase,Database,Hbase,我正在编写一个程序,将RDBMS转换为HBase。我选择了一个顺序实体作为行键,比如Employee ID(1,2,3…),但我在某个地方读到它,行键不应该是顺序实体。我的问题是为什么不建议选择顺序行键。与此相关的设计前景是什么 主要是因为按顺序增加的行键将被写入同一区域,而不是在写入方面均匀分布。如果您有一个写密集型应用程序,那么在行键中加入一些随机性是有意义的 关于为什么按顺序增加行键对HBase是个坏主意。虽然按顺序增加行键允许更快的扫描,但在读/写期间,它在某一点后会成为一个问题,因为它

我正在编写一个程序,将RDBMS转换为HBase。我选择了一个顺序实体作为行键,比如Employee ID(1,2,3…),但我在某个地方读到它,行键不应该是顺序实体。我的问题是为什么不建议选择顺序行键。与此相关的设计前景是什么

主要是因为按顺序增加的行键将被写入同一区域,而不是在写入方面均匀分布。如果您有一个写密集型应用程序,那么在行键中加入一些随机性是有意义的


关于为什么按顺序增加行键对HBase是个坏主意。

虽然按顺序增加行键允许更快的扫描,但在读/写期间,它在某一点后会成为一个问题,因为它会导致不需要的
区域服务器热点。默认情况下,Hbase将具有相似键的行存储到同一区域。它允许更快的范围扫描。因此,如果行键是连续的,则所有数据将开始进入同一台机器,从而导致该机器上的负载不均匀。这称为RegionServer热插销,是不使用顺序键的主要动机。在这里,我将用“笔迹”来解释这个问题

当带有顺序键的记录写入HBase时,所有写入操作都会命中一个区域。如果一个区域由多个RegionServer提供服务,则这不会是一个问题,但事实并非如此——每个区域仅位于一个RegionServer上。每个区域都有一个预定义的最大大小,因此在一个区域达到该大小后,它将被分割为两个较小的区域。之后,这些新区域中的一个将获取所有新记录,然后该区域和为其提供服务的RegionServer将成为新的热点受害者。显然,这种不均匀的写入负载分布是非常不可取的,因为它将写入吞吐量限制为单个服务器的容量,而不是使用HBase集群中的多个/所有节点

你可以找到一个很好的解释问题及其解决办法

您可能还会发现这一点很有帮助,它向我们展示了如何高效地设计行键


希望这能回答您的问题。

在什么情况下数据会写入不同的群集?相同的群集是指“相同的服务器”吗?抱歉,是的。现在更新答案。