何でもかんでもRDB?

Webの基本構成。Webアプリは、データをO/Rマッピングして、RDBに格納する。Webサーバーは、複数用意してロードバランサで負荷分散。DBは、信頼性のために冗長構成にするけど、同期を取る必要があるので分散するわけではない。
・・・え、最後だけ、スケールしないよ??
RDBの構造が、大量のデータを効率的に処理できるようになっているのは判る。でも、それがホントにWeb系にあってるのかな?ODBを使って、分散が出来るように作ったほうが良くない?

例えば、SNSと日記の構造。

1.RDBの場合
ユーザーと日記は1対nの関係。だから、日記テーブルにはユーザーのIDが登録されている。全部の日記が、日記テーブルに格納されている。
2.ODBの関係
日記はユーザーの所有物。だから、日記はユーザーのプロパティ。


日記テーブルへの書き込みを考えると、他の日記書き込みと同期を取る必要がある。
RDBだと、たくさんの日記書き込みが同時に発生すると、高負荷時にレスポンスが遅くなりやすい。
ODBだと、日記を登録しても同期処理をしないといけないのはその人の日記だけで、他の人の日記への読み書きと同期を取る必要が無いため、高負荷時にもレスポンスが遅くなりにくい。

また、同期の範囲が狭いということは、分散するときにも有利に働く。複数のテーブルへの更新が多発する場合、RDBだと分散しても性能が向上しないけど、ODBだと性能が向上するということになりうる。
もちろん、ODBにすることで更新の局所性が上がる時だけだけどね。

・・・様なことを、今朝通勤電車の中で考えていたけど、ODBって良く知らない。MySQLPostgreSQL並みに有名なODBって何があるだろう?ZODBはZopeから分けて単体で使えるカナ??

このブログに乗せているコードは引用を除き CC0 1.0 で提供します。