让我们想象一下,你有一个表,这个定义:为什么MySQL InnoDB可以处理并发更新,而PostgreSQL不能?
CREATE TABLE public.positions
(
id serial,
latitude numeric(18,12),
longitude numeric(18,12),
updated_at timestamp without time zone
)
而且你有这样的表50,000行。现在用于测试目的你会遇到这样的更新:
update positions
set updated_at = now()
where latitude between 234.12 and 235.00;
,如果你在30级不同的线程运行这样的查询语句将更新从50,000 1,000行(在这个特定的数据集)
,MySQL的InnoDB的将成功,postgres将失败,并造成大量死锁。
为什么?
你是对的。你可以通过使用下面的代码解决这个问题:UPDATE .... WHERE id(SELECT ... FROM ... WHERE ... order by id FOR UPDATE)。 – SDReyes
我认为* right *解决方案将*不*有30个线程更新相同的行。 –
除非,我们强调数据库。我们是我们,因为这是基准的一部分! xD – SDReyes