オープンソースのアプリケーションや商用サービスが実際にどのようなデータベース設計を行っているのか、公開されている情報を探してURLをまとめました。
ポイントとしては「ソーシャルゲームのデータベース設計」のような抽象的な記事やスライドではなく、実際に稼働している(していた)具体的なサービスの設計に関する記事を集めています。
実際に稼働しているシステムを参考にすることで、運用上発生する課題について考慮することが出来ます。
簡単にですが私の所感を追記しています。
あなたがこれから作るアプリケーションの設計の参考になれば幸いです。
この記事の内容
ソーシャルアプリ携帯ゲーム「偉人伝心」のデータベース設計
完全公開!ソーシャルゲーム設計事例:プロローグ | −ゆめログ− | ゆめみスタッフブログ
完全公開!ソーシャルゲーム設計事例:前編 | −ゆめログ− | ゆめみスタッフブログ
完全公開!ソーシャルゲーム設計事例:後編 | −ゆめログ− | ゆめみスタッフブログ
実際に運用されていたソーシャルゲームのデータベース設計ということで、どんな課題を解決すべきだったのかも含め書かれているとても貴重な資料です。
データベースについては主に「後編」で書かれていますが、「前編」のサーバーの冗長化やキャッシュの使いどころなどについても参考になります。
利用されているNoSQLのサービスはじゃっかん時代を感じるものになっていますが、読み込み性能を落としたくない部分でNoSQLを利用するといった基本的な考え方は応用できるものです。
実行時の負荷を考慮して設計を決めていく過程が書かれていてとても参考になります。
「リリース時に決めた設計ポリシーは運用と共に崩れていくもの」というリアルな視点は、単なる設計のお勉強では得難い重要な点かと思います
一休の履歴データの設計
履歴テーブルについて – 一休.com Developers Blog
履歴データの設計パータンについてメリットとデメリットを示しながら検討している点がわかりやすく、今後も参考にしたいと思いました。
データベースのトリガーを使う場合のデメリット(コードとトリガーで実装が分散する)についてはまさに運用者の視点で、こういった考え方は見落とされる場合もあるので重要だと感じました。
WordPressのデータベース設計
データベース構造 – WordPress Codex 日本語版
WordPressはMySQLを使って10数個のテーブルでブログのデータを管理しています。
投稿、コメント、ユーザー情報、オプション 、カテゴリ等に使われる語句 などのテーブルと、投稿などのメタデータのテーブルが定義されています。
メタデータはkeyとvalueのみが使えるシンプルな構成になっていて、ここに独自のメタデータを追加することでプラグインによる機能拡張ができるように設計されています。
RDBMSを使いながら拡張性の高いシステムを構築したい時に参考になりそうな設計です。
Gitのデータベース設計
Gitのデータベースはファイルベースのキーバリューストアです。
コミット、ファイル、ディレクトリ、タグなどのGitオブジェクトを値として、オブジェクトをハッシュキーで関連付けた木構造になっています。
シンプルなデータ構造で協力なバージョン管理システムが構築されていることには驚かされます。ぜひとも参考にしたい設計手法です。
Redmineのデータベース設計
Redmineはオープンソースのプロジェクト管理ツールです。
Redmineのデータベース設計についてまとまった公式ドキュメントは見つかりませんでしたが、ER図が置いてありました。
RDBMSで設計されており、私の数え間違え出なければテーブルは47個あります。
図を見ただけで設計のポイントをつかむのは難しいですが、少なくともusersテーブルとprojectsテーブルに関連が集まっている事がわかります。
YamlのデータやWikiのコンテンツといったテキストデータも全てがRDBに保存される形になっています。
テーブル数は多いですが、RDBに慣れている人は他に覚える事も少なくむしろ分かりやすいかもしれません。
OpenPNEのテーブル設計
OpenPNE_specification/trunk/3.2 の OpenPNE3_2テーブル定義書.xls – OpenPNE
オープンソースのSNSアプリケーションOpenPNEでは、RDBMSを用いて41個のテーブルでシステムを構成しています。
テーブル数は多いですが、ユーザー情報、記事情報、コメント、イベントなど、SNSを使った事がある人なら直感的に理解しやすいテーブルの切り分け方になっているかと思います。
一部で二分木のデータ構造をRDBで表現するなど、古典的な手法が用いられていてイメージしやすいのではないかと思います。
Mastodonのデータベース設計
mastodon/schema.rb at master · tootsuite/mastodon · GitHub
Mastodon(マストドン)はオープンソースのミニブログサービスです。誰でもツイッターのようなサービスを立ち上げられることで話題になりました。
データベースはPostgreSQLが使われていて、キャッシュにRedisを採用しているようです。
データベース設計資料は見つかりませんでしたがRuby on railsのマイグレーションファイルを見る事ができます。
マイグレーションファイルを見る限り67個のテーブルが定義されており、なかなか細かくテーブル分けされているようです。
一つ一つのテーブルは小さく作られていて、出来る限り正規化している印象です。
テーブルの多さがそのまま機能の豊富さを表しているとも受け取れます。
Railsでの開発に適合した形になっているものと考えられます。
まとめ
オープンソースのウェブアプリケーションはRDBMSをガチガチに使って設計されている事が多いように思います。
ウェブフレームワークもRDBを使う前提に物が多いので、自然とそうなっているのかもしれません。
RDBを使いながらキー・バリューストアや木構造のデータを表現したり、設定ファイルをまるごとカラムに突っ込んだり、各アプリケーションでどのように拡張性を持たせているかという部分が個人的には興味深く勉強になるところです。
Gitのようにファイルベースでシンプルかつ柔軟なデータベースを構築しているのは見事です。このような設計を目指したいものです。
今後も公開されているデータベース設計を参照して追記していければと思います。
以上です。
コメント/ピンバック