我正在开发一个游戏应用程序,我需要我正在构建的排行榜的实时数据。我已经阅读了一堆 stackoverflow 和公司博客——但老实说,我不确定哪一个最适合我的用例。我正在使用DynamoDB记录玩家最近的动作,并且动作的历史在kafka中。我希望将这两个数据源中的数据流式传输到数据库中,然后我的排行榜服务可以查询数据库以呈现每个排行榜的内容。我的数据速度适中(1K 游戏事件/秒)。我发现我可以使用这三个不同的数据库,有人使用这些数据库中的任何一个进行游戏排行榜吗?如果是这样,你能分享你在这样做的过程中遇到的好处或痛苦吗?根据所有 3 家公司的说法,他们能够做实时数据。
1 回答
您必须评估您需要的规模和性能,而我很难根据您提供的数据来估计这些。但我可以对使用其中一些系统进行功能比较。
第一个选项是通过查询 DynamoDB 本身来运行您的排行榜,您不需要任何额外的系统。显然,优点是您需要管理的组件少了一个。但是我假设你的排行榜需要复杂的逻辑来呈现,并且因为 DynamoDB api 处理键/值,你必须从 DynamoDB 中获取大量数据来执行每个查询来呈现排行榜。
您指定的第二个选项是弹性搜索。很棒的系统,可以非常快速地提供查询结果,因为它将数据存储为倒排索引。但是,您将无法在 DynamoDB 数据和 kafka 流之间进行 JOIN。但你肯定可以在 Elastic 上运行大量并发查询。我假设您需要并发查询,因为您正在为一个在线游戏提供动力,其中 m 多个玩家同时访问排行榜。
第三个选项 Druid 是数据湖和数据仓库之间的混合体。您可以存储大量的半结构化数据,但与 Elastic 不同的是,您需要在摄取时间内将嵌套的 json 数据展平。我曾使用 Druid 进行大规模分析处理以支持我的仪表板,但它不支持像 Elastic 一样高的并发性。
Rockset 似乎是一个更新的产品,并且是云上的托管服务。它说它像 Elastic 一样构建倒排索引,并且还支持 JOIN。它可以自动跟踪来自 DynamoDB(使用更改流)和 kafka 的数据。我在网站上没有看到任何性能数据,但该功能与我构建游戏排行榜所需的功能非常兼容。