4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ZOZOAdvent Calendar 2024

Day 2

BSONについて

Last updated at Posted at 2024-12-01

BSONはBinary JSONの略で、その名の通りJSONをバイナリで表現したものです。
xSONのなかではJSONに次ぐ知名度を持っており、MongoDBで使われていることで有名です。

JSONがテキスト形式なのに対してBSONバイナリ形式のため、JSONと比較してコンパクトで高速な一方で人間にとっての可読性は低いです。

基本的にはJSONをバイナリ形式にしただけですが、以下のような違いがあります。

データ型

BSONはJSONには存在しない以下のデータ型があります。

  • 日付
  • 正規表現

また数値型についてもBSONは少々異なります。バイナリで表現されるために数値型が厳格になっています

  • 32bit整数
  • 64bit整数
  • IEEE 754形式の64bit 浮動小数点数
  • decimal128形式の10進数浮動小数点数

データサイズを表すヘッダー

JSONで {"hello": "world"} というデータはBSONでは以下のようになります。
データの先頭に全体のサイズを表すヘッダーがあることが分かります。
また、文字列 world の先頭にもフィールドサイズを表すヘッダーがあることが分かります。(文字列の終端であるnullを含むためにサイズは6です)

\x16\x00\x00\x00          // total document size
\x02                      // 0x02 = type String
hello\x00                 // field name
\x06\x00\x00\x00world\x00 // field value (size of value, value, null terminator)
\x00                      // 0x00 = type EOO ('end of object')

出展:

この様にデータサイズを表す4バイトのヘッダーがあるため、効率良くフィールドをスキップすることができます。
また、一般的にはJSONよりもBSONの方がサイズが小さくなる傾向にはありますが、ヘッダーの影響で小さいオブジェクトはBSONにするとかえってサイズが大きくなってしまうこともあります。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?