2017-01-24 6 views
1

多くの列と他の回答から、多くの行(またはテーブル)は、正規化されたデータのほうが列が優れているようです。シリアル化されたデータはどうですか?PostgreSQLの多くのjsonb列と多数の行

多くの進行中のWebフォームを保存する予定です。つまり、ユーザーがこれまでに行ったことを確認して別のセッションを続けることはできません。フォームはjsonとしてシリアル化され、jsonbカラムに格納されます。現在、10種類のフォームがありますが、将来は(多くの)追加されます。ユーザーのUUID、フォームID、フォームのJSON列を持つ

CREATE TABLE "forms" (
    "user_id" uuid NOT NULL, 
    "form_a" jsonb, 
    "form_b" jsonb, 
    "form_c" jsonb, 
    ... 
) 

または多くの行::

CREATE TABLE "forms" (
    "user_id" uuid NOT NULL, 
    "form_id" uuid NOT NULL, 
    "form_json" jsonb NOT NULL 
) 

それは、ユーザーIDと各フォームの列と1列を持っている方が良いです

ただ1つの行のクエリは高速ですが、多くのjsonb列を持つ行の列を更新するのはどうでしょうか?または数百万行のテーブルに新しいjsonb列を追加しますか?多くの行を好むのは、どの時点でアドバイスですか?

ありがとうございました!

答えて

1

新しいフォームがメンテナンスウィンドウ(アップグレード)でのみ導入された場合は、最初の方法を使用しなくなる可能性があります。

  • ALTER TABLEブロックと問題になることが文を、修正するすべての同時データによってブロックされています。問題の原因となる

    新しい形態は、通常の動作中に導入することができる場合は、。

  • ALTER TABLEを実行するには、テーブル所有者またはスーパーユーザーである必要がありますが、セキュリティ上の理由から、アプリケーションユーザーがテーブル所有者以外のユーザーでもよい場合は、 the documentationが言うようのでUPDATEため

増加したデータ量は、考慮しないで:更新操作中

、不変のフィールドの値は、通常そのままで保存されています。ライン外の値を持たないローのUPDATEは、ライン外の値が1つも変化しない場合、TOASTコストを発生させません。

私は、2番目のデザインがよりクリーンで、正しいインデックスがあれば、少し複雑なクエリは目に見えないほど高価にならないと思います。

関連する問題