💬
json型とjsonb型
Daily Blogging67日目
PostgreSQLでjsonデータを格納したくなったので調べてみた。
jsonを扱える型
PostgreSQLにはjsonを格納できる型が2つ存在する。
- json型
- jsonb型
b...?
bとはなんなのか
なぜ二つあるのか
2つの違い
2つの型は、格納するデータの形式が異なる。
- json型
- データをそのまま文字列に変換
- jsonb型
- データをバイナリに変換
bばバイナリのbでした
この違いにより、さらなる違いが生まれるよ
特徴 | json 型 | jsonb 型 |
---|---|---|
データ形式 | 文字列として保存(パースされない) | バイナリ形式で保存(最適化される) |
キーの順序 | 入力時の順序を保持 | 自動的にソートされる |
重複排除 | 同じキーが複数あってもそのまま保存される | 同じキーがある場合、自動的に最後の値に統一される |
インデックス | 使用できない | GINインデックスなどが使用可能 |
部分更新 | できない(全体の更新が必要) |
jsonb_set で部分更新が可能 |
ストレージ効率 | 効率が悪い(余分な空白などを含む) | 最適化されており効率が良い |
使い分け
パフォーマンス、整合性、使い勝手の観点から、基本的にはjsonb型を使用した方が良い。
データをそのまま維持しておきたい場合はjson型を使用した方がよい。
パフォーマンスには要注意
jsonにしろjsonbにしろ、カラムのデータサイズが大きくなる可能性がある。
カラムのサイズが大きくなると通常のテーブルファイルじゃなくて、TOASTファイルに値が格納される。
こうなるとディスクI/Oが余分に増えることになりパフォーマンスに影響を与えるので注意が必要
Discussion