5

サービスとして、またスタンドアロンアプリケーションとして提供するアプリケーションを作成しています。Zend Frameworkで記述されており、MySQLを使用しています。

サービスとして提供する場合、ユーザーが自分のサイトに登録し、customer1.mysite.com、customer2.mysite.comなどのサブドメインを持つようにします。

ユーザーごとに新しいデータベースを作成するのではなく、すべてを1つのデータベースにまとめたいと考えています。

しかし今、私はそれをより良くする方法を考えています。私は2つの解決策を思いつきました:1。各テーブルにユーザーIDを持ち、それを各データベース要求のWHERE句に追加するだけです。2.「customer1_tablename」、「customer2_tablename」などの一意のプレフィックスを使用してテーブルを再作成します。

どちらのアプローチが良いですか?長所と短所?同じデータベース上のユーザーを分離する別の方法はありますか?

レオンティ

4

4 に答える 4

3

すべてのテーブルを一緒に保つことに固執します。そうしないと、単一のデータベースを使用する意味がほとんどありません。これはまた、何らかのクロスサイト インタラクションを将来的に許可できる可能性があることも意味します。差別化フィールド(またはその他のもの)にインデックスを付けることを確認してくださいcustomer_number。問題ありません。

テーブルが非常に大きくなり遅くなる場合は、テーブルのパーティショニングを調べてください。

于 2009-11-26T14:18:47.407 に答える
1

ユーザーごとに別々のデータベースを使用することをお勧めします。これにより、アプリケーションのコーディングが容易になり、MySQL のメンテナンス (単一アカウントの移行、アカウントの削除など) が容易になります。

このルールの唯一の例外は、アカウント間でデータにアクセスする必要がある場合、またはデータを共有する必要がある場合です。

于 2009-11-26T14:38:03.423 に答える
1

これはマルチテナント アプリケーションと呼ばれ、多くの人が実行します。見る

マルチテナントタグ

他の人々の質問について

于 2009-11-26T16:28:14.650 に答える
1

それは、データで何をするつもりかによって異なります。クライアントがデータを共有しない場合は、顧客ごとにセグメント化する方がよい場合があります。また、パフォーマンスが向上する場合もあります。

一方、同じ構造のテーブルを多数持つことは、構造を変更したい場合に悪夢になる可能性があります。

于 2009-11-26T14:19:04.363 に答える