wir uns vor, Sie eine Tabelle mit dieser Definition haben:Warum MySQL InnoDB kann gleichzeitige Updates und PostgreSQL kann nicht?
CREATE TABLE public.positions
(
id serial,
latitude numeric(18,12),
longitude numeric(18,12),
updated_at timestamp without time zone
)
Und Sie haben 50.000 Zeilen in einer solchen Tabelle. jetzt zu Testzwecken erhalten Sie ein Update wie folgt ausführen:
update positions
set updated_at = now()
where latitude between 234.12 and 235.00;
die Anweisung 1000 Zeilen aus der 50.000 aktualisieren (in diesem speziellen Datensatz)
wenn Sie eine solche Abfrage in 30 verschiedenen Threads, MySQL innodb laufen wird gelingen und postgres wird mit vielen Deadlocks scheitern.
warum?
Sie haben Recht. Sie können dies in Postgres lösen mit: UPDATE .... WHERE ID in (SELECT ... FROM ... WHERE ... nach ID für UPDATE). – SDReyes
Ich denke, die * richtige * Lösung wäre * nicht * 30 Threads die gleichen Zeilen zu aktualisieren. –
es sei denn, wir betonen die DB. was wir sind, denn das ist Teil einer Benchmark! xD – SDReyes