大規模なシステムに関わったことは無いのですが、メインのデータベースに保存するデータは基本的に操作ログで十分なのではないですか?
恐らくmemcacheでは実現できない高速化を図るために、RDBに一時的なキャッシュテーブルを作成するようなことはあると思います。
しかし、ユーザ投票による値や、報酬としてユーザにポイントを与えるなど、現時点での直接的なログから算出可能な結果をオリジナルデータとしてデータベースに持つ意味がわかりません。
つまり、ユーザやアイテムが持つ現在の票の数やポイントは、操作ログのアクションとして値を持たせ、現在の総評や合計ポイントは動的に計算して取得すればいいと思うのです。
もしかしたらこのデータベースにログを保存するという考え方は常識なのかもしれませんが、少なくともRDBにログデータが保存されている現場を見たことがありません。
極端な話、掲示板のようなメッセージの書き込みや、ユーザの名前や住所などの個人情報もユーザの操作ログとして「ユーザ」と「アクション」と「値」と「時間」で「誰がいつ何をした」と言った情報で全て管理することができると思います。
しかも、このような設計をした場合アンドゥや、編集履歴、データの差分など、あらゆる情報を手に入れることができると思うんです。
調べてみると、1つのテーブルに保存できるレコードの容量は、50TB以上(?)と膨大でした。
やはりデータが増えれば増えるほどクエリの結果が返ってくる時間が長くなるので情報が膨大になるほど重すぎて使えないサービスといった状態になってしまうのでしょうか。
しかし、その場合はmemcacheやキャッシュテーブルを利用して改善できると思うんです。
そういった理由から、データベースでオリジナルデータと呼べるものは基本的に操作ログであり、全てのデータは操作ログから出力するべきなのではないかと思ってしまうのです。
自分は、何か勘違いしてしまっているような気がしています。是非アドバイス下さい。
回答3件
あなたの回答
tips
プレビュー