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

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

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

【问题讨论】:

    标签: hbase counter bigtable


    【解决方案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 的好方法。它具有在保证唯一性的同时保持时间顺序的良好特性。
    猜你喜欢
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多