オートメーション?
理論的には、この困難な操作 (シングルテナントからマルチテナントへの移行) をはるかに簡単に実行できるツールを作成できるはずです。ただし、そのような製品の対象者が限られていることを考えると、そのようなツールは存在しないと思います。1つでも浮かび上がってくれたら最高です。
手動変換に関するアイデア
新しいマルチテナント データベース スキーマを設計することから始めます。(これは、すべてのシングル テナント データベース スキーマを、所有している可能性のある共有スキーマとマージすることを意味します。) 従来の考慮事項なしで設計された場合のようにしたいと思います。
明らかにTenant
テーブルが必要です。これは、列を持つ既存のシングル テナント テーブルの多くによって参照される必要がありTenant_id
ます。たとえば、ユーザーを含むテーブルでは、ユーザーをテナントに一意に関連付けるためにこれが必要になります。
単純なProducts
テーブル (主キーとして) の場合、列を追加して、複合キー (および)を持つテーブルを生成Product_id
できるはずです。しかし、ゼロからアプリケーションを作成した場合は、テナント参照のないテーブルが適切な方法だと思います。これにより、重複を追加する代わりに、テナントが製品を共有することもできます。1つのテナントがTenant_id
Tenant_id
Product_id
Product
Product_id
1,2,3 と別の 1,2 では、同じ ID を 2 回使用できないため、単純にテーブルをマージすることはできません。一意の主キー値が必要です。この問題を解決する 1 つの方法は、テナント データベースからすべてのデータをメモリ内オブジェクトに読み取り、そのデータをマルチテナント スキーマに書き込むプログラムを (Java またはその他の高水準言語で) 作成することです。このプロセスは、次のテナント データベースに対して繰り返されます。そうすれば、Product_id
値は 1,2,3,4,5 になります。手っ取り早い方法は、各スキーマのすべての ID 値に 1,000、2,000 などの数字を追加し、競合が発生しないことを確認することです。
データベースと通信するコード
データベースがマルチテナントになったことを考慮して、ほとんどのデータベース クエリを書き直す必要があります。これは、あるテナントが別のテナントのデータをいじることを可能にするバグを導入することの影響を考えると、非常に困難な作業です。ただし、いくつかのテクニックを使用すると、このタスクをより簡単に行うことができます。たとえば、テナント ビュー フィルターを使用すると、必要な作業量を大幅に削減できます。
テナント数の制限
マルチテナント構造でテナント数を制限するという推奨事項は見たことがありません。反対に、マルチテナント アプローチの強みは、そのスケーラビリティです。現在、データベース サーバーのクラスターを簡単に作成したり、クラウドベースのソリューションを使用して、必要に応じてハードウェアの能力をシームレスに追加したりできます。
興味のあるリンク