Coinhall 是一款全链交易终端,通过聚合来自 23 个不同区块链网络的 Swap 数据,提供实时价格图表并优化交易机会。该平台成立于 2021 年,为用户提供全面的交易工具以及去中心化交易所中最佳的 Swap 汇率。
为了管理来自多个来源的大量区块链数据,Coinhall 需要顶级的性能和可扩展性。速度能够实现实时分析,并确保用户能够及时做出交易决策,而成本效益则可以降低运营成本,帮助公司保持竞争力,有效分配资源并支持未来的增长。
两年前,Coinhall 联合创始人兼 CTO Aaron Choo 领导了 Coinhall 数据架构的转型。在最近于新加坡举行的聚会上,Aaron 详细介绍了此次转型,包括他们在实施 ClickHouse 后取得的令人印象深刻的成果。
起初
Aaron 于 2021 年 8 月开始将 Coinhall 打造成他所谓的“周末个人项目”。当时他还是新加坡国立大学的一名计算机科学学生,几乎没有专业经验,更不用说数据库管理系统的知识了。
他最初围绕 BigQuery 构建了该平台,因为他曾在大学里使用过 Google Cloud Platform,并且它提供了合理的免费套餐。Aaron 说,它在一段时间内运行良好,但最终团队遇到了问题,最明显的是性能和成本问题。
“查询平均需要大约两秒才能运行,”Aaron 说。“对于其他用例来说,这可能不是问题,但因为我们面向消费者的交易产品,如果您只是为了加载数据而等待几秒钟,那就会有问题。”
他们也很快超过了 BigQuery 的免费套餐,每天运行 200 万次查询并扫描超过 150 TB 的数据。他们发现自己每个月要花费数千美元来获得低于标准的性能,他们知道是时候做出改变了。
选择 ClickHouse
Aaron 很快在 Google 上搜索了“时间序列数据库”,并找到了一些选项,于 2021 年 10 月将平台迁移到 QuestDB。他选择 QuestDB 的部分原因是他想要一个可以自行管理的解决方案。它比 BigQuery 有所改进,但到 2022 年年中,他开始对该数据库缺乏开发者资源和功能感到沮丧。
这一次,他希望找到一个合适的长期解决方案,因此进行了更全面的搜索,比较了在线评论和外部基准测试,以找到最适合 Coinhall 需求的解决方案。在这个早期的评估阶段,他发现 ClickHouse 在除复杂性之外的各个方面都具有优势,但即使是这一点,他也能控制。
“作为一名开发者,你总能学习、改进并改善你的体验,”他说。
作为其评估的一部分,Aaron 专注于每个数据库处理烛形图查询的能力。烛形图对于像 Coinhall 这样的交易平台至关重要,因为它可以直观地显示一段时间内的价格走势,显示每个交易时段的开盘价、最高价、最低价和收盘价。为了让 Coinhall 提供实时交易洞察,它需要一个能够快速且大规模执行这些查询的数据库。
Aaron 将其选择范围缩小到 Rockset、SingleStore、Snowflake 和 ClickHouse。在性能方面,ClickHouse 是明显的赢家,烛形图查询在 20 毫秒内完成,而其他数据库则需要 400 毫秒或更长时间。它在 8 毫秒内运行最新价格查询,超过了第二好的性能(SingleStore),后者需要 45 毫秒。最后,它在 50 毫秒内处理了 ASOF JOIN 查询,而 Snowflake 需要 20 分钟,Rockset 则超时。
ClickHouse 在成本效益方面也轻松获胜。虽然其他三个托管服务每月费用高达 2000 美元,但自托管 ClickHouse 迄今为止是最具成本效益的选项,每月费用仅为 50 美元。它仅使用 4 个 vCPU 和 16 GB RAM 就能获得这些结果,这使其成为像 Coinhall 这样规模小但发展迅速的公司理想选择,这些公司需要在确保高性能的同时降低运营成本。
经验教训和优化
Aaron 和团队于 2022 年 7 月开始将平台迁移到 ClickHouse。正如 Aaron 所说,“这并不容易,因为我们有三个或四个服务在运行。”但到 10 月,他们已完全转向 ClickHouse 作为其主要数据库管理系统。
随着他们对 ClickHouse 的使用越来越熟练,Aaron 和团队进行了一些旨在提高速度和效率的优化。
性能调整
正如 Aaron 所说,“数据库的速度仅与其最慢的查询一样快。”在实施初期,随着团队适应 ClickHouse 与其他数据库之间的一些差异,他们遇到了导致某些查询速度变慢的性能瓶颈。
Aaron 查阅了 ClickHouse 的文档,特别是其关于稀疏主键索引的指南,他称其为“如果你考虑使用 ClickHouse,最好的资源”。通过遵循最佳实践并微调查询,Aaron 和团队减少了查询时间,确保即使是最复杂的运算也能有效地执行。
高效数据检索
团队面临的主要挑战之一是“Limit By”子句的效率低下,该子句对于检索每个资产的最新价格是必要的,但本质上会扫描整个表,从而导致性能瓶颈。
为了解决这个问题,他们结合使用了两个 ClickHouse 功能:AggregatedMergeTree 和物化视图。前者专为有效存储聚合数据而设计,允许系统仅存储最新的数据点,从而减少查询期间扫描的行数。物化视图会在每次将新数据插入表中时自动更新。通过创建仅提取最新数据的物化视图,Aaron 和团队确保在查询执行期间仅扫描相关行。
正如 Aaron 指出的那样,这种组合通过减少检索最新价格所需的计算负载来提高查询性能。结果是数据检索过程更快、更高效,这对于维持实时分析非常重要。
管理复杂的连接
Coinhall 团队面临的第三个挑战是管理复杂的连接操作,特别是排序合并连接,其中表被单独排序然后合并。由于 ClickHouse 管理合并连接的方式与其他数据库不同,因此 Aaron 采取了一种替代方法,即尽可能避免连接或降低连接的复杂性。
通过重新设计其数据查询以最大程度地减少对连接的依赖,他们可以在不影响数据准确性或完整性的情况下保持高性能。
展望未来
在尝试了多种数据库之后,Aaron 和团队在 ClickHouse 中找到了一个理想的长期解决方案,该解决方案使他们能够基于实时分析提供一流的交易体验。展望未来,他们计划继续优化和扩展 ClickHouse 的使用,利用更多功能来添加新的交易工具,改善用户体验,并将 Coinhall 定位为未来几年数据平台的增长点。
来自 Coinhall 首席技术官 Aaron Choo: “在 Coinhall,高效管理海量区块链数据对于我们的面向消费者的交易平台至关重要。最初,我们使用了 BigQuery,但随着数据量的增长,其成本和性能问题也随之增加。在探索了几个替代方案后,我们发现 ClickHouse 是明显的赢家。ClickHouse 的性能显著优于我们测试的其他数据库,如 Snowflake、Rockset 和 SingleStore,并且节省了 40 倍的成本。”
访问 Aaron Choo 在 meetup 上的幻灯片这里。
要了解更多关于 ClickHouse 的信息以及它如何使您的数据操作更快、更高效,请加入我们的开源社区或免费试用 ClickHouse Cloud 30 天。