我正在尝试使用 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
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.