Mongodb是一个很是有名的缓存数据库,和它名气至关的还有redis和hbase。笔者以前使用过redis,memcache和elasticsearch,借着工做机会,正好能够好好学习一下mongodb。php
笔者在百度搜索下的mongodb官网上没有看到直接的下载连接,反而还要注册,比较麻烦。最后是在一篇博文里找到了直接的下载地址。直接选择一个较新的以msi为后缀的下载地址下载便可(笔者的环境是windows7 64位环境)。php的mongodb扩展也可搜索下载便可。在windows下每次启动mongodb须要在cmd进入对应目录启动,比较繁琐。按照这篇博文的作法,能够将mongodb注册为windows的一个服务,使用起来就很是的方便了。html
笔者使用的ide是netbean8.2,在里面插件管理搜索mongodb能够找到一款小型的mongodb可视化插件,对于简单的mongodb管理已经足够了。redis
MongoDB 是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。(来源:百度百科)sql
让咱们来仔细分析下定义:mongodb
1)分布式文件存储。 这个名词听着就很厉害。顾名思义,就是存储的内容不在一台主机上,而是能够有多个节点主机,数据分散存在上面。 经过进一步查资料了解到, 对于客户端来讲,无需知道数据被拆分了,也无需知道服务端哪一个分片对应哪些数据。数据在分片以前须要运行一个路由进程,进程名为mongos。这个路由器知道全部数据的存放位置,知道数据和片的对应关系。好吧,的确很神奇。具体能够参考《浅谈MongoDB数据库分布式存储管理》。对于redis,也有相似的集群和分布式解决方案,好比Redis Sharding(应用时间较长)和Redis Cluster(redis3.0推出的官方解决方案),参考知乎的这个回答。数据库
2)介于关系数据库和非关系数据库。windows
关系型数据库是指mongodb有着相似于传统关系型数据库的组织结构。参考下面的对比:数组
RDBMS: 数据库(DATABASE) ==》 表(TABLE) ==》 行(ROW) ==> 列(COLUMN)==》 表联合(TABLE JOI) ==>主键(PRIMARYKEY)
缓存
MONGODB:数据库(DATABASE) ==》 集合(COLLECTION) ==》 文档(DOCUMENT) ==> 字段(FIELD) ==》内嵌文档(embeded docment) ==>主键.key为_id(PRIMARYKEY)服务器
咱们能够用相似于sql语句中的增删改查的语句去操做mongodb,虽然有些麻烦,但仍是能够很快上手的。
另外一方面。mongodb也是一个非关系型数据库。mongodb其实没有严格意义的行和列,而是将数据存储成文档。数据结构由键值(key=>value)对组成,MongoDB 文档相似于 JSON 对象。字段值能够包含其余文档,数组及文档数组。
以上是mongodb3.0的数据存储模型。mongodb3.0开始支持WiredTiger存储引擎,In-Memory引擎也支持不过是企业级别须要收费。如下图标作个对比:
能够看到WiredTiger数据引擎,支持文档级锁(多个客户端能够并发的修改一个集合中多个不一样的文档),提升了并发性。
对于持久化,WiredTiger的作法是:在一个操做开始时,WiredTiger会拷贝该时间点的事务数据快照(snapshot)。快照表示的是内存中数据的一份一致性的视图。WiredTiger也会以数据一致的方式将快照中的全部数据写到磁盘全部数据文件中,而且记录一个检查点(checkpoint),这个检查点还能够扮演恢复点(recovery points)的角色,当MongoDB崩溃重启后,MongoDB能够从最后有效的检查点进行恢复。
众所周知,mongodb的一大优点就是可使用磁盘来存储数据。那么mongodb和操做系统,磁盘的数据交换机制是怎样的呢?参考这篇文章获得答案。虽然介绍的是MMAP存储引擎的机制。但也大同小异。利用操做系统的内存映射,映射到一个虚拟内存的区域。虚拟内存再对应物理内存,若是访问的数据不在物理内存中,则将数据从磁盘加载到物理内存中。
优势:
缺点:
以上,只是我初次使用mongodb的一点学习总结,不少地方不完善,原理也不是很透彻,甚至很多是直接引用网上别人的文章语句。但我以为,这也是一个本身学习思考的过程,有必要记录下来。毕竟信息爆炸的时代,不是每一个人都有时间和有必要去重读官方文档和深刻了解细节,毕竟本身的理解尚未到达那个高度,容易掉入纸上谈兵的陷阱。在之后具体项目用到的时候再进行学习和总结也会更加的深入一些。
参考文档: