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 模式行键设计 - 增量计数器?的主要内容,如果未能解决你的问题,请参考以下文章