如何使用 Citus 对以太坊 ERC20 转账数据进行分片 (sharding)?

308 天前
 dw2693734d

我正在尝试使用 Citus 对以太坊 ERC20 交易数据进行分片 (sharding)。我有一个查询,它基于 "to" 和 "from" 条件进行查询,并且根据 "token_address" 进行分组。

SELECT 
    distinct(token_address),
    CONCAT('0x', SUBSTRING(token_address::text FROM 3)) as token,
    sum(amount) as amount
    FROM (
    -- 转入
        SELECT 
        "to" as address,
        value as amount,
        tr.contract_address as token_address
        FROM erc20."ERC20_evt_Transfer" tr, address
        WHERE "to" = address
    -- 转出
        UNION ALL
        SELECT 
        "from" as address,
        -value as amount,
        tr.contract_address as token_address
        FROM erc20."ERC20_evt_Transfer" tr, address
        WHERE "from" = address
    ) as t
    GROUP BY 1

这是一个查询以太坊 erc20 token 转账的记录

按道理来讲, from 和 to 都应该设置为 shard column, 但是这样的话要搞两个 shard table ,就很浪费硬盘空间。

ERC20_evt_Transfer 这个表,大约 400g

835 次点击
所在节点    PostgreSQL
4 条回复
rickiey
307 天前
给你个建议,这种数据一旦产生就不再变了,特别适合用 Clickhouse 存着,我之前直接存储 Filecoin 链上的区块和消息,折腾的 mysql 分库分表啊麻烦死了,还折腾过 mangodb 集群和 cockroachdb ,最后发现 Clickhouse 最适合
dw2693734d
307 天前
@rickiey 这种数据要不断增加的,还是要变啊
rickiey
307 天前
增加没关系,只是写入,这也不影响,clickhouse 更新和删除麻烦,我之前收集链上数据一天 50G ,到 1T 后不用了
shuimugan
307 天前
碰到过类似需求,后面没在搞了,当时调研的方案是用 TimescaleDB 扩展,它官网教程也有专门用于存储区块链的 https://docs.timescale.com/tutorials/latest/blockchain-query/ ,有朋友公司基于这个自建的存储超过 200T 了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/955631

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX