暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

为什么要用mongo存储数据/好处?

原创 Oracle 2022-10-30
1403

1.适合存储对象(即Object)和JSON形式的数据,字段格式自由

2.查询表达式丰富,可以轻易查询文档中内嵌的对象和数组

//查询数组
db.blog.find({"comments":{"name":"ickes","score":{"$gt":5}})
//利用了正则表达式,查询内嵌文档某个字段包含某个字符串
db.getCollection("goal_report").find({"goals":{"$elemMatch":{"goal":{"$regex":/价值目标/}}}})

mongodb采用了特有的查询方式,和mysql差距大


不存在sql注入的问题,安全性高 客户端提交数据时,可以把一些sql语句加入其中,让数据库执行这些语句来获得违规权限或内部信息,这就是sql注入 而mongodb在执行查询语句时,会把输入的值组装成一个BSON对象(注入语句作为BSON对象的value),而不是字符串,因此注入的语句不会得到执行

可以任意添加字段,灵活性高,更新方便

自动分片可以将数据分散到不同机器上形成集群,读写效率高

将热点数据加载到内存,查询会非常快 mongo把经常读取的数据会被加载到内存中,这样提高查询效率

mongodb使用的是内存映射存储引擎,即Memory Mapped Storage Engine,简称MMAP,MMAP可以把磁盘文件的一部分或全部内容直接映射到内存,这样文件中的信息位置就会在内存中有对应的地址空间,把磁盘IO操作转换成内存操作。

内存映射文件是OS通过mmap在内存中创建一个数据文件,这样就把文件映射到一个虚拟内存的区域。

操作系统通过mmap来把进程所需的所有数据映射到这个地址空间(红线),然后再把当前需要处理的数据映射到物理内存(灰线)

当进程访问某个数据时,如果数据不在虚拟内存里,触发page fault,然后OS从硬盘里把数据加载进虚拟内存和物理内存

如果物理内存满了,触发swap-out操作,这时有些数据就需要写回磁盘,如果是纯粹的内存数据,写回swap分区,如果不是就写回磁盘



原文链接:https://blog.csdn.net/gsgsfty/article/details/119733464

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论