18

私は様々な方法でホストされているSaaSアプリケーションを見てきました。複数のデータベースにフィーチャーとモジュールを分割するのは良い考えですか?たとえば、Userテーブルのようなものを別のDB上の1つのDBおよびフィーチャ/アプリケーション固有のテーブルに置くことや、おそらく他の一般的な共有テーブルを別のDBに置くことはできますか?SaaSデータベース設計 - 複数のデータベース?スプリット?

+0

可能な複製[各クライアントに単一のデータベースを使用する利点は何ですか?](http://stackoverflow.com/questions/13348/what-are-the-advantages-of-using-a-single- database-for-each-client) – givanse

答えて

29

1つのデータベースから開始してください。プロジェクトに必要なデータ/機能を分割します。

  • 単一のデータベースが
  • 参照整合性は、任意のデータ損失が
  • キャッシュも良いという問題である
  • ことはできません動作しません。ここで

    たちはLinkedInのから学ぶことができるものですそれが適度に有効なとき
  • 成長軌道を過小評価しないでください

出典:

LinkedIn architecture

LinkedIn communication architecture

0

あなた自身に尋ねてください:すべてを別々のデータベースに移動することで、あなたは何を得ていますか?

管理の面で多くの苦痛は私の推測でしょう。個人的にはすべてを単一のデータベースに収めたいと思っています。単一のデータベースでは解決できない問題が発生した場合は、そのデータを複数のデータベースに移行してください。

+3

パフォーマンスとスケーラビリティはどうですか? – Vyrotek

3

単一のデータベースを持つことは、外部キーを使用できるため、データの完全性に最適です。データを複数のデータベースに分割すると、この組み込みのデータ整合性を持つことはできません。あなたのデータが関連していない場合、これは問題ではありませんが、それが関連している場合、あるデータベースが別のデータベースと矛盾するデータを含む可能性があります。この場合、データベースをスキャンして矛盾したデータを定期的にスキャンするコードを記述し、適切に処理できるようにする必要があります。

ただし、サイト/アプリケーションのスケーラビリティ(インターネット規模など)が必要な場合は、複数のデータベースが必要な場合があります。たとえば、各データベースを異なる物理サーバーにホストすることができます。

3

フィーチャーでデータベースを分割することは、必要性を示す強力な証拠がない限り、良い考えではないかもしれません。多くの場合、1つのトランザクションの一部として2つのデータベースを更新する必要があり、分散トランザクションは処理するのがはるかに難しくなります。さらに、データベースを分割する必要がある場合は、シャーディングを使用できる可能性があります。

12

High Scalabilityは、SaaSアプリケーションを拡張するための優れたブログです。前述のように、提案したようにデータベース間でテーブルを分割することは、一般的には悪い考えです。しかし同様のコンセプトはシャーディングであり、同じ(または同様の)スキーマを維持しながら複数のサーバーにデータを分割します。たとえば、ユーザー1〜5000はserver1にあり、ユーザー5000-10000はserver2にあります。アプリケーションで使用するクエリによっては、効率的な縮尺設定ができます。

8

SaaSアプリケーションでは、複数のテナントに複数のデータベースを使用しますが、通常はモジュールごとに分割しません。

これは私がSaaSアプリケーション設計で見た最も一般的なモデルです。アプリケーションに追加するテナントごとに基本スキーマが複製されます。

0

自然のデザイン(必須として以下のように正規化し、必要な量を非正規化)してください。 DBモデルをモジュールに分割し、サービス(データを所有する)でデータに直面することにより、サービス指向の原則を念頭に置いてください。

1

これを達成するにはさまざまな方法がありますが、マルチテナントの問題はデータモデルだけではありません。私は製品を詰まらせることは嫌いですが、Apprendaで働いている私の会社でSaaSGridをチェックアウトしています。私たちは、1つのテナントSOAアプリケーション(データアクセスに自由にNHibernateを使用してください)を書くことができるクラウドオペレーティングシステムです。あなたのアプリにマルチテナント。アプリケーションを公開すると、データモデル(分離されたデータベースまたは共有)を選択するなどの作業を行うことができ、SaaSグリッドはそれに応じて展開され、コード変更なしでアプリケーションが実行されます。

1

なぜデータベースを使用するのですか?

Hadoop、Voldemort(project-voldemort.comが開発してLinkedInで使用)などの分散ストレージシステムを使用することをお勧めします。

私はdbがマネーオペレーションのような感覚的なデータには良いと思っていますが、それ以外のものは分散ストレージを使用することができます。

関連する問題