HBase 模式行键设计 - 增量计数器?

Posted

技术标签:

【中文标题】HBase 模式行键设计 - 增量计数器?【英文标题】:HBase schema row key design - increment counter? 【发布时间】:2012-04-18 22:55:52 【问题描述】:

我很难在 HBase 中找到有关增量计数器的任何文档。有谁知道吗?

我正在为我的应用程序设计一个 Hbase 表架构。我的 row_key 不能保证 100% 的唯一性。所以问题是,当我的 row_key 开始重复时,我希望有一个增量计数器作为行键的一部分来区分它们。想法?

【问题讨论】:

【参考方案1】:

您可以做一件事,只需使用您的行键添加时间戳,使其始终是唯一的

作为

info:aaa#timestamp
info:bbb#timestamp
info:ccc#timestamp
info:aaa#timestamp
info:bbb#timestamp
info:ccc#timestamp
info:aaa#timestamp
info:bbb#timestamp
info:ccc#timestamp

如果你这样做,行键将永远是唯一的

您还可以尝试另一件事

uidgen

它通常在 /usr/bin/ 中找到

nyancat ~ # uuidgen 488bc393-a4f5-4a83-8df8-8c15e737dcc5

如果你使用的是java,那么

public class GenerateUUID 

  public static final void main(String... aArgs)
    UUID idOne = UUID.randomUUID();
    UUID idTwo = UUID.randomUUID();
    log("UUID One: " + idOne);
    log("UUID Two: " + idTwo);
  

  private static void log(Object aObject)
    System.out.println( String.valueOf(aObject) );
  
 

然后你可以把它作为你的钥匙

【讨论】:

我在 rowkey 设计中添加了时间戳,即使这样,考虑到我的数据生成速度非常快,它仍然可能存在重复。 可以添加随机数或 GUID 吗?这会解决唯一性问题吗? 时间戳不是可靠的唯一 ID。您可以在 Boundary 的 writeup of their Flake project(另见 Twitter 的 Snowflake)中找到生成分布式 UUID 的好方法。它具有在保证唯一性的同时保持时间顺序的良好特性。

以上是关于HBase 模式行键设计 - 增量计数器?的主要内容,如果未能解决你的问题,请参考以下文章

hbase 行键设计

HBase 行键设计

hbase 的最佳行键设计

需要从 cassandra 中删除的行键中添加数据

Hbase 性能行键与列限定符

HBase之计数器