(PostgreSql 9.4に裏打ちされた)大規模なSAASアプリケーションの場合、300,000を超えるアカウントがあり(そして成長中)、アカウントごとにスキーマを使用してデータをパーティション分割することと、すべてのデータを1つのスキーマに入れ、外部キーを使用することの長所と短所は何ですか。クエリで分割しますか?
以前、多くのスキーマを操作するときにpg_dumpが非常に遅くなっていましたが、それが今日のケースかどうかはわかりません。また、データベース構造の変更はすべてのスキーマで行う必要があることも認識しています。そしてプラス面では、スキーマをある物理サーバーから別の物理サーバーに移動するのは簡単です。また、スキーマをバックアップから復元することはもちろんです。データをそのようにパーティション分割することは理にかなっています。
それで、私が見逃している長所と短所は何ですか?
どちらも良く見えません。単一の巨大なテーブル(「垂直方向の増加」)を管理することは困難であり、膨大な数のスキーマ(「水平方向の増加」)を管理することも困難です。
—
DanielVérité2015年
その数のアカウント(およびさらに多くのユーザー)がいる古いシステムを再構築しています。共有アプローチ(mySqlを使用)を使用しており、パフォーマンスに関しては問題なく機能しています。私の懸念は、そのレベルのパフォーマンスを維持しながら、それに保守性を追加することです。
—
Harel
@Harel私は好奇心旺盛ですが、400kのスキーマでそれを試しましたか、それとも別のアーキテクチャ/テクノロジーに切り替えましたか?
—
sthzg
考えてみたところ、あきらめました。私が作成しようとしていたスキーマの量は、これの実用的な使用を打ち負かすでしょう。すべてのレコードで古き良きアカウントIDフィールドを使用しました。私がやったことは、UUIDを優先して数値の自動インクリメントIDを削除することでした。つまり、整合性を壊すことを心配する必要なく、1つのdbから別のdbにアカウント全体を簡単に取得できます。
—
Harel