PostgreSQL の JSONB
JSONB は、分解されたバイナリ形式で保存される一種の JSON データです。Google のトレンドをフォローしたり、調査を行ったりすると、JSON が開発部門でますます人気になっていることがわかります。
現在、NoSQL はデフォルトで JSON データを保存できます。使用するのは堅牢であり、ネストされたオブジェクトを別のオブジェクト内に配置できるため、したがって、それはより人気が高まっています。
Postgres を使用すると、ユーザーは SQL タイプデータベースに JSON および JSONB データタイプを作成できます。
PostgreSQL で JSONB を使用してテーブルを作成する
製品のテーブルを作成するとします。製品にはさまざまな種類があります。
たとえば、それらのいくつかはリットルで、いくつかはグラムで、またはいくつかは断片で測定することができます。また、特定の製品について、他の製品と類似できないタイプのデータが存在する可能性があります。
この場合、JSON または JSONB を使用してこの見慣れないデータを保存することをお勧めします。JSONB タイプのデータを使用したテーブルの作成を以下に示します。
CREATE TABLE Products(
id SERIAL PRIMARY KEY,
seller TEXT NOT NULL,
data JSONb NOT NULL
);
JSONB データタイプを PostgreSQL に挿入する
以前は、JSONb
タイプのデータを含む列を含むテーブルを作成しました。それでは、テーブルにデータを入力しましょう。
ご存知のとおり、JSONB は、Python の辞書と同じように、キー値形式でデータを保存します。上記の表にいくつかのデータを入力してみましょう。
INSERT INTO Products(seller,data)
VALUES
('Jones Heard',
'{ "name": "Milk Shake",
"price": "10$",
"ingredients":
{ "Milk":
{ "amount":"250ml","calorie":"100 Kcl"},
"Coco Powder":
{ "amount":"50 gram", "calorie":"100 Kcl"}
}
}'
);
JSONB データをテーブルに正常に挿入したら、追加されたデータを表示します。上記の JSON から、ネストされたオブジェクトがあることがわかります。
ここで重要なデータ
には、名前
、価格
、および成分
があります。成分
の中には、カロリー値のある成分とその量があります。
つまり、ネストされたオブジェクトです。ここでの動機は、このようなネストされた出力を持つために複雑な結合を必要としないことです。
SELECT id ,seller, jsonb_pretty(data) as Product_Details
FROM products;
出力:
id | seller | product_details
----+-------------+----------------------------------
1 | Jones Heard | { +
| | "name": "Milk Shake", +
| | "price": "10$", +
| | "ingredients": { +
| | "Milk": { +
| | "amount": "250ml", +
| | "calorie": "100 Kcl"+
| | }, +
| | "Coco Powder": { +
| | "amount": "50 gram",+
| | "calorie": "100 Kcl"+
| | } +
| | } +
| | }
(1 row)
このコマンドでは、jsonb_pretty()
関数を使用しました。JSON オブジェクトを必要なインデントでフォーマットします。
そうしないと、JSON 全体が 1 行に表示され、オブジェクトの関係を理解するのが非常に困難になります。
PostgreSQL における JSONB の長所と短所
Postgres には JSON タイプがありましたが、JSONB 形式も導入されました。これまで見てきたように、宣言やその他のクエリは JSON と非常によく似ています。
JSON よりも JSONB を使用する場合の利点は次のとおりです。
- JSON よりも効率が良い。
- 分解されたバイナリであるため、処理が高速になります。
- JSON はサポートしていませんが、インデックス作成はサポートしています。
また、いくつかの欠点があります。以下は次のとおりです。
- 入力が遅い。
- フットプリントが増えるため、JSON よりも多くのディスクスペースが必要になります。
- 場合によっては、集約関数によってプロセスが遅くなることがあります。