最近项目中用到了mongodb,于是简单学习了一下。之前以为mongodb和redis是同样的方式存储的,真正学习了才发现二者还是有很大差异的。
MONGODB简介
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。
mongodb的数据结构是bson格式,bson格式即是json的二进制转换格式。在mongodb中存在一个js引擎,
数据通过json的格式写入到mongodb中,经过js引擎的处理,最终以bson格式进行存储。
因此,在mongodb数据库中可以直接使用js的语法进行操作数据库。在查询时,通过js引擎将数据转换为js对象进行展示。
如图:
在mongodb中,一条记录被称作一篇文档,因此也叫文档型数据库。一个表被称为collection。
每条记录都是以json的形式展示,同时,每篇文档都可以有自己独特的结构(正如json对象可以有自己独特的属性和值是一样的)
mysql、mongodb、redis的对比
mysql:结构型数据库,数据存储的字段都是实现定义好的,必须按照规定的数据结构进行存储。同时,数据统一存储在硬盘上,具有性能瓶颈。
支持事务。适用于数据一致性要求比较强的情况。
mongodb:介于关系型和非关系型之间的数据库。数据以bson格式进行存储。每个记录都可以有自己独特的结构。
且mongodb具有强大的查询语句,具有索引等关系型数据库的特点。MongoDB数据存在内存,由linux系统mmap实现,
当内存不够时,只将热点数据放入内存,其他数据存在磁盘。不具有性能瓶颈。不支持事务。适用于网站数据,数据量大且没有固定结构,比如电影评论。
redis:完全的非关系型数据库。ke-value形式存储在内存中。具有持久化功能。没有性能瓶颈。
支持的数据结构丰富,包括hash、set、list等。不能很好的支持事务。适用于性能要求较高,但是数据一致性要求不高的情况。