代码之家  ›  专栏  ›  技术社区  ›  Chris Abbott

使用SHA1键避免BigTable或HBase中的热点

  •  1
  • Chris Abbott  · 技术社区  · 7 年前

    我使用Google BigTable根据以下约束存储事件日志数据:

    • 每个键应该包含用户名和时间戳,允许在每个用户的基础上连续读取时间序列数据,例如:username\u timestamp。
    • 我每天将存储多达10000000个或更多的事件日志,因此,我自然需要避免热点,并确保在每个节点上均匀分布记录。
    • 这个数据库有一个巨大的安全组件,因此,我想在将用户名用作BigTable中的密钥之前对其进行加密。

    显然,我希望避免在读写时执行额外的步骤,所以我考虑在将用户名作为密钥添加到BigTable之前使用SHA1对其进行加密。因此,BigTable中的所有键现在的格式如下:

    cf23df2207d99a74fbe169e3eba035e633b65d94_2018_01_30_15090001
    

    我们知道SHA1是正态分布的,因此,假设我的所有记录都均匀分布在节点上,同时确保所有用户名都驻留在一起,这样安全吗?这是否会有效防止热斑?这种方法中是否有我遗漏的边缘案例?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Solomon Duskis    7 年前

    假设用户Id分布良好(即,没有一个用户每秒的操作数超过10K),这种方法应该可以。

    仅供参考,Cloud Bigtable以每秒行数衡量操作,在确定节点数时,您需要考虑峰值吞吐量。每个节点每秒可支持10000次简单读写。我们的最小生产配置是3个节点,可支持高达每秒30000行(如果以最大值连续使用,则每天可支持26亿行)。