マルチテナント CRM システムにおけるテーブルのパーティション分割の問題と、テーブルとデータの生成をトリガーする方法。
当社は現在、マルチテナント型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) を作成するだけでは、多くのリソースを消費しません。瞬く間に使用できるわけではありません

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHPはMySQLIおよびPDO拡張機能を使用して、データベース操作とサーバー側のロジック処理で対話し、セッション管理などの関数を介してサーバー側のロジックを処理します。 1)MySQLIまたはPDOを使用してデータベースに接続し、SQLクエリを実行します。 2)セッション管理およびその他の機能を通じて、HTTPリクエストとユーザーステータスを処理します。 3)トランザクションを使用して、データベース操作の原子性を確保します。 4)SQLインジェクションを防ぎ、例外処理とデバッグの閉鎖接続を使用します。 5)インデックスとキャッシュを通じてパフォーマンスを最適化し、読みやすいコードを書き、エラー処理を実行します。

PHPは動的なWebサイトを構築するために使用され、そのコア関数には次のものが含まれます。1。データベースに接続することにより、動的コンテンツを生成し、リアルタイムでWebページを生成します。 2。ユーザーのインタラクションを処理し、提出をフォームし、入力を確認し、操作に応答します。 3.セッションとユーザー認証を管理して、パーソナライズされたエクスペリエンスを提供します。 4.パフォーマンスを最適化し、ベストプラクティスに従って、ウェブサイトの効率とセキュリティを改善します。

nginxが開始されるかどうかを確認する方法:1。コマンドラインを使用します:SystemCTLステータスnginx(Linux/unix)、netstat -ano | FindStr 80(Windows); 2。ポート80が開いているかどうかを確認します。 3.システムログのnginx起動メッセージを確認します。 4. Nagios、Zabbix、Icingaなどのサードパーティツールを使用します。

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

Linuxでは、次のコマンドを使用して、nginxが起動されるかどうかを確認します。SystemCTLステータスNGINXコマンド出力に基づいて、「アクティブ:アクティブ(実行)」が表示された場合、NGINXが開始されます。 「アクティブ:非アクティブ(dead)」が表示されると、nginxが停止します。

Linuxでnginxを開始する手順:nginxがインストールされているかどうかを確認します。 systemctlを使用して、nginxを開始してnginxサービスを開始します。 SystemCTLを使用して、NGINXがシステムスタートアップでNGINXの自動起動を有効にすることができます。 SystemCTLステータスNGINXを使用して、スタートアップが成功していることを確認します。 Webブラウザのhttp:// localhostにアクセスして、デフォルトのウェルカムページを表示します。

Docker画像を作成する手順:ビルド命令を含むDockerFileを書きます。 Docker Buildコマンドを使用して、ターミナルで画像を作成します。画像にタグを付け、Dockerタグコマンドを使用して名前とタグを割り当てます。

CentOSにMySQLをインストールするには、次の手順が含まれます。適切なMySQL Yumソースの追加。 yumを実行して、mysql-serverコマンドをインストールして、mysqlサーバーをインストールします。ルートユーザーパスワードの設定など、MySQL_SECURE_INSTALLATIONコマンドを使用して、セキュリティ設定を作成します。必要に応じてMySQL構成ファイルをカスタマイズします。 MySQLパラメーターを調整し、パフォーマンスのためにデータベースを最適化します。
