古い(100万LOC)システムをSAP ADS(以前のSybase)からISAMベース(いわゆるフリーテーブル)ベース)システムからPostgreSQLデータベースに移行する必要があります。
システムは、いくつかの基本情報(大臣ID、クライアントID、会計年度など)をWindowsフォルダーのパスにのみ入れることに関する一種のマルチテナンシーを実装し、 SQLステートメントはこれらを使用して、特定のテーブル(-files)の適切なパスでテーブルアドレスを作成します。
SAPはAdvantage Database Serverのサポートを終了することを決定したため、システムを別の(実際の)RDBMSに移行する必要があります。
少なくともPostgreSQLを使用することを決定しました。これは、これを複製するために使用できるものに少なくともWindowsフォルダーのパスをマップする一種の名前空間(スキーマ)をサポートするためです。
ここではmultitenancyという用語を使用していますが、実際には次のようなものではありません。
したがって、上記のことは、私たちが
ATMでは、これを行う方法として2つの主要なアプローチについて説明しています。
SCHEMA
インスタンスにあるテーブルインスタンスへの各フォルダーに表示される既存のADSテーブルをPostgreSQLテーブルオブジェクトに移行します。SCHEMA
名が一意のIDを使用してマップされる別のテーブル。どちらのアプローチもすでに技術的にほぼ解決されており、既存のシステムをいずれかの方法で移行できます。
しかし、私たちが取るべき道を検討するポイントはまだあります。
私たちはすでに測定を行っていますが、いくつかのアドバイス、おそらくいくつかの経験、あるいはDB設計のアイデアの他の選択肢についても聞きたいと思います。どのアプローチがより適切にスケーリングできるかについてです。
EXPLAIN ANALYZE
サーバ側)。SCHEMA
ごとのテーブルの使用pg_catalog
は大きくなる傾向があり、特にpg_catalog.pg_attributes
テーブル。これらを使用して実行されるすべての操作(PostgreSQLクエリオプティマイザーを含む)は、膨大なビッグデータコンテンツに影響を受ける可能性があります。pg_class
relationオブジェクト。テーブル、インデックス、BLOBフィールドなどが含まれます。ここでの観察で私が提供したものは少し偏っていますが、代替案について、または私たちが議論しているこれらのモデルのいずれかについて絶対に行くことについて尋ねたいと思います。
私の上司は賢い人であり、彼は私がビューモデルをサポートする建築家の1人であることを知っているので、実際に短所を教えてくれる宿題としてくれました。
では、漠然としたアーキテクチャアドバイスを紹介します。
フォルダーをスキーマではなく単一のテーブルのインデックスと同等に考えるのは正しいと思います。
ただし、ビューを介して単一のテーブルにアクセスすると、問題が発生する場合があります。ビューでSQLを実行するのではなく、SQLステートメントを変更することを常にお勧めします。
次に、データのせん断量も問題になる可能性があります。パフォーマンスを維持するには、何らかの方法で分割する必要がある場合があります。
同じスキーマで複数のデータベースを作成し、データをテナントや日付で分割することで分割することをお勧めします。
これには、必要に応じて物理的に異なるハードウェアにデータを移動できるという利点があります。もちろん、デメリットは、スプリット全体で効果的にクエリを実行できないことです。
実際のテーブルを作成します。次に、実際に外部キー制約を適用し、実際にそれらを使用するエンティティのサブセットにのみ適用されるインデックスを作成できます。同時に使用する場合の競合を減らすことができます。 RDMSのメリットを実際に楽しむことができます...
* Unless *単一のテナントに対して単一のdbを小さく(数ギグ)維持できるようにデータをシャーディングできる、明確で独立したテナンシーがいくつかありますand使用パターンは、数ギグのデータに、いくつかの有用なインデックスと比較的少ない書き込みがあるようなものです。