欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

MongoDB学习笔记魅力所在

程序员文章站 2024-02-08 18:49:58
...

MongoDB是现今最火的NoSQL之一,暑假终于有时间把《MongoDB权威指南》和NoSQL Fan上关于它的一些文章浏览了一些,下面我简单总结

MongoDB是现今最火的NoSQL之一,暑假终于有时间把《MongoDB权威指南》和NoSQL Fan上关于它的一些文章浏览了一些,下面我简单总结几点MongoDB吸引人的地方。关于MongoDB的基本操作,运维,使用,大家可以自己去看书或者学习资料。

1. 较之别的NoSQL

《MongoDB: The Definition Guide》一书中说,“要是不能用的话,再牛的技术也是空谈,MongoDB致力于容易上手、便于使用”。前段时间,阿里的一位搞HBase的师兄,春辉,花了两个多小时,深入浅出讲解了HBase的一些东西,感触很深。相比于HBase这样一个基于HDFS的Big Data的实现,它的架构和层次更复杂。而对于Facebook一手捧红而今又不再维护了的Cassandra,难免让人觉得不太promising了。

MongoDB的社区还是相当活跃的。MongoDB是一个面向文档的数据库,目前由10gen开发并维护,它的功能丰富,齐全。

MongoDB使用JSON的变种BSON作为内部存储的格式和语法。针对MongoDB的操作都使用JSON风格语法,客户端提交或接收的数据都使用JSON形式来展现。相对于SQL来说,更加直观,容易理解和掌握。

Schema-less,支持嵌入子文档:MongoDB是一个Schema-free的文档数据库。一个数据库可以有多个Collection,每个 Collection是Documents的集合。Collection和Document和传统数据库的Table和Row并不对等。无需事先定义 Collection,随时可以创建。

CRUD更加简单,支持in-place update:只要定义一个数组,然后传递给MongoDB的insert/update方法就可自动插入或更 新;对于更新模式,MongoDB支持一个upsert选项,即:“如果记录存在那么更新,否则插入”。MongoDB的update方法还支持 Modifier,通过Modifier可实现在服务端即时更新,省去客户端和服务端的通讯。这些modifer可以让MongoDB具有和Redis、 Memcached等KV类似的功能:较之MySQL,MonoDB更加简单快速。Modifier也是MongoDB可以作为对用户行为跟踪的容器。在实际中使用Modifier来将用户的交互行为快速保存到MongoDB中以便后期进行统计分析和个性化定制。

性能高效,速度快: MongoDB使用c++/boost编写,,在多数场合,其查询速度对比MySQL要快的多,对于CPU占用非常小。部署也很简单,对大多数系统,只需下载后二进制包解压就可以直接运行,几乎是零配置。

2. 支持多种复制模式

MongoDB支持不同的服务器间进行复制,包括双机互备的容错方案。Master-Slave是最常见的。通过Master-Slave可以实现数据的备份。在我们的实践中,我们使用的是Master-Slave模式,Slave只用于后备,实际的读写都是从Master节点执行。Replica Pairs/Replica Sets允许2个MongoDB相互监听,实现双机互备的容错。

3. MongoDB内融合的一些东西

MongoDB的shell命令全面支持js,甚至比js多一些类型,而且可以存储js函数和变量。MongoDB自带Mapreduce的功能,只是这个MapReduce功能只支持js语法(函数map和reduce是js写的),且js引擎的实现导致一个实例只能运行一个map/reduce线程。MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。MongoDB不支持事务级别的锁定,对于某些需要自定义的“原子性”操作,可以使用Server side脚本来实 现,此时整个MongoDB处于锁定状态。Map/Reduce也是MongoDB中比较吸引人的特性。Map/Reduce可以对大数据量的表进行统 计、分类、合并的工作,完成原先SQL的GroupBy等聚合函数的功能。并且Mapper和Reducer的定义都是用Javascript来定义服务 端脚本。此外,MongoDB shell下支持的正则表达式是Perl兼容的PCRE。MongoDB支持java驱动,可以结合Python,PHP,Ruby这些脚本语言使用,如PyMongo。

4. GridFS

GridFS用于MongoDB中存储大二文件,基本思想是将将文件文成很多块,每块作为一个单独的文档存储。只要使用./mongofile put filename,文件就会被存在GridFS内,经md5处理,存在MongoDB的fs.files数据库内。GridFS可以应用于存视频,图片,而MongoDB有Sharding和Replica Set的支持,还顺便解决了分布存储的问题,所以很诱惑人。附上一个应用例子: 基于MongoDB GridFS的图片存储

5. 产品的代替和演变

LAMP(linux+apache+mysql+php)是以前web开发中的一盏明灯。而随着web应用规模的扩大,越来越多的Nginx开始取代apache,缓存层将mysql的功能逐渐弱化,越来越多的NoSQL产品以其简单灵活和高性能向MySQL的地位发起挑战,由全新的组合:Unix系列系统,加node.js,再加上MongoDB组成一个新的web开发框架。

MongoDB学习笔记魅力所在