在PostgreSQL中,我必须以小批量的方式获取id,并同时删除它们,这样就不会有两个客户端获取相同的id.
可惜的是,DELETE
并不支持LIMIT
,所以我提出了这个问题:
DELETE FROM codes
WHERE id IN (SELECT id FROM codes WHERE product = 'abc' LIMIT 100 FOR UPDATE)
RETURNING id
可悲的是,这是缓慢和串行算法(在某些情况下)—你不能SELECT
而DELETE
运行,而不是 Select 相同的id两次.DELETE
,直到你有SELECT
个结果.
这导致性能不佳,当许多客户同时出现时.什么是我最好的 Select 来并行化/加速这一切?
PS:当产品与不同客户端不同时—数据库可以很好地并行化,但是当它们相同时—响应时间开始随着并行客户端请求的数量线性增长.