私は約30万レコードのデータベースを持っています。これらのレコードごとに、最大1600の関連プロパティがあります。これらの各プロパティには、単純なkey => value形式があります。このデータは非常に静的であり、ほとんどすべての操作が読み取りになります。
以下は、この問題を解決するために私が考えているオプションです。
1)各プロパティの列
Postgresで使用可能な列の最大数は約1600であるため、これはすぐに崩壊します。だから本当に、これはオプションではありません。
2)キー値列を格納するhstoreまたはJSONB列を作成します。
これは機能しているようですが、hstoreまたはJSONBに保存するデータの量には実際的な制限があることを読みました。キー/値はたくさんあり、hstoreとJSONBの両方がこれらをTOASTに格納するため、パフォーマンスに悪影響を与える可能性があると思います。
アプローチ#2を使用する場合、どのような潜在的な問題/実際的な制限に注意する必要がありますか?
この問題を解決するための他のアプローチは何ですか?
次のように、キーと値のペアを保持するテーブルを作成できます。
CREATE TABLE KEY_VALUE (
ID BIGINT, -- THIS COULD BE A FKEY TO YOUR '300K' RECORD TABLE
KEY VARCHAR,
VALUE VARCHAR
);
このテーブルが適切にインデックス付けされている限り(ID /キーのインデックスだと思います)、数百万行のサイズであっても、関心のあるキーと値のペアを取得するのは非常に高速です。確かに-実行可能なオプションとしてのこのソリューションは、キーと値のペアで保存する予定のデータの範囲(すべてテキストか数字かなど)によって異なります。おそらく、値がどのタイプのデータであるかを示すために3番目の列を追加すると役立ちます。
[〜#〜]編集[〜#〜]
明確にするために、ところで-私はあなたが持っていると言った異なるキー->値のペアの膨大な数を考えるとこれがうまくいくかもしれないと思いました..それが少ない場合、私はおそらく「詳細」タイプのテーブルを持っているでしょう各値は列に格納されました。