python + wsgiで2フェーズ・コミットするKVSを作った

 データベースの学習として2フェーズ・コミットを理解するために、2フェーズ・コミットで同期するKVSをwsgiアプリケーションとして作成しました。サーバとクライアント合わせて220行ぐらいです。

https://github.com/yatt/2phase-commit-kvs
下で実行してるアプリケーション込み。

 普通、KVSというと、データを分散して保持するスケーラブルなデータストアを指すと思いますが、今回作ったのは全てのノードが全てのデータを持って、さらに2フェーズ・コミットで同期するKVSです。しかも、トランザクション中はDB全体にロックがかかります。スケーラビリティ(笑)
 ロックは2フェーズ・ロックで制御していて、どのノードも到着順に処理しているので、複数のノードから同時に書き込みをすると、デッドロックを起こしたり競争状態になる。だから同時に書き込みを行うのは一つのノードだけにしないといけない、という。うーん。これはひどい

今回は、作成したDBサーバを

で立ち上げて、Twitterのホームタイムラインを保存してみました。

とれてるとれてる。左下がamazon EC2インスタンス、それ以外がさくらVPSです。