用于存储玩家最后 1000 次按键点击的 hbase

hbase for storing gamers' last 1000 key hits

所以对于我的用例,我只需要保存每个玩家的最后 1000 次按键。并且只有 2 个字段 --> gamerId(全是数字)和 keyId(也是全是数字)。所以,可以说,玩家 1123 已经存储了 999 个 keyId,当第 1000 个 keyId 进入该玩家时,正常插入。然而,一旦第 1001 个 keyId 出现,我们需要删除该玩家最早记录的 keyId 并保留第 1001 个。因此,在任何时候,数据库中每个玩家最多只能有 1000 个 keyId。我们有 +/- 1 亿游戏玩家和非常高的 keyId 流量,这个 table 将被非常频繁地查找和写入。 HBase 会为此 suitable 吗?如果不是,还有什么替代方案?

谢谢

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

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

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