PHP(Symfony 2)とPostgreSQLでWebアプリケーションの新しいプロジェクト(完全な再起動)を作成することを計画しています。現在、PHPとMySQL(MyISAM)を使用しています。-> webapp
現在および新しいWebアプリケーションは、データベース(MS SQL 8/2000)を含む別のシステム(.NET)に依存しています。これは、メギッラー全体で複雑なワークフローがあるため、すぐに変更(データベースを変更またはマージ)することはありません。 ->レガシーシステム
ところで:最大のテーブルには合計2700万行あります
ほとんどのデータ/テーブルは、レガシーデータベースからwebappデータベースに1日に複数回転送されます。新しいWebアプリでは、データベーススキーマのほとんどをすでに再設計したため、ほぼ正規化されたスキーマになりました(レガシーデータベースのスキーマは非常に冗長で、非常に面倒です)
現在、転送ジョブはデータを挿入しようとしています。特定のコードで例外が発生した場合、その行はすでに存在していることがわかり、更新を実行します。これはパフォーマンスによるものです(更新前に選択しない)。
新しいWebアプリケーションスキーマでは、従来のデータベースと同じプライマリIDを使用する必要があります。しかし、いくつかの問題があります。そのうちの1つは、整数のように見える主キーを持つテーブルもありますが、そうではありません。ほとんどの行には、のような整数が123456
ありますが、。のような文字を持つ行もあります123456P32
。
新しいスキーマには2つのオプションがあります。
- PKとリスクパフォーマンスの問題に文字列型を使用する
PKに整数型を使用して変換を行う変換は次のようになります(文字ベース)
legacy new -------------------------- 0 10 1 11 2 12 . .. 9 19 a 20 b 21 . .. y 45 z 46 A 50 (not 47, because the arity of the second digit is 'clean' with 50) B 51 . .. Z 76
従来のpk123は111213に変換されるため、長さは元の長さの2倍になります。別の例123A9- > 1112135019。すべての文字は2桁であるため、元に戻すこともできます。
私の最初の疑問は、スパースPKがパフォーマンスの問題を引き起こすことでしたが、Postgresのデフォルトのインデックスシステムであるインデックスとしてb-tree(セルフバランシング)を使用する場合は問題ありません。
どう思いますか?従来の依存関係を持つ同様のシステムの経験はありますか?