9

複数のエンティティのデータを管理する Web サイトを開発しています。エンティティ間でデータは共有されませんが、同じ顧客が所有している可能性があります。顧客は、単一の「ダッシュボード」からすべてのエンティティを管理したい場合があります。では、すべてに対して 1 つのデータベースを使用する必要がありますか?それとも、データを個別のデータベースに分離しておく必要がありますか? ベストプラクティスはありますか? 持っていることのプラス/マイナスは何ですか:

  • サイト全体のデータベース (エンティティには「customerID」があり、データには「entityID」があります)
  • 顧客ごとのデータベース(データには「entityID」があります)
  • 各エンティティのデータベース (データベースと顧客の関係はデータベースの外にあります)

複数のデータベースを使用すると、パフォーマンスが向上する (行と結合が少なくなる) ように見えますが、最終的にはメンテナンスの悪夢になる可能性があります。

4

11 に答える 11

5

個人的には、個別のデータベース、特にエンティティごとのデータベースを好みます。私がこのアプローチを気に入っている理由は次のとおりです。

  1. クエリに関しては、小さいほど高速です。
  2. クエリはより簡単です。
  3. ある顧客のデータを別の顧客に誤って表示するリスクはありません。
  4. 1 つのデータベースが大きくなる (エンティティの数が増える) と、パフォーマンスのボトルネックになる可能性があります。エンティティごとに 1 つの水平スケーラビリティを構築できます。
  5. 顧客またはエンティティが削除されると、データを簡単にクリーンアップできます。

確かに、スキーマのアップグレードにはさらに時間がかかりますが、私の経験では、一度展開して追加するだけで、変更を行うことはほとんどありません。

于 2008-08-28T15:26:33.853 に答える
2

これ以上の情報がないと答えにくいと思います。

私は 1 つのデータベースに寄りかかっています。適切にコーディングされたビジネス オブジェクトは、クエリで clientId を忘れないようにする必要があります。

使用しているデータベースのタイプとそのスケーリング方法が、決定を下すのに役立つ場合があります。

今後のスキーマ変更については、メンテナンスの観点からは 1 つのデータベースの方が簡単なように思われます。それらを作成する場所が 1 つあります。

于 2008-08-21T17:47:11.920 に答える
1

バックアップと復元はどうですか?お客様がエンティティの 1 つのバックアップを復元したいという経験はありますか?

于 2008-08-21T15:54:18.010 に答える
1

これは、マルチテナント SAAS アプリケーションではごく普通のシナリオです。どちらのアプローチにも長所と短所があります。マルチテナント SAAS (サービスとしてのソフトウェア) のベスト プラクティスを検索すると、熟考すべきことがたくさん見つかります。

于 2008-08-21T15:56:40.360 に答える
1

Microsoft のサイトでこの記事を参照してください。マルチテナント設計に関連するさまざまなコストと利点をうまく説明していると思います。ウィキペディアのマルチテナントの記事もご覧ください。多くのトレードオフがあり、最適な組み合わせは、開発している製品のタイプによって大きく異なります。

于 2009-02-02T17:50:18.080 に答える
0

それらを別々のデータベースに保持するための1つの良い議論は、スケーリングが容易であるということです(クライアントデータベースがサーバー全体に分散されているため、サーバーの複数のインストールを単純に行うことができます)。

もう 1 つの議論は、一度ログインすると、各クエリに (クライアント ID の) where チェックを追加する必要がないということです。

そのため、クライアントごとに複数の DB でバックアップされたマスター DB がより良いアプローチになる可能性があります。

于 2008-08-21T15:58:26.487 に答える
0

最も現実的なシナリオを採用する必要があり、必ずしも顧客が将来「やりたい」と思うことではないと思います。その機能を売り込む (つまり、すべてのエンティティを 1 つのダッシュボードで表示する) 場合は、ソリューションを見つけるか (複数のデータベースからダッシュボードを取得するなど)、アプリ全体に対して単一のデータベースを使用する必要があります。

私見、同じデータベースに複数のクライアントのデータを保持することは、私には悪い考えのように思えます。常に clientID でクエリをフィルタリングすることを忘れないでください。

于 2008-08-21T16:40:13.483 に答える
0

また、RDBMSにも依存します。

SQL サーバー データベースを使用すると安価です

Oracle では、テーブルを顧客の "customerID" で簡単に分割できるため、顧客ごとに単一の大規模データベースを小規模データベースと同じくらい高速に実行できます。

ただし、選択するたびに、データアクセスコードの低レベルとしてそれを隠すようにしてください

于 2009-09-03T12:02:49.677 に答える
0

コードを複数の環境にデプロイする予定はありますか?

その場合は、それを 1 つのデータベース内に保持し、すべてのテーブル参照に構成ファイルの名前空間をプレフィックスとして付けるようにしてください。

于 2009-09-20T12:33:35.347 に答える
0

クライアントがバックアップから単一のエンティティのみを復元し、他のエンティティを現在の状態のままにする必要がある場合、各エンティティが個別のデータベースにあると、メンテナンスがはるかに簡単になります。まとめてバックアップおよび復元できる場合は、エンティティを単一のデータベースとして維持する方が簡単な場合があります。

于 2008-08-21T16:00:26.450 に答える
0

単一データベース オプションを使用すると、メンテナンスがはるかに簡単になります。

于 2010-04-26T15:42:34.707 に答える