面向列的DB(HBase,Cassandra)中的顺序行ID?

时间:2010-07-12 20:56:25

标签: nosql cassandra hbase column-oriented

在HBase中设计行ID时,我看到了两条相互矛盾的建议(具体而言,我认为它也适用于Cassandra。)

  1. 您要聚合在一起的组密钥,通常可以利用数据位置。 (White,Hadoop:The Definitive Guide,我记得在HBase网站上看过它,但找不到它......)
  2. 传播密钥,以便工作可以分布在多台计算机上(Twitter, Pig, and HBase at Twitter幻灯片14)
  3. 我猜哪个是最优的可以取决于你的用例,但有没有人对这两种策略有任何经验?

1 个答案:

答案 0 :(得分:2)

在HBase中,通过划分按字典顺序排序的密钥空间将表划分为区域。表的每个区域属于单个区域服务器,因此所有读取和写入都由该服务器处理(这允许强大的一致性保证)。这意味着如果您的所有读取或写入都集中在一小部分键空间上,那么您将只能扩展到单个区域服务器可以处理的内容。例如,如果您的数据是时间序列并且按时间戳键入,那么所有写入都将转到表中的最后一个区域,并且您将被限制为以单个服务器可以处理的速率写入。

另一方面,如果您可以选择您的密钥,以便任何给定的查询只需要扫描一小部分行,但整个读写集分布在您的密钥空间,那么总负载将是分布式和扩展性很好,但您仍然可以享受查询的地点优势。