私は様々な方法でホストされているSaaSアプリケーションを見てきました。複数のデータベースにフィーチャーとモジュールを分割するのは良い考えですか?たとえば、Userテーブルのようなものを別のDB上の1つのDBおよびフィーチャ/アプリケーション固有のテーブルに置くことや、おそらく他の一般的な共有テーブルを別のDBに置くことはできますか?SaaSデータベース設計 - 複数のデータベース?スプリット?
答えて
1つのデータベースから開始してください。プロジェクトに必要なデータ/機能を分割します。
が- 単一のデータベースが
- 参照整合性は、任意のデータ損失が
- キャッシュも良いという問題である
- ことはできません動作しません。ここで たちはLinkedInのから学ぶことができるものですそれが適度に有効なとき
- 成長軌道を過小評価しないでください
出典:
あなた自身に尋ねてください:すべてを別々のデータベースに移動することで、あなたは何を得ていますか?
管理の面で多くの苦痛は私の推測でしょう。個人的にはすべてを単一のデータベースに収めたいと思っています。単一のデータベースでは解決できない問題が発生した場合は、そのデータを複数のデータベースに移行してください。
パフォーマンスとスケーラビリティはどうですか? – Vyrotek
単一のデータベースを持つことは、外部キーを使用できるため、データの完全性に最適です。データを複数のデータベースに分割すると、この組み込みのデータ整合性を持つことはできません。あなたのデータが関連していない場合、これは問題ではありませんが、それが関連している場合、あるデータベースが別のデータベースと矛盾するデータを含む可能性があります。この場合、データベースをスキャンして矛盾したデータを定期的にスキャンするコードを記述し、適切に処理できるようにする必要があります。
ただし、サイト/アプリケーションのスケーラビリティ(インターネット規模など)が必要な場合は、複数のデータベースが必要な場合があります。たとえば、各データベースを異なる物理サーバーにホストすることができます。
フィーチャーでデータベースを分割することは、必要性を示す強力な証拠がない限り、良い考えではないかもしれません。多くの場合、1つのトランザクションの一部として2つのデータベースを更新する必要があり、分散トランザクションは処理するのがはるかに難しくなります。さらに、データベースを分割する必要がある場合は、シャーディングを使用できる可能性があります。
High Scalabilityは、SaaSアプリケーションを拡張するための優れたブログです。前述のように、提案したようにデータベース間でテーブルを分割することは、一般的には悪い考えです。しかし同様のコンセプトはシャーディングであり、同じ(または同様の)スキーマを維持しながら複数のサーバーにデータを分割します。たとえば、ユーザー1〜5000はserver1にあり、ユーザー5000-10000はserver2にあります。アプリケーションで使用するクエリによっては、効率的な縮尺設定ができます。
SaaSアプリケーションでは、複数のテナントに複数のデータベースを使用しますが、通常はモジュールごとに分割しません。
これは私がSaaSアプリケーション設計で見た最も一般的なモデルです。アプリケーションに追加するテナントごとに基本スキーマが複製されます。
自然のデザイン(必須として以下のように正規化し、必要な量を非正規化)してください。 DBモデルをモジュールに分割し、サービス(データを所有する)でデータに直面することにより、サービス指向の原則を念頭に置いてください。
これを達成するにはさまざまな方法がありますが、マルチテナントの問題はデータモデルだけではありません。私は製品を詰まらせることは嫌いですが、Apprendaで働いている私の会社でSaaSGridをチェックアウトしています。私たちは、1つのテナントSOAアプリケーション(データアクセスに自由にNHibernateを使用してください)を書くことができるクラウドオペレーティングシステムです。あなたのアプリにマルチテナント。アプリケーションを公開すると、データモデル(分離されたデータベースまたは共有)を選択するなどの作業を行うことができ、SaaSグリッドはそれに応じて展開され、コード変更なしでアプリケーションが実行されます。
なぜデータベースを使用するのですか?
Hadoop、Voldemort(project-voldemort.comが開発してLinkedInで使用)などの分散ストレージシステムを使用することをお勧めします。
私はdbがマネーオペレーションのような感覚的なデータには良いと思っていますが、それ以外のものは分散ストレージを使用することができます。
- 1. MongoDB for SaaSの複数のデータベース
- 2. MongoDB - SaaSオファリング用の単一データベースまたは複数のデータベース
- 3. データベース設計親子表対複数表
- 4. スプリットMySQLデータベース
- 5. 複数のデータベースを持つ共有サーバ上のSaaSアプリケーション
- 6. データベースの設計
- 7. OO設計とデータベース設計
- 8. データベース設計用ERDの複合キー
- 9. データベース設計SQL
- 10. データベース設計
- 11. データベース設計-relation
- 12. MongoDB ::データベース設計
- 13. Mysql - データベース設計
- 14. データベース設計ソリューション
- 15. データベース設計
- 16. データベース設計101
- 17. データベース設計
- 18. データベース設計webapp
- 19. ユーザストーリー - データベース設計
- 20. データベース設計 - ダッシュボード
- 21. データベース設計 - エンティティリレーションシップモデル
- 22. データベース設計 - 親
- 23. データベース設計
- 24. 春ブーツ読む書き込みスプリット/マスター - スレーブ/複数のデータベース
- 25. SQLiteのデータベース設計
- 26. MySQLデータベースの設計
- 27. ターンベースゲームのデータベース設計
- 28. トランスポートタイムテーブルシステムのデータベース設計
- 29. データベース設計のアドバイス
- 30. データベース設計のフィードバック
可能な複製[各クライアントに単一のデータベースを使用する利点は何ですか?](http://stackoverflow.com/questions/13348/what-are-the-advantages-of-using-a-single- database-for-each-client) – givanse