iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MongoDB BSON格式问题有哪些
  • 467
分享到

MongoDB BSON格式问题有哪些

2024-04-02 19:04:59 467人浏览 八月长安
摘要

mongoDB BSON格式问题有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。  本文我们从几个问题入手,分析和了解MonGoDB的BS

mongoDB BSON格式问题有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

  本文我们从几个问题入手,分析和了解MonGoDB的BSON格式的一些特性及使用时的注意事项。

  MongoDB BSON格式有哪些问题

  问题1:字符串与数字

  {a:12}

  {a:'12'}

  哪个更占空间?

  {a:1234}

  {a:'1256'}

  又是哪个更占空间?

  对于第一个例子,应该是前一个更占空间,而对于第二个例子,是后一个更占空间。具体原因是:MongoDB对数字的存储分两个级别,一个32位的,一是64位的,如我们上面的例子,都是在32位能表达的范围内,所以数字型的占用4个字节,而字符串型的占用空间为其长度加上最后一位结束符。所以第一个例子中字符串占用3个字节,第二个例子中字符串占用5个字节。

  同样的,在索引里也是一样,不过值得注意的是,字符串与数字在排序方式上不一样,所以在索引时,数字是按数字的方式比对大小,字符串是按字符串的方式比对大小,比如在字符串中,’12′是小于’2′的。

  问题2:对象与数组

  {a:1,b:2,c:3}

  {d:[1,2,3]}

  哪个更占空间?

  可能你会觉得是第一个,因为它看起来长度更长,或者你还会觉得是因为它包含了每个字段的key值。而实际上呢?

  答案是第二个会占用更多空间,因为BSON数据结构在存储数组类型时,是与对象类似的方法,比如第二条的存储实际上相当于这样:

  {d:{0:1,1:2,2:3}}

  MongoDB BSON格式有哪些问题

  问题3:_id与$natural的排序

  MongoDB中有一个特殊的排序方法,叫$natural,当你指定按$natural排序的时候,相当于是按数据在磁盘上的组织顺序排序。而当你按自动生成的_id字段排序时,相当于是按插入时间排序。当不指定排序顺序的时候,MongoDB是按$natural排序的。这两个有什么差别吗?插入顺序与数据组织顺序不应该一样吗?答案是:有可能。

  当MongoDB中的数据有变更时,可能会导致数据的移动,比如你先用下面的方式写入1000条数据:

  for(var i=0;i<1000;i++)db.test.insert({_id:i,a:'1'})   然后你分别使用下面命令按_id和$natural排序取出前一条结果:   db.test.find().sort({_id:1}).limit(1)   db.test.find().sort({$natural:1}).limit(1)   你得到的结果会是一样的。   这时候你进行一次update操作,将第一条记录的长度变长:   db.test.update({},{a:'12'})   再通过上面两种不同的排序方式取第一条,你会发现取到的结果还是一样的。   然后你再将第一条记录变长:   db.test.update({},{a:'123'})   再通过上面两种不同的排序方式取第一条,这时候你会看到,通过_id排序查到的还是原来那一条,而通过$natural查到的已经变成了第二条。这是什么原因呢?   当我们执行insert操作的时候,每条记录的长度为31,你可以通过下面命令查看到。   Object.bsonsize(db.test.findOne());   而当我们通过一次update,将a值变为’12′时,其长度变长了1字节,变成了32。当我们又一次将a值变为’123′时,其长度变成了33。那为什么记录长度从31到32的时候,按$natural查到的第一条还是原来的,但是长度从32变到33的时候,通过$natural查到的就变了呢?   先说为什么变了,因为MongoDB在记录长度变化后,发现当前记录所在空间后面没有空余的空间可供其变长。那么这条记录就会被删除然后移动到数据集的最后。这是为什么第二次我们通过$natural查到的第一条不是原来那条的原因。因为原来那条已经跑到最尾巴上去了。   但是为什么第一次增长长度时记录没有移动呢?可能你从数字31,32,33上已经看出点端倪来了。对,就是内存对齐,MongoDB每一条记录都会做4字节的内存对齐。所以在你刚插入的时候,记录长度虽然只有31字节,但是MongoDB会为它分配32字节(8*4)的空间。这时候在其末尾就有一字节的空闲,当你增长一字节的时候,这一字节的空闲正好可以用上。所以就不需要移动位置了。而第二次从32字节变成33字节,原有的空间已经不能装下了,所以会造成数据的移动。实际上4字节对齐,也同时造成一些空间的浪费。同时引起数据变长后移动上的不确定性。   

看完上述内容,你们掌握MongoDB BSON格式问题有哪些的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网数据库频道,感谢各位的阅读!

您可能感兴趣的文档:

--结束END--

本文标题: MongoDB BSON格式问题有哪些

本文链接: https://www.lsjlt.com/news/61373.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MongoDB BSON格式问题有哪些
    MongoDB BSON格式问题有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。  本文我们从几个问题入手,分析和了解MongoDB的BS...
    99+
    2024-04-02
  • MongoDB的BSON格式解析方法是什么
    在MongoDB中,BSON是一种二进制的序列化格式,类似于JSON,但更适合用于存储和检索数据。BSON格式的数据可以通过各种编程...
    99+
    2024-05-07
    MongoDB
  • rpm格式和deb格式有哪些区别
    这篇文章主要介绍了rpm格式和deb格式有哪些区别,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。区别是:RPM是Linux Distribution的包管理系统,同时也指rp...
    99+
    2023-06-20
  • CSS问题有哪些
    本篇内容介绍了“CSS问题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!第一问:当margin的值为...
    99+
    2024-04-02
  • ajax问题有哪些
    这篇文章主要为大家展示了“ajax问题有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“ajax问题有哪些”这篇文章吧。 基本的...
    99+
    2024-04-02
  • mongodb持久化的方式有哪些
    在MongoDB中,有以下几种持久化方式: WiredTiger存储引擎:WiredTiger是MongoDB的默认存储引擎,它...
    99+
    2024-04-09
    mongodb
  • Hadoop文件格式有哪些
    这篇文章主要介绍了Hadoop文件格式有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Hadoop 中的文件格式1 SequenceFileSequenceFile是Ha...
    99+
    2023-06-16
  • linux MP3 格式问题
    在linux Mp3 不知怎么不好用,昨天,我插上dmesg|tail 看了下出现很多的错误提示,晕,看也看不懂,然后fdisk /dev/sdb 后看了下信息,又是一堆错误信息,也看不懂,复制了一些错误信息,在百度上搜了下,屁也没有搜到,...
    99+
    2023-01-31
    格式 linux
  • json有哪些数据格式
    这篇文章主要讲解了“json有哪些数据格式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“json有哪些数据格式”吧! json有...
    99+
    2024-04-02
  • ps文件格式有哪些
    小编给大家分享一下ps文件格式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、PSDPhotoshop 格式 (PSD) 是默认的文件格式,扩展名为“.p...
    99+
    2023-06-15
  • mongodb单表过大会导致哪些问题
    当MongoDB单表过大时,可能会导致以下问题: 性能下降:随着数据量的增加,单表的查询和写入操作会变得越来越慢,因为数据库需要...
    99+
    2024-04-09
    mongodb
  • 使用JSON格式处理数据时应该注意的问题有哪些
    小编给大家分享一下使用JSON格式处理数据时应该注意的问题有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!根据项目的需要,我...
    99+
    2024-04-02
  • pxc的问题有哪些
    本篇内容介绍了“pxc的问题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • ThreadLocal的问题有哪些
    这篇文章主要介绍“ThreadLocal的问题有哪些”,在日常操作中,相信很多人在ThreadLocal的问题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Thread...
    99+
    2024-04-02
  • Flex日期格式化的具体格式有哪些
    这篇文章给大家分享的是有关Flex日期格式化的具体格式有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Flex日期格式化在Flex中在类是datagrid等list控件使用labelFunction格式各种文...
    99+
    2023-06-17
  • mongodb存储图片的方式有哪些
    在 MongoDB 中,可以使用以下几种方式来存储图片: 将图片以二进制数据的形式存储在 MongoDB 文档中:可以将图片转换...
    99+
    2024-02-29
    mongodb
  • JavaScript的注释格式有哪些
    JavaScript的注释格式有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。JavaScript的注释格式有三种,分别是:1、通过“”符...
    99+
    2024-04-02
  • JavaScript的文件格式有哪些
    这篇文章主要介绍“JavaScript的文件格式有哪些”,在日常操作中,相信很多人在JavaScript的文件格式有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaScript的文件格式有哪些”的疑...
    99+
    2023-06-26
  • HTML的标签格式有哪些
    这篇“HTML的标签格式有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“HTML的标签...
    99+
    2024-04-02
  • MUL指令的格式有哪些
    这篇“MUL指令的格式有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MUL指令的格式...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作