MongoDB存储

数据结构

  • mongodb是文档型数据库,使用BSON格式保存数据。
  • mongodb使用B-树,每个节点既保存数据又保存索引,搜索时相当于二分查找。

 

ObjectId

每个document中必须有一个_id字段,如果在实体类上没有单独设置_id字段,mongo会自动生成一个_id字段,类型是ObjectId。如:"_id": ObjectId("628457e73c79063221a67e2f")

"628457e73c79063221a67e2f",这个24位的字符串,实际上是有一组十六进制的字符构成,总共用了12字节的存储空间。包括:

  • 4字节的时间戳(可以用于排序)
  • 3字节的机器标识码
  • 2字节的PID
  • 3字节的自增计数器生成的随机数

 

mongo排序时内存大小限制

mongodb处理排序时,如果排序的字段没有建立索引,会将全表都丢到内存中处理。而内存的大小并不是无限使用的。

在mongodb 版本4.3以前,内存限制默认是32M,版本4.3以后,默认是100M,一旦数据量超过最大限制,就会报错。

通过命令行可以参考内存排序限制:

#登录命令
/usr/local/qingteng/mongodb/bin/mongo --host localhost --port 27017 -u qingteng -p fMElKUz36MY00ceg --authenticationDatabase admin
 
#登录成功过后,执行命令
db.runCommand({
    getParameter: 1,
    "internalQueryExecMaxBlockingSortBytes": 1
})

执行结果如下:

注意:如果mongodb版本是4.3以上版本,上面的参数要改为 internalQueryMaxBlockingSortMemoryUsageBytes

在执行 aggregate 操作时,如果超过了内存限制,可以使用 allowDiskUse 选项,将选项允许大部分的 aggregate 操作将数据写入一个临时磁盘空间。

 

posted @ 2022-06-03 18:01  仅此而已-远方  阅读(956)  评论(0编辑  收藏  举报