初识 MongoDB 是在2012年,接触MongoDB是源自 Nodejs ,至于是怎么接触Nodejs ,我倒是忘记了,不过应该是2012年4月份左右吧,估计是在哪个帖子里看到的然后被吸引了吧,然后就一发不可收拾。为什么接触了 Nodejs 就接触了MongoDB呢,是因为在Nodejs开发过程中好多地方都用到了MongoDB,例如Nodejs的SESSION就用到MongoDB,因为Nodejs本身的SESSION管理有问题,必须依赖第三方的数据库,但当时Nodejs在驱动方面还难以满足MySQL、SQLServer、Oracle这样的大型强事务型数据库,因为Nodejs是异步的,所以大部分人选择了当时比较流行的NoSQL数据库MongoDB,简单、高效,很容易上手,而今证明这个选择是正确的,因为很多拥有大型数据存储需求的公司都开始转向MongoDB,这得益于它的很多特性,因此在对大数据量进行才处理的时候,性能要优于其他大型的事务型数据库。其实文档型数据库发展也很快,最近几年也出来了很多,例如Cassandra、Mongodb、CouchDB、Redis、Riak、Membase、Neo4j和HBase[1],但是MongoDB是目前来说最火的,新浪就在用。

在Nodejs中使用MongoDB是很简单的一件事情,有各种各样的驱动供你选择,你不必担心事务,也不必担心有复杂的配置,双击一个批处理文件(WindowsOS)运行即可。但是既然是要学习MongoDB那我们就必须弄清楚三个问题:一、它是什么,二、它有哪些特性,三、它适用于什么环境,四、它的原理是什么,五、它未来的发展怎样。那么接下来我们就循序渐进的去了解,学习,应用,研究,并有可能改进它。

一、简介:

官方首页有一句话:

按照官方的说法,MongoDB是一种可扩展的高性能的开源的面向文档(document-oriented)的数据库,采用C++开发。注意mongo不是mango(芒果),这个词是从humongous中截取出来的,其野心不言而明,直指海量数据存储。和其他很多NoSQL不太一样,MongoDB背后有一个专门的商业公司在提供支持和推广,有点类似MySQL AB的模式。

前面已经说了像MySQL、SQLServer、Oracle一样MongoDB也是数据库,但是它又不同于以上三种常规的数据库,它是面向文档型的数据库,那么什么是文档呢?很明显这不是我们常见的word文档。这里说的文档,是一种可以嵌套的数据集合。从关系数据库的范式的概念来说,嵌套是明显的反范式设计。范式设计的好处是消除了依赖,但是增加了关联,查询需要通过关联两张或者多张表来获得所需要的全部数据,但是更改操作是原子的,只需要修改一个地方即可。反范式则是增加了数据冗余来提升查询性能,但更新操作可能需要更新冗余的多处数据,需要注意一致性的问题。

MongoDB的面向文档采用的是BSON,一种类似JSON的格式,但是是二进制序列化的。如上面提到的blog的文章和评论,可以做如下设计:

{ 'id':1, 'author':'NinGoo', 'title':'MongoDB入门', 'content':'内容文本,comment:[ { 'comment-author':'这是回复人1', 'comment-content':'回复内容' } ,{ 'comment-author':'这是回复人2','comment-content':'回复内容' }]
}

1. 相关数据存放在一起,针对性的查询可以消除join,性能比分散存储要高且方便。
2. 整个结构清晰自解析。所有字段名和值都存储,所以不需要提前设计结构,key的名字和数目可以任意指定,也就是所谓的schema-free。
3. 由于字段名在每一行每一列都需要重复存在,会带来一些额外的存储消耗,这在海量数据及字段较多的时候也需要考虑。
4. 一个document的长度有限,1.7.2之前是4MB,目前是8MB,以后可能增长到32MB。如果有更大的数据,可以使用MongoDB底层的GridFS直接作为文件存储。
5. 如果需要查找某个评论者的所有评论,则相对困难。当然,MongoDB支持任意key的索引,这也不是什么大问题。
   像上面的一个结构,为一个文档(document),相当于关系数据库中的一行记录,多个文档组成一个集合(collection),相当于关系数据库的表。多个集合(collection),逻辑上组织在一起,就是数据库(database),一个MongoDB实例支持多个数据库(database)。
   大部分的NoSQL产品,为追求性能,一致性等,一般只能支持简单的基于row-key的单条或者范围查询,但是MongoDB可以针对任意列的key创建索引,甚至是内嵌文档里的key,从支持的查询的灵活性上来看,更接近传统的关系数据库,同时还能在性能上向NoSQL看齐,加上支持复制,自动分片和Map/Reduce等功能,非常的吸引眼球,正在成为一款热门的海量存储产品。其背后的商业支持公司10gen,也正在不遗余力的推广,前不久还在北京专门组织了一场技术交流会。在其首页列举的典型客户里,包括foursquare,sourceforge,github等知名互联网公司和应用,当然,也包括淘宝网。

二、安装试用:

Windows平台:

1.去MongoDB downloads page下载最新版本的压缩包

2.解压压缩包到任意位置,例如mongodb-win32-i386-2.2.1.zip

3.把路径加入到环境变量,例如D:\mongodb-win32-i386-2.2.1\bin

4.打开CMD,运行下面一个简单的命令就启动了服务,默认端口27707

mongo --dbpath d:\test\mongodb\data

5.测试一下,运行以下命令

> db.test.save( { a: 1 } )> db.test.find()

当然了,如果觉着这样麻烦也可以把MongoDB做成系统服务:

1.给MongoDB做一个配置文件,包含MongoDB的各种参数

logpath=C:\mongodb\log\mongo.log > C:\mongodb\mongod.cfg

2.安装为系统服务

--config C:\mongodb\mongod.cfg --install

3.控制MongoDB服务

net start MongoDB  启动
net stop MongoDB   停止

4.移除服务

C:\mongodb\bin\mongod.exe --remove

当然,服务的启动、关闭,和自启动是否,禁用是否等可以在Windows系统的服务管理工具里面配置。

MongoDB在Windows有三个版本:MongoDB for Windows Server 2008 R2 edition、MongoDB for Windows 64-bit、MongoDB for Windows 32-bit,安装方法大同小异,只是在Windows32位平台下MongoDB的数据库最大不能超过2G。

Linux平台以CentOS为例

1.配置YUM

32位平台

[10gen]
name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
gpgcheck=0
enabled=1

64位平台

[10gen]
name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/i686
gpgcheck=0
enabled=1

2.安装包

yum install mongo-10gen mongo-10gen-server

3.配置MongoDB

/etc/mongod.conf

4.控制MongoDB服务

service mongod start   启动
chkconfig mongod on    跟随系统启动
service mongod stop    停止
service mongod restart 重启

5.测试一下

使用mongo命令进入MongoDB环境,然后运行:

> db.test.save( { a: 1 } )> db.test.find()
三、小试牛刀:

如果你按照上面的例子成功安装了MongoDB的话那我们接下来就可以小试牛刀了,

例如你可以这样来保存一个用户:

>db.users.insert( { _id : "alex", name: { first:"Alex", last:"Benisson" }, karma : 1.0 } )

也可以像这样来查询一个帖子:

> db.posts.findOne( { _id : ObjectId("4e77bb3b8a3e000000004f7a") } );

是不是很Happy?没有复杂的SQL脚本,也没有麻烦的表关联,很带劲。

如果没有安装好,那你稍后再慢慢捣鼓,不过这不意味着你就玩不了MongoDB,官方很人性化的提供了一个在线试用的平台:http://www.mongodb.org/downloads# 在这里你可以使用MongoDB的所有命令来试用,Very exciting。

四、总结:

一句话:NoSQL数据库是未来的一种发展需求和趋势,但是不能替代传统的关系型数据库,只是技术需求发展到一定程度的补充。

两句话:NoSQL数据库有很多,但目前MongoDB是做的比较好的,值得学习。

三句话:本人是个技术宅,对这种将要改变某些事情的技术比较感兴趣。

五、文章相关:

注解:

[1]八种主流NoSQL数据库系统对比

http://database.51cto.com/art/201109/293029.htm

参考文档:

淘宝网高级数据库专家宁海元白话MongoDB系列文章

http://www.ningoo.net/html/2011/mongodb_in_a_nutshell_1.html

更详细的安装过程

http://cn.docs.mongodb.org/manual/installation/

更多NoSQL数据库

http://nosql-database.org/

转载于:https://www.cnblogs.com/dolphinboy/archive/2012/11/08/2760177.html

MongoDB循序渐进之[入门]相关推荐

  1. MongoDB学习笔记(入门)

    MongoDB学习笔记(入门) 一.文档的注意事项: 1.  键值对是有序的,如:{ "name" : "stephen", "genda" ...

  2. Mongodb最基础入门教程

    Mongodb最基础入门教程 如果想了解一下redis的入门教程,可以去看一下我的上一篇博客 Mongodb的安装大家可以参考一下其他博主的博客,这里我就不做介绍了.不过值得注意的是,在Linux版本 ...

  3. MongoDB:快速入门,掌握这些刚刚好!

    虽说现在关系型数据库还是主流,但是面对某些需求的时候,需要非关系型数据库来补充它,学习一个主流的NoSQL数据库还是很有必要的.MongoDB是一个功能丰富的NoSQL数据库,本文整理了它最常用的部分 ...

  4. MongoDB【快速入门】

    1.MongDB 简介 MongoDB(来自于英文单词"Humongous",中文含义为"庞大")是可以应用于各种规模的企业.各个行业以及各类应用程序的开源数据 ...

  5. MongoDB安装和入门

    转载来源 :MongoDB快速入门 : https://mp.weixin.qq.com/s/dgDyJ0PwtHswGykX9UED6w 1 进入MongoDB的世界 随着大数据时代的到来,数据急速 ...

  6. 【MongoDB 快速上手】别找了,主流开源分布式系统存储系统三剑客:FastDFS、Minio、MongoDB零基础入门实战教程!

    MongoDB用起来 - 快速上手&集群和安全系列 课程目标 1 MongoDB相关概念 1.1 业务应用场景 1.2 MongoDB简介 1.3 体系结构 1.4 数据模型 1.5 Mong ...

  7. 【MongoDB】从入门到精通mongdb系列学习宝典,想学mongodb小伙伴请进来

    最近一段时间在学习MongoDB,在学习过程中总共编写了四十余篇博客.从mongodb软件下载到分片集群的搭建. 从理论讲解到实例练习.现在把所有博客的内容做个简单目录,方便阅读的小伙伴查询. 一. ...

  8. MongoDB简介与入门

    中文官网简介: MongoDB(来自于英文单词"Humongous",中文含义为"庞大")是可以应用于各种规模的企业.各个行业以及各类应用程序的开源数据库.作为 ...

  9. NoSQL(MongoDB) + GraphQL 快速入门环境和资料

    如果你想了解NoSQL DB和GraphQL,推荐一个非常好的资料.依照文档里边的步骤,在Atlas上免费搭建一个使用到MongoDB和GraphQL的web app项目.详细的搭建步骤来自Mongo ...

最新文章

  1. 查看mongodb数据路径_【数据库】mongodb数据库安装
  2. 姚期智:这是一个“前所未有”的金融科技与计算机科学的黄金时代
  3. 关于python中requests模块导入问题-python引入requests模块报错
  4. PAT甲级1140 Look-and-say Sequence:[C++题解]统计连续个数
  5. TCP/IP的层次结构以及各层数据封装的过程 (一)
  6. django-5-自定义模板过滤器及标签
  7. 机器学习必学10大算法
  8. 程序员面试金典 - 面试题 02.04. 分割链表
  9. a20隐藏底部按钮及隐藏状态栏和虚拟按键栏
  10. 鸿蒙hms在哪儿更新,原创 华为鸿蒙系统已开始实施!华为EMUI10.1再更新:HMS将决定战略方向...
  11. mongodb的分布式集群(4、分片和副本集的结合)
  12. Selenium菜鸟手册
  13. [Android] 开发一款软件我学到了些什么?
  14. 用Attiny85控制水泵浇花
  15. 2017计算机知识竞赛题,2017网络安全知识竞赛题库(中学组)word版
  16. webdriver爬虫#document问题
  17. LazyT——C#基础知识回顾
  18. Spring boot连接oracle数据库
  19. Origin1——设置坐标轴、字体、标签等
  20. 单元覆盖测试排除某些类烧苗_智慧树人体生理学第一单元章节测试网课答案选修课慕课答案...

热门文章

  1. GIS应用技巧之缓冲区分析
  2. 地震偏移成像matlab,地震偏移成像基本原理概述.ppt
  3. 逆向破解_iOS_学习笔记_1
  4. 简单面试题,但是容易忘记
  5. IE低版本提示下载新的浏览器js--IEOutTips.zip
  6. AE TypeMonkey
  7. excel单元格斜线_制作excel双斜线表头的新方法,完美解决拖动变形的问题
  8. 开源软件总体拥有成本指南
  9. Win7旗舰版电脑插耳机没声音怎么解决
  10. android aidl混淆代码,Android代码混淆