2012-04-18 5 views
28

私のデータベースにjson_encodedという文字列を格納する予定です。私はその長さを正確に伝えることはできませんが、それは長くなるとはっきりと確信しています。私の関心事は、これに使用するフィールドタイプは、blobまたはtextですか?MySQLでJSONのBLOBまたはテキストを使用する必要がありますか?

高速検索よりもできるだけスペースを節約できる場所を好んでいます。いずれにしても、インデックスを作成する必要がある他の列があります。

答えて

24

blobは画像のようなもののために、バイナリなどtextは、あなたのケースのために十分に良いことがあり、またはあなたはそれが本当に心配だ場合はさらに大きな空き容量を持つlongtextを使用することができ、通常です。

json_encodeのデータを保存しているため、検索するとアプリケーションに役立つためにはまだjson_decodeを呼び出す必要があります。この場合、データ型の選択に問題はありません。

より良い方法は、関連するものをjsonの大きな文字列に格納するのではなく、データベース設計を正規化することです。

+2

ご挨拶ありがとうございます。 –

+1

私は約2年11か月後ですが、ウェブフックのペイロードに関しては、シリアル化されたJSONを保管しておくのを待っている間に保管しておくと良いでしょう。誰かが違った考えをすると、私はフィードバックが大好きです。 – Mave

+2

Pinterestは 'text'にJSONを保存していますが、最近[この記事(半分スクロールダウン)]で公開しています(https://engineering.pinterest.com/blog/sharding-pinterest-how-we-scaled-私たちの - mysql - フリート)。 – DanFromGermany

21

MySQLのドキュメントに記載されているように、5.7.8はネイティブなJSONデータ型がサポートされているためです。 JSON列に格納されたJSON文書の

  • 自動検証:

    JSONデータ型は、文字列列のJSON形式の文字列を格納するのこれらの利点を提供します。無効なドキュメントではエラーが発生します。

  • 最適化された保存形式。 JSON列に格納されたJSON文書は、文書要素への迅速な読み取りアクセスを可能にする内部形式に変換されます。サーバーが後でこのバイナリ形式で格納されたJSON値を読み取る必要がある場合、その値をテキスト表現から解析する必要はありません。バイナリ形式は、サーバーがサブオブジェクトまたはネストされた値をキーまたは配列のインデックスで直接検索することができるように構成されています。

したがって、MySQLのマニュアルに記載されているように、テキストではなくJSONデータ型を使用する必要があります。

関連する問題