のは、あなたがこの定義を持つテーブルを持っている想像してみましょう:なぜ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行を持っています。今テスト目的のためにあなたは、このようなアップデートを実行します:あなたは30の異なるスレッド、MySQLのInnoDB内で、このようなクエリを実行する場合文が(この特定のデータセット内)50,000
から1,000行を更新します
update positions
set updated_at = now()
where latitude between 234.12 and 235.00;
を成功し、ポストグルは多くのデッドロックで失敗します。
なぜですか?
あなたは正しいです。あなたはこれをポストグルで解決することができます:UPDATE .... WHERE id in(SELECT ... FROM ... WHERE ... id UP UPDATEによる順序)。 – SDReyes
私は、*正しい*解決策は、* 30 *スレッドが同じ行を更新することではないと思う。私たちはDBを強調していない限り、 –
です。これはベンチマークの一部なので、われわれは私たちです。 xD – SDReyes