数据库的批量操作问题

由于不确定该问题的优先级,故单开一帖

此报错的直接原因是使用upsert向sqlite中一次性插入了超过一千条记录
而目前Koishi并无其他能够实现此批量操作的手段

此处的合理性在于:
1、不可能使用逐条插入替换批量操作,因为替换的逻辑在mongo上会有显著影响
2、这个量级还不足以超过sqlite的承受能力,不可能直接放弃sqlite

具体来讲我认为可以:
1、SQLiteDriver::upsert关于主键的逻辑可以合并优化,以避免此问题
2、提供对数据库的批量操作逻辑

关联

Feature: 数据库 `create` 支持传入数组或者 `upsert` 支持自增主键 · Issue #987 · koishijs/koishi · GitHub)

2 个赞

可以在 sqlite 上分片,在 mongo 上统一插入。

你可以开 issue,可以做。

3 个赞

很有意思的一点在于,只有 sqlite 在 upsert 的时候会 get,mysql 并不会。

mongo 也会 get,但目前不确定会不会有同样的问题,故先不处理。

2 个赞