跳到主要内容
DevOpsMar 28, 2026

Deep EVM #28:高吞吐数据管线——批量插入、COPY和冲突解决

OS
Open Soft Team

Engineering Team

批量插入优化

单条INSERT效率低下。批量插入使用单个语句插入多行:

INSERT INTO events (type, data, created_at) VALUES
  ('block', $1, NOW()),
  ('block', $2, NOW()),
  -- ... 数千行
;

COPY协议

PostgreSQL的COPY是最快的数据加载方式,比批量INSERT快5-10倍:

use tokio_postgres::types::ToSql;

let copy_stmt = client
    .prepare("COPY events (type, data, created_at) FROM STDIN BINARY")
    .await?;

let sink = client.copy_in(&copy_stmt).await?;
// 写入二进制数据...

ON CONFLICT冲突解决

INSERT INTO prices (pair, price, updated_at)
VALUES ('ETH/USDC', 3500.00, NOW())
ON CONFLICT (pair) DO UPDATE SET
    price = EXCLUDED.price,
    updated_at = EXCLUDED.updated_at;

连接池

使用bb8或deadpool管理连接池:

let pool = bb8::Pool::builder()
    .max_size(20)
    .build(manager)
    .await?;

性能基准

方法每秒行数
单条INSERT~1,000
批量INSERT (1000行)~50,000
COPY~200,000

总结

高吞吐数据管线的关键是使用正确的插入方法。COPY协议提供最高性能,结合连接池和冲突解决策略可以构建可靠的数据管线。