Redis和MongoDB的区别(面试受用)

Redis和MongoDB的区别(面试受用)

大家好,又见面了,我是全栈君。

项目中用的是MongoDB,但是为什么用其实当时选型的时候也没有太多考虑,只是认为数据量比较大,所以采用MongoDB。

最近又想起为什么用MongoDB,就查阅一下,汇总汇总:

之前也用过redis,当时是用来存储一些热数据,量也不大,但是操作很频繁。现在项目中用的是MongoDB,目前是百万级的数据,将来会有千万级、亿级。

就Redis和MongoDB来说,大家一般称之为Redis缓存、MongoDB数据库。这也是有道有理有根据的,

Redis主要把数据存储在内存中,其“缓存”的性质远大于其“数据存储“的性质,其中数据的增删改查也只是像变量操作一样简单;

MongoDB却是一个“存储数据”的系统,增删改查可以添加很多条件,就像SQL数据库一样灵活,这一点在面试的时候很受用。

Mongodb与Redis应用指标对比

MongoDB和Redis都是NoSQL,采用结构型数据存储。二者在使用场景中,存在一定的区别,这也主要由于
二者在内存映射的处理过程,持久化的处理方法不同。MongoDB建议集群部署,更多的考虑到集群方案,Redis
更偏重于进程顺序写入,虽然支持集群,也仅限于主-从模式。

Redis和MongoDB的区别(面试受用)

MongoDB语法与现有关系型数据库SQL语法比较

MongoDB语法            MySql语法

db.test.find({'name':'foobar'})             <==>          select * from test where name='foobar'

db.test.find()                                      <==>          select *from test

db.test.find({'ID':10}).count()             <==>          select count(*) from test where ID=10

db.test.find().skip(10).limit(20)          <==>          select * from test limit 10,20

db.test.find({'ID':{$in:[25,35,45]}})     <==>          select * from test where ID in (25,35,45)

db.test.find().sort({'ID':-1})                 <==>          select * from test order by IDdesc

db.test.distinct('name',{'ID':{$lt:20}}) <==>          select distinct(name) from testwhere ID<20

db.test.group({key:{'name':true},cond:{'name':'foo'},reduce:function(obj,prev){prev.msum+=obj.marks;},initial:{msum:0}})     <==>     select name,sum(marks) from testgroup by name

db.test.find('this.ID<20',{name:1})    <==>           select name from test whereID<20

db.test.insert({'name':'foobar','age':25})    <==>       insertinto test ('name','age') values('foobar',25)

db.test.remove({})                                     <==>       delete * from test

db.test.remove({'age':20})                        <==>       delete test where age=20

db.test.remove({'age':{$lt:20}})                <==>        delete test where age<20

db.test.remove({'age':{$lte:20}})              <==>        delete test where age<=20

db.test.remove({'age':{$gt:20}})              <==>         delete test where age>20

db.test.remove({'age':{$gte:20}})            <==>         delete test where age>=20

db.test.remove({'age':{$ne:20}})             <==>         delete test where age!=20

db.test.update({'name':'foobar'},{$set:{'age':36}})<==> update test set age=36 where name='foobar'

db.test.update({'name':'foobar'},{$inc:{'age':3}})<==> update test set age=age+3 where name='foobar'

模糊查询:$regex

db.test.find({"name":{$regex:"aaa"}})

分组个数过滤

db.getCollection('id_mapper').aggregate([{$group:{ _id :"$contract_id",count:{$sum:1}}},{$match:{count:{$gt:1}}}])

判断是否为空

db.getCollection('id_mapper').find({"sinocardid":{$in:[null]}})
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/111446.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 用户态与内核态之间切换详解[通俗易懂]

    用户态与内核态之间切换详解[通俗易懂]用户态切换到内核态CPU中有一个标志字段,标志着线程的运行状态。用户态和内核态对应着不同的值,用户态为3,内核态为0.每个线程都对应着一个用户栈和内核栈,分别用来执行用户方法和内核方法。用户方法就是普通的操作。内核方法就是访问磁盘、内存分配、网卡、声卡等敏感操作。当用户尝试调用内核方法的时候,就会发生用户态切换到内核态的转变。切换流程:1、每个线程都对应这一个TCB,TCB中有一个TSS字段,存储着线程对应的内核栈的地址,也就是内核栈的栈顶指针。2、因为从用户态切换到内核态时,需要将用户态.

  • python pyc文件使用_python怎么打开pyc文件

    python pyc文件使用_python怎么打开pyc文件首先使用百度搜索“ultraEdit”,进入到如图所示的官网下载文件。进入到ultraEdit官网的下载界面,我们选择如图所示的试用版本下载,我们进入到具体的下载界面后,点击下载中文安装版。下载好,我们使用鼠标左键双击软件安装包,进入到安装界面后点击安装,使用默认安装就可以了,无需修改安装文件路径。安装好了后,我们在电脑桌面使用鼠标左键双击ultraEdit的快捷方式,打开后进入到ultraEdi…

  • 51单片机学习笔记:合并1602和12864液晶排插接口

    51单片机学习笔记:合并1602和12864液晶排插接口 今天成功合并1602和12864液晶排插接口! 码出来分享下 上面这2个图是1602和12864液晶的排插接口,一般的单片机开发板上都会有仔细观察发现他们的插口大多是相同的, 对于第三脚的对比度调节,1602和12864液晶在硬件上是相反的(1602是低电位方向对比度增强,12864是高电位方向对比度增强),但他们接口位置相同,所以一个10K左右的3脚电位器…

    2022年10月20日
  • mac上的VSCode快捷键

    mac上的VSCode快捷键Command+Shift+N打开新窗口Command+Shift+P/F1显示命令面板Command+\编辑器分屏Command+N新建文件Command+O打开文件command+,打开用户设置shift+option+F格式化代码Command+U撤销上一个光标操作Command+B显示、隐藏侧边栏Command+Shift+F显示搜索框Ctrl+Shift+G显示Git面板Command+

  • 初次尝试使用VisualSFM记录

    初次尝试使用VisualSFM记录  对于SFM一直觉得高大上又神秘,一年前粗略的了解过一下,今年有时间尝试深入了解SFM,对于初学者来说,VisualSFM真的时非常好的感受SFM的免费软件,于是通过其他博客的指导(没去看官方的英文版,容易犯困),做了一个3D模型出来,感觉还挺好玩,记录一下。  实际上,VisualSFM只做了一部分工作,优化是用MeshLab做的,所以分两个环节:   1.VisualSF…

  • Codeforces 459E Pashmak and Graph(dp+贪婪)

    Codeforces 459E Pashmak and Graph(dp+贪婪)

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号