每日需增量replace into 50亿条数据,8台tikv(128G内存 32核cpu)的集群可以跑的过来吗?

  • 【TiDB 版本】:v3.0.12
  • 【问题描述】:
    每日需增量replace into 50亿条数据,8台tikv(128G内存 32核cpu)的集群可以跑的过来吗?
    表结构如下:
    CREATE TABLE table (
    aa bigint(64) NOT NULL,
    bb binary(6) DEFAULT NULL,
    cc bigint(64) DEFAULT NULL,
    dd binary(16) DEFAULT NULL,
    ee bigint(64) DEFAULT NULL,
    ff varbinary(64) DEFAULT NULL,
    gg bigint(64) DEFAULT NULL,
    hh varbinary(64) DEFAULT NULL,
    ii bigint(64) DEFAULT NULL,
    jj varbinary(64) DEFAULT NULL,
    kk bigint(64) DEFAULT NULL,
    ll varbinary(64) DEFAULT NULL,
    mm bigint(64) DEFAULT NULL,
    nn datetime DEFAULT CURRENT_TIMESTAMP,
    oo datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (aa),
    KEY bbb (bb),
    KEY ccc (cc),
    KEY ddd (dd),
    KEY eee (ee)
    )

要把时间说清楚,峰值最好精确到秒。
具体50亿TPS是在多久之内完成的?一小时,五小时,十二小时?
机器配置肯定建议tikv双实例部署了。

这边有这么个需要,要评估下是否能完成,要求是18个小时内完成写入。

使用 replace into 方式写入的原因是什么?可以使用 insert 么,实现逻辑上上 replace into 肯定会比 insert 多判断逻辑,效率上比不上直接 insert。

每天会增量更新数据,数据主键不变,字段有更新,主键唯一,直接insert会主键冲突

如果是按照 50亿数据 18 小时写入完成计算的话,写入速度需要达到 8W rows/s 的写入速度,如果是单行 replace into 方式去提交的话,这个 tps 还有点高,不过可以考虑多行数据在一个事务中批量提交的方式。比如单个事务 100 行或者 200 行,但是不建议特别大。

具体还是建议实际测试一下比较好,不同的业务模型、机器配置、磁盘性能对于最终的性能结果影响都是不同的。并且插入数据过程中,如果还有别的业务做查询之类的,也要考虑对别的业务的影响。

关于 TiDB 高并发写入有一些最佳实践可以参考一下:
https://docs.pingcap.com/zh/tidb/stable/high-concurrency-best-practices#tidb-高并发写入场景最佳实践