BSON 布尔值与整数性能
BSON Boolean vs. integer performance
当字段只能有两个值之一时,布尔值相对于 int 在 mongoDB 中的表现如何?
具体来说,我有一个存储对象的集合,这些对象可能仍然处于活动状态,也可能不处于活动状态。所以,我想为每一行设置一个 'active' 键。最好输入
{..., active: false, ...}
或
{..., active: 0, ...}
我 更多 对查询活动对象时的速度性能感兴趣,但我对 space 的使用量感兴趣--以防权衡。
如果您对某些数据类型如何实现的底层细节感兴趣,最好的参考是 the BSON specification。
在那里你会看到一个布尔值是两个字节(一个字节用于类型信息 "boolean" 另一个字节 0x00
用于 "false" 和 0x01
用于 "true") 而一个 32 位整数有 5 个字节(1 个字节用于类型前缀,4 个字节用于 32 位内容)。 BSON 还支持占用 9 个字节的 64 位整数,但在大多数编程语言中,驱动程序将存储 32 位整数,除非您明确使用 64 位整数类型。请记住,密钥的名称是一个字符串,它也占用 space.
查询性能不太可能受您使用的类型影响太大。一个查询比比较两个字节/32 位整数的 CPU 操作要耗时得多。
当字段只能有两个值之一时,布尔值相对于 int 在 mongoDB 中的表现如何?
具体来说,我有一个存储对象的集合,这些对象可能仍然处于活动状态,也可能不处于活动状态。所以,我想为每一行设置一个 'active' 键。最好输入
{..., active: false, ...}
或
{..., active: 0, ...}
我 更多 对查询活动对象时的速度性能感兴趣,但我对 space 的使用量感兴趣--以防权衡。
如果您对某些数据类型如何实现的底层细节感兴趣,最好的参考是 the BSON specification。
在那里你会看到一个布尔值是两个字节(一个字节用于类型信息 "boolean" 另一个字节 0x00
用于 "false" 和 0x01
用于 "true") 而一个 32 位整数有 5 个字节(1 个字节用于类型前缀,4 个字节用于 32 位内容)。 BSON 还支持占用 9 个字节的 64 位整数,但在大多数编程语言中,驱动程序将存储 32 位整数,除非您明确使用 64 位整数类型。请记住,密钥的名称是一个字符串,它也占用 space.
查询性能不太可能受您使用的类型影响太大。一个查询比比较两个字节/32 位整数的 CPU 操作要耗时得多。