计数1000亿个独立ID的最简单方法:第一部分

计数1000亿个独立ID的最简单方法:第一部分

💡 原文英文,约1000词,阅读约需4分钟。
📝

内容提要

2017年,Reddit使用Kafka、Redis和Cassandra设计了一个复杂的帖子浏览量和独立观众计数系统。作者提出了一种更简单的解决方案,利用Tinybird项目,通过单个SQL查询实时存储和计数帖子浏览,具备良好的扩展性。

🎯

关键要点

  • 2017年,Reddit设计了一个复杂的帖子浏览量和独立观众计数系统,使用Kafka、Redis和Cassandra。
  • Reddit的系统能够在12KB的存储中计数1000亿个独特的64位ID。
  • 作者认为有更简单的解决方案,利用Tinybird项目通过单个SQL查询实时存储和计数帖子浏览。
  • Tinybird项目可以存储原始事件、通过单个SQL查询计数独特观众、实时获取结果,并按时间过滤。
  • 作者使用Tinybird CLI创建了一个项目来存储和计数帖子浏览,定义了数据源和API。
  • Tinybird生成了假数据以匹配数据源的模式,测试了API的准确性。
  • 作者对API进行了小的调整以确保请求中提供post_id,并将其部署到云端。
  • 测试结果显示,存储压缩后约为57MB,查询延迟约为20毫秒,实时摄取速率为每秒10万事件。
  • 该解决方案在扩展性方面表现良好,预计在处理1000亿事件时仍能保持良好的查询延迟。
  • 尽管存储了更多原始数据,但现代列式压缩使其高效,且可以进行多种数据操作。
  • 该方案避免了复杂的数据管道、服务或存储之间的同步、监控系统和分布式系统的麻烦。
  • 作者鼓励读者查看Tinybird文档以快速上手,并预告将讨论更大规模下的挑战。

延伸问答

Reddit在2017年是如何设计其帖子浏览量计数系统的?

Reddit使用Kafka、Redis和Cassandra构建了一个复杂的系统,能够在12KB的存储中计数1000亿个独特的64位ID。

Tinybird项目提供了什么样的解决方案?

Tinybird项目通过单个SQL查询实时存储和计数帖子浏览,避免了复杂的数据管道和服务同步问题。

使用Tinybird进行帖子浏览量计数的步骤是什么?

首先创建Tinybird项目,定义数据源和API,然后生成假数据以测试API的准确性,最后将其部署到云端。

Tinybird的解决方案在扩展性方面表现如何?

Tinybird的解决方案在处理1000亿事件时仍能保持良好的查询延迟,预计存储约550GB的数据。

Tinybird的查询延迟和实时摄取速率是多少?

查询延迟约为20毫秒,实时摄取速率为每秒10万事件。

使用Tinybird的方案有哪些限制?

该方案存储了更多原始数据,查询需要更多计算,且在极端规模下可能需要优化。

➡️

继续阅读