设为首页 收藏本站
查看: 820|回复: 0

[经验分享] MongoDB循序渐进之[入门]

[复制链接]

尚未签到

发表于 2015-7-8 09:16:35 | 显示全部楼层 |阅读模式
     初识 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 (from "humongous") is a scalable, high-performance, open source NoSQL database. Written in C++, MongoDB features:
     按照官方的说法,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。
DSC0000.png
  

四、总结:
  一句话:NoSQL数据库是未来的一种发展需求和趋势,但是不能替代传统的关系型数据库,只是技术需求发展到一定程度的补充。
  两句话:NoSQL数据库有很多,但目前MongoDB是做的比较好的,值得学习。
  三句话:本人是个技术宅,对这种将要改变某些事情的技术比较感兴趣。
  
  

五、文章相关:
  注解:
  [1]八种主流NoSQL数据库系统对比
  http://database.iyunv.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/

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-84373-1-1.html 上篇帖子: mongoDB研究笔记:写关注 下篇帖子: MongoDB 使用经验笔记
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表