当社は現在、マルチテナント型CRM管理システムを開発中です。データ量がすでに膨大であるため、最近、データベースとテーブルのシャーディングの問題を検討し始めました。
マルチテナント CRM システムの場合、現在データベースを編成する主な方法は 3 つあります。
1. 単一のデータベースは単一のテナントに排他的です。
2. 単一データベースの下の単一テナントは単一スキーマを利用します
3. 複数のテナントが単一データベースを共有します (データを区別するためにテナント ID を使用します)
さまざまな考慮事項に基づいて、現在は 2 番目の方法を採用しています。各テナントには独自のデータ テーブルのセットがあります。各テーブルのテーブル名は[テーブル名+テナントID]の形式となります。
しかし、データベースの構造が決まった後、よくわからない問題がいくつか発生しました。つまり:
1. これらのテーブルを管理する方法は? phpコードを使用して管理しますか、それともmysql側にそのようなミドルウェアがありますか?
2. 新しく登録されたテナントのデータテーブルの生成はいつトリガーされますか? (現在のトリガー位置は、新規ユーザー登録時にユーザーテーブルやメニューテーブルなどを直接生成することになっています。他の機能を使用すると、該当する関数テーブルが再度生成されます。いつもこんな感じです。方法に問題があります) 、それを処理するより良い方法はありますか?)
マルチテナント CRM システムに取り組んだことがある技術の第一人者はいますか? アドバイスをいただけますか?ありがとうございました
私たちの会社は現在、マルチテナントの CRM 管理システムに取り組んでいます。データ量がすでに膨大であるため、最近、データベースとテーブルのシャーディングの問題を検討し始めました。
マルチテナント CRM システムの場合、現在データベースを編成する主な方法は 3 つあります。
1. 単一のデータベースは単一のテナントに排他的です。
2. 単一データベースの下の単一テナントは単一スキーマを利用します
3. 複数のテナントが単一データベースを共有します (データを区別するためにテナント ID を使用します)
さまざまな考慮事項に基づいて、現在は 2 番目の方法を採用しています。各テナントには独自のデータ テーブルのセットがあります。各テーブルのテーブル名は[テーブル名+テナントID]の形式となります。
しかし、データベースの構造が決まった後、よくわからない問題がいくつか発生しました。つまり:
1. これらのテーブルを管理する方法は? phpコードを使用して管理しますか、それともmysql側にそのようなミドルウェアがありますか?
2. 新しく登録されたテナントのデータテーブルの生成はいつトリガーされますか? (現在のトリガー位置は、新規ユーザー登録時にユーザーテーブルやメニューテーブルなどを直接生成することになっています。他の機能を使用すると、該当する関数テーブルが再度生成されます。いつもこんな感じです。方法に問題があります) 、それを処理するより良い方法はありますか?)
マルチテナント CRM システムに取り組んだことがある技術の第一人者はいますか? アドバイスをいただけますか?ありがとうございました
私だったら、最も早く目標を達成するために、最初にスキーマを初期化するロジックを解決するソフトウェアを間違いなく使用します。ミドルウェアの利用については、今後の実情に応じて検討していきます。
初期化アクションをトリガーするタイミングについては、初期化アクションに必要なリソースと時間によって異なります。消費量が無視できる場合、新しいテナントは登録が成功した直後に初期化されます。時間がかかり、リソースを消費する場合は、cron が定期的に実行されます (ビジネスでは、登録からテナントの使用までの間隔が必要です)。登録審査)。
私の経験によれば、数十、さらには数百のテーブル (MySQL) を作成するだけでは、多くのリソースを消費しません。瞬く間に使用できるわけではありません