乱数waitによるtransaction処理はマズい

ただの思考ろぐ。


コンフリクト発生時、乱数時間待ったのち再実行するようなトランザクション実装を考える。

書き込みTransaction A, B, Cがこの順番にほぼ同じ時刻に発行されたとして、
A, Bがコンフリクトしたとする。A, Bは乱数時間まつ。
その間にCが完走する。
乱数時間待ったBが実行される。その後Aが実行される。

ユーザ的にはA->B->Cとなって最後のCによる書き込みが行われた状態を期待するのに、
実際にはB, Cは以前に発行されてAが最終結果になることはあり得る。

単純なインクリメントみたいなcommutativeなものだったら問題ないけど、
Eventually Consistent+αなモデルだとこんなかんじなんだろうか。

関連:トランザクション分離レベル - Wikipedia