什么是二进制 json (BSON) 中的二进制?
Posted
技术标签:
【中文标题】什么是二进制 json (BSON) 中的二进制?【英文标题】:what is binary in binary json (BSON)? 【发布时间】:2019-07-24 20:08:43 【问题描述】:为什么二进制字被用于 BSON,当它以如下格式存储数据时
A document such as "hello": "world" will be stored as:
Bson:
\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')
对于这种格式,我们还需要解释器来解析并将其转换为机器指令和
它以何种方式压缩实际的 JSON 数据并进行快速解释?
【问题讨论】:
"...我们需要解释器来解析并将其转换为机器指令.." - 不,那是完全不同的事情。这些不是“机器指令”,而只是用于存储数据的“字节格式”。类 JSON 并不意味着它在任何时候都是 JSON。实际上,它只是“只是另一个打包数据结构”的“营销名称”。 不要忘记 "hello": "world"
在 javascript 中只是看起来像这样。对于 Java、C# 或 Go,它看起来像是完全不同的语言,并且是该语言的原生语言。 BSON 是任何这些形式的“通用翻译”。但是对于“类型”,像 JSON 这样的基于文本的东西没有。
我的意思是说二进制这个词对 BSON 有什么意义,以及 BSON 的什么属性使它变得更快。
【参考方案1】:
这是二进制数据类型的类比语义。 BSON 二进制文件有一个字节数组,表示从 0 到 127 的内部子类型。
例如:字节 0000 0000 1000 表示十六进制“\x08”,表示 BSON 规范中的布尔类型。
驱动程序将负责编码和解码 UTF-8 到 BSON 格式,存储引擎如 MongoDB 中的 WiredTiger 将负责对 BSON 格式的数据进行序列化和反序列化。
【讨论】:
但是是什么让这些数据的解析速度更快? 为 WiredTiger 访问 bson 更合适、更快速,因为它是设计使然,即使考虑到将 json 转换为 bson 也是一种折衷。我在内存中做了一些测试,wt 在我的环境中与时间非常相似。以上是关于什么是二进制 json (BSON) 中的二进制?的主要内容,如果未能解决你的问题,请参考以下文章