Coinhall 是一个全链交易终端,通过聚合来自 23 个不同区块链网络的交换数据,提供实时价格图表并优化交易机会。该平台成立于 2021 年,为用户提供全面的交易工具以及去中心化交易所中最优惠的交换率。
为了管理来自多个来源的海量区块链数据,Coinhall 需要顶级的性能和可扩展性。速度支持实时分析,确保用户能够及时做出交易决策,而成本效益则可以降低运营成本,帮助公司保持竞争力、有效分配资源并支持未来增长。
两年前,Coinhall 联合创始人兼首席技术官 Aaron Choo 领导了 Coinhall 数据架构的转型。在最近于新加坡举行的见面会上,Aaron 详细介绍了这次转型,包括自从实施 ClickHouse 以来他们看到的令人印象深刻的成果。
起初
Aaron 在 2021 年 8 月启动 Coinhall,他称之为“个人周末项目”。当时他还是新加坡国立大学的计算机科学专业的学生,几乎没有专业经验,更不用说数据库管理系统的知识了。
他最初基于 BigQuery 构建了该平台,因为他在大学时使用过 Google Cloud Platform,并且它提供了合理的免费套餐。Aaron 说,它在一段时间内运行良好,但最终团队遇到了问题,最明显的是性能和成本方面。
“查询平均需要大约两秒钟才能运行,”Aaron 说。“对于其他用例来说,这可能不是问题,但因为我们是一个面向消费者的交易产品,如果您需要等待几秒钟才能加载数据,那就成问题了。”
他们还很快超过了 BigQuery 的免费套餐,每天运行两百万次查询并扫描超过 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 毫秒)。最后,它处理 ASOF JOIN 查询只需 50 毫秒,而 Snowflake 需要 20 分钟,Rockset 则超时。
ClickHouse 在成本效益方面也轻松胜出。虽然其他三个托管服务的每月成本高达 2,000 美元,但自托管 ClickHouse 是迄今为止最具成本效益的选择,每月成本仅为 50 美元。它仅使用 4 个 vCPU 和 16 GB 内存就实现了这些结果,使其成为像 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 在见面会上的幻灯片。
要了解更多关于 ClickHouse 以及它如何使您的数据操作更快、更高效的信息,请加入我们的开源社区或免费试用 ClickHouse Cloud 30 天。