Postgres:JSON列とinteger []列を使用することには欠点がありますか?

machineghost

TLDR:整数の配列をPostgresテーブルに保存したい場合、配列列(integer[])を使用することとJSON列を使用することの長所または短所はありますか(たとえば、一方が他方よりもパフォーマンスが優れていますか)?

裏話:

私はPostgreSQLデータベースとそれを管理するためのNode / Knexを使用しています。KnexにはPostgreSQLのinteger[]列タイプを直接定義する方法がないため、誰かがKnexのバグを報告してそれを要求しました...しかし、Knex開発者の1人がチケットを閉じ、本質的にPostgreSQL配列の列タイプをサポートする必要はないと述べました代わりに誰でもJSON列タイプを使用できる場合。

私の質問は、JSON列型を使用して整数の単純な配列を保持することにはどのような欠点がありますか?真の配列列を使用することでパフォーマンスが向上するなどの利点はありますか、それとも配列をJSON列内に格納するだけで同じようにうまくいきますか?

編集:明確にするために、私が答えで探しているのは次のいずれかです:

A)PostgreSQLのJSON列とinteger []列がどのように機能するかについての説明。一方が他方よりも優れているか、または2つが(少なくとも大まかに)等しいかを含みます。

B)説明はありませんが、少なくとも、一方の列タイプまたは他方の列タイプのパフォーマンスが優れている(または2つが等しい)ことを示すいくつかのベンチマークへの参照

無名の馬

Anint[]は、必要なストレージの点ではるかに効率的です。500要素の配列のサイズを返す次のクエリについて考えてみます。

select pg_column_size(array_agg(i)) as array_size, 
       pg_column_size(jsonb_agg(i)) as jsonb_size,
       pg_column_size(json_agg(i)) as json_size
from  generate_series(1,500) i;

戻り値:

array_size | jsonb_size | json_size
-----------+------------+----------
      2024 |       6008 |      2396

(JSON値がJSONBよりもはるかに小さいことに非常に驚いていますが、それは別のトピックです)


あなたはいつものように配列を使用する場合、単一の値には、クエリのパフォーマンスの面で本当に重要ものではありませんが、あればやる配列に調べる必要がありますが、特定の値(複数可)を検索し、それは、ネイティブ配列と多くの、より効率的になります。

JSON配列よりもネイティブ配列使用できる関数と演算子がたくさんあります。JSON配列で単一の値を簡単に検索できますが、複数の値を検索するには回避策が必要です。

次のクエリは、次のことを示しています。

with array_test (id, int_array, json_array) as (
  values
    (1, array[1,2,3], '[1,2,3]'::jsonb)
)
select id, 
       int_array @> array[1] as array_single,
       json_array @> '1' json_single,
       int_array @> array[1,2] as array_all,
       json_array ?& array['1','2'] as json_all,
       int_array && array[1,2] as array_any,
       json_array ?| array['1','2'] as json_any
from array_test;

配列に特定の値が1つ含まれている場合は、配列を簡単にクエリできます。これはJSON配列でも機能します。それらは式array_singlejson_singleです。ネイティブ配列を使用すると、1 = any(int_array)代わりに使用することもできます。

ただし、配列にリストのすべての値が含まれているかどうか、またはリストの値がJSON配列で機能しないかどうかを確認してください。

上記のテストクエリは次を返します。

id | array_single | json_single | array_all | json_all | array_any | json_any
---+--------------+-------------+-----------+----------+-----------+---------
 1 | true         | true        | true      | false    | true      | false   

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

mvcモデルで文字列IDフィールドを使用することの欠点はありますか?

分類Dev

__slots__を使用することの欠点はありますか?

分類Dev

appsyncでapolloを使用することの欠点はありますか?

分類Dev

Cookieの代わりにlocalStorageを使用することに欠点はありますか?

分類Dev

Javaの代わりにpythonでApache Kafkaを使用することの欠点はありますか?

分類Dev

SEの代わりにdplyrでget()を使用することの欠点はありますか?

分類Dev

MySQLテーブルのAUTOINCRETEMENTでBIGINT列タイプを使用することに起因する欠点はありますか?

分類Dev

バニラJavascriptを理解するまで、簡単に記述できるjQueryを使用することには欠点がありますか?

分類Dev

割り当てられたメモリに使用されるポインタをconstとして宣言することには欠点がありますか

分類Dev

常に-movflagsfaststartパラメーターを使用することの欠点はありますか?

分類Dev

エラー処理にラムダとマクロを使用することには欠点がありますか?

分類Dev

Hibernateは、既存の列を変更しないことが欠点でありますか?

分類Dev

強い自己を宣言した後、クロージャ内で[弱い自己]を使用することには潜在的な欠点がありますか?

分類Dev

Android WebViewのデバッグを有効にすることに関連する欠点はありますか?

分類Dev

Xamarin.FormsMessagingCenterを使用してViewModelとメソッドの間で通信することに利点または欠点はありますか

分類Dev

Artfulでgnome-softwareとpackagekitを削除することに何か欠点はありますか?

分類Dev

現在、jsonデータを文字列型の列に保存していますが、型をjsonにすることには利点がありますか?

分類Dev

std :: stringをバッファとして使用することの欠点はありますか?

分類Dev

rm $(ls)を使用してファイルを削除することの欠点はありますか?

分類Dev

cassandraに複数のクラスタリング列があることの大きな欠点はありますか?

分類Dev

Hibernate EntityManager(vs. Hibernate Core)を使用することの欠点はありますか?

分類Dev

構造体でポインタを使用することの欠点はありますか?

分類Dev

複数の静的AsyncTasksで静的クラスを使用することの欠点はありますか?

分類Dev

リフレクションを使用してクラスプロパティをループする代わりに、それをjson文字列にシリアル化して調べることはできますか?それには欠点がありますか?

分類Dev

BIOSでハードウェア仮想化を有効にすることの欠点はありますか?

分類Dev

sshでX11転送を有効にすることの欠点はありますか?

分類Dev

新しいスキャナーを作成するときに、同じ入力名を使用することの欠点はありますか?

分類Dev

IF本体内で変数を宣言するときに欠点はありますか?

分類Dev

ホイストを「使用」したい場合、通常の関数宣言の代わりに関数式を使用することの欠点はありますか?

Related 関連記事

  1. 1

    mvcモデルで文字列IDフィールドを使用することの欠点はありますか?

  2. 2

    __slots__を使用することの欠点はありますか?

  3. 3

    appsyncでapolloを使用することの欠点はありますか?

  4. 4

    Cookieの代わりにlocalStorageを使用することに欠点はありますか?

  5. 5

    Javaの代わりにpythonでApache Kafkaを使用することの欠点はありますか?

  6. 6

    SEの代わりにdplyrでget()を使用することの欠点はありますか?

  7. 7

    MySQLテーブルのAUTOINCRETEMENTでBIGINT列タイプを使用することに起因する欠点はありますか?

  8. 8

    バニラJavascriptを理解するまで、簡単に記述できるjQueryを使用することには欠点がありますか?

  9. 9

    割り当てられたメモリに使用されるポインタをconstとして宣言することには欠点がありますか

  10. 10

    常に-movflagsfaststartパラメーターを使用することの欠点はありますか?

  11. 11

    エラー処理にラムダとマクロを使用することには欠点がありますか?

  12. 12

    Hibernateは、既存の列を変更しないことが欠点でありますか?

  13. 13

    強い自己を宣言した後、クロージャ内で[弱い自己]を使用することには潜在的な欠点がありますか?

  14. 14

    Android WebViewのデバッグを有効にすることに関連する欠点はありますか?

  15. 15

    Xamarin.FormsMessagingCenterを使用してViewModelとメソッドの間で通信することに利点または欠点はありますか

  16. 16

    Artfulでgnome-softwareとpackagekitを削除することに何か欠点はありますか?

  17. 17

    現在、jsonデータを文字列型の列に保存していますが、型をjsonにすることには利点がありますか?

  18. 18

    std :: stringをバッファとして使用することの欠点はありますか?

  19. 19

    rm $(ls)を使用してファイルを削除することの欠点はありますか?

  20. 20

    cassandraに複数のクラスタリング列があることの大きな欠点はありますか?

  21. 21

    Hibernate EntityManager(vs. Hibernate Core)を使用することの欠点はありますか?

  22. 22

    構造体でポインタを使用することの欠点はありますか?

  23. 23

    複数の静的AsyncTasksで静的クラスを使用することの欠点はありますか?

  24. 24

    リフレクションを使用してクラスプロパティをループする代わりに、それをjson文字列にシリアル化して調べることはできますか?それには欠点がありますか?

  25. 25

    BIOSでハードウェア仮想化を有効にすることの欠点はありますか?

  26. 26

    sshでX11転送を有効にすることの欠点はありますか?

  27. 27

    新しいスキャナーを作成するときに、同じ入力名を使用することの欠点はありますか?

  28. 28

    IF本体内で変数を宣言するときに欠点はありますか?

  29. 29

    ホイストを「使用」したい場合、通常の関数宣言の代わりに関数式を使用することの欠点はありますか?

ホットタグ

アーカイブ