【问题标题】:hbase for storing gamers' last 1000 key hitshbase 用于存储游戏玩家的最后 1000 次击键
【发布时间】:2021-08-20 01:57:05
【问题描述】:

因此,对于我的用例,我只需要保存每个游戏玩家的最后 1000 次按键。并且只有 2 个字段 --> gamerId(全数字)和 keyId(全数字)。因此,假设玩家 1123 已经存储了 999 个 keyId,当该玩家的第 1000 个 keyId 进入时,正常插入。但是,一旦第 1001 个 keyId 进入,我们需要删除该玩家最早记录的 keyId 并保留第 1001 个。因此,在任何时候,数据库中每个玩家最多只能有 1000 个 keyId。我们有 +/- 1 亿的游戏玩家和非常高的 keyId 流量,并且会非常频繁地查找和写入此表。 HBase 适合这个吗?如果不是,那还有什么办法?

谢谢

【问题讨论】:

    标签: database hbase


    【解决方案1】:

    原则上,借助版本控制,您可以在 hbase 中轻松完成此操作。我从来没有尝试过每列有 1,000 个版本(通常是 5-10 个)的极端情况,但我认为对于可以拥有多少个版本没有任何具体限制。您应该看看它是否会产生任何性能影响。另请查看此讨论:https://www.quora.com/Is-there-a-limit-to-the-number-of-versions-for-an-HBase-cell

    定义表和列族时,可以指定最大版本参数。这样,当您简单地使用相同的行值继续执行 Puts 时,该行的键将继续生成新版本(它们也都将带有时间戳。一旦您执行第 1,001 个 Put,第一个 put 将自动被删除,依此类推。类似地,当您对该行键执行 Get 操作时,您可以使用各种方法来检索一系列版本。在这种情况下,这取决于您将使用什么 API 来获取值(使用本机 Java API 很容易做到这一点,但不确定其他访问方法)。

    1 亿行对于 HBase 来说是非常小的,所以通常它不应该是一个问题。但当然,如果您的每一行确实有 1,000 个版本,那么您正在查看 1000 亿个键值。再说一次,我想说这对 HBase 是可行的,但是您应该清楚地看到这是否会导致任何性能问题,并且您应该适当地调整集群的大小。

    【讨论】:

    • 对于 GET,我们总是只对最新版本感兴趣,我们不关心任何其他版本,如果可能,我们甚至可以丢弃除最新版本之外的所有其他版本。这会提高性能吗?或者在 HBase 设置期间启用某些配置可以进一步提高性能?
    • 可以使用 Get.readVersions(numVersions) 确保只返回一个版本。
    • 是的,我想在这一点上,猜测的空间已经耗尽,实际的基准测试是现在前进的唯一途径。但是由于 fb messenger 也在使用 hbase,所以我对 hbase 很有信心。谢谢指点!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多