我过去对 ClickHouse 有一些经验,但现在我在将以太坊区块链索引到新数据库时遇到问题。现在它在 Postgres 中,但由于有数百万个事务和行,它变得越来越慢,即使使用索引,一些响应也可能达到半分钟。
所以,有些事情我很担心,想问问ClickHouse是否可以解决这个问题:
以太坊区块链和每个区块链一样,都有区块。它每 12 秒创建一个新区块,每个区块有 100-300 个交易,每个交易有 1-100 个日志。假设我们有区块、交易和日志表。日志链接到事务。交易链接到区块。 有时可能会发生块重新排序,这意味着我必须从块、事务和日志表中删除过去的数据,并在该块号上插入另一个数据。 块重新排序大约每 5 小时发生一次,需要从块表中删除 1 行,从事务表中删除 100-300 行,在日志表中删除可能达到 10k 行。 我看到文档中有“轻量级 DELETE 语句”。如果我使用此方法,会使数据库变得复杂并使下一个 SELECT 请求变慢吗?每隔约 5 小时,我需要从数百万行的表中删除约 10k 行。
区块、交易、日志——所有这些表都相互依赖,并且可能会发生错误。这就是为什么我在一致(串联)插入数据时需要使用 COMMIT 和 ROLLBACK sql 语句。以下是文档: https://clickhouse.com/docs/en/guides/developer/transactional#transactions-commit-and-rollback 但它说这是实验性的。那么,它能解决我的问题吗?
我应该使用什么系列引擎(MergeTree、ReplacingMergeTree、AggregatingMergeTree,...)?我只需将数据添加到某些表并为快速 SELECT 查询创建索引。某些表包含具有唯一索引的字段。有时做轻量删除。
阅读本文 - 它将节省您很多时间! 🙂 https://github.com/ClickHouse/CryptoHouse/blob/main/setup.sql