《MongoDB入门讲解.ppt》由会员分享,可在线阅读,更多相关《MongoDB入门讲解.ppt(55页珍藏版)》请在三一办公上搜索。
1、nosql数据库_MongoDB,2015-10-02,CONTENTS,目录,1,2,3,4,MongoDB简介,MongoDB下载安装,MongoDB应用,GridFS,存取数据机制,6,7,8,9,服务器管理,MongoDB总结,MongoDB与mysql对比,复制与分片,5,初步了解MongoDB,认识什么是mongoDB,为什么要用MongoDB,MongoDB特性,第 一 节,返回,MongoDB简介,什么是MongoDB?MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格
2、式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。MongoDB的特点?高性能、易部署、易使用,存储数据非常方便,MongoDB简介,MongoDB主要功能特性?面向集合存储,易存储对象类型的数据。模式自由。支持动态查询。支持完全索引,包含内部对象。支持查询。支持复制和故障恢复。使用高效的二进制数据存储,大型对象(如视频等)。自动处理碎片,以支持云计算层次的扩展性 支持RUBY,PYTHON,JAVA,C+,PHP等多种语言。文件存储格式为BSON(
3、一种JSON的扩展)可通过网络访问,MongoDB简介,使用原理所谓“面向集合”(Collenction-Oriented),意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定义任何模式(schema)。模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。存储在集合中的文档,被存储为键-值对的形式。键用
4、于唯一标识一个文档,为字符串类型,而值则可以是各种复杂的文件类型。我们称这种存储形式为BSON(Binary JSON)。,MongoDB简介,为什么要用MongoDB?MongoDB的设计是要结合键值存储和关系型数据库的最好特性。键值存储,因为非常简单,所以速度极快而且相对容易伸缩。关系型数据库较难伸缩,至少很难水平伸缩,但拥有富数据模型和强大的查询语言。如果MongoDB能介于两者之间,就能成为一款易伸缩、能存储丰富数据结构、提供复杂查询机制的数据库。在使用场景方面,MongoDB非常适合用做以下应用程序的主要数据存储:Web应用程序、分析与记录应用程序,以及任何要求有中等级别缓存的应用程
5、序。此外,由于它能方便地存储无Schema数据,MongoDB还很适合保存事先无法知晓其数据结构的数据。,了解如何获得MongoDB软件,包括如何为自己的环境选择正确的版本,如何在Windows和linux中安装和检测运行。,第 二 节,返回,MongoDB下载安装,选择正确版本?MongoDB所使用的版本管理相当简单:偶数号为稳定版,奇数号为开发版。注意:32 位产品与 64 位产品之间的区别。32 位和 64 位版本的数据库目前有着相同的功能,唯一的区别是:32 位版本将每个服务器的数据集总大小限制在 2GB左右;64 位版本没有任何限制,所以在生产环境中应该优先使用 64 位版本。另外,
6、不同的版本之间也有可能发生变化下载MongoDB?下载地址:安装MongoDB?在Linux中安装MongoDB,有两种方式:一、通过仓库安装 MongoDB;二、手动安装MongoDB在Windows中安装MongoDB,只需要根据自己的需要下载安装包、解压后运行即可。,MongoDB下载安装,安装解压安装包后在mongodb 下建立Data文件夹 mongodbdata,然后分别建立db,log两个文件夹,至此mongodb下有以下文件夹 mongodbbin mongodbdatadb mongodbdatalog 在log文件夹下创建一个日志文件MongoDB.log,mongodbd
7、atalogMongoDB.log,MongoDB下载安装,启动MongoDB?命令行方式启动:只需按照启动命令来执行就行了。配置文件方式启动:MongoDB也支持同mysql一样的读取启动配置文件的方式来启动数据库Daemon方式启动:启动MongoDB进程的session窗口不小心关闭时,MongoDB进程也将随之停止,MongoDB提供了一种后台Daemon方式启动的选择,只需加上一个”-fork”参数即可停止MongoDB?Control-C:通过Control-C的方式去停止MongoDB实例shutdownServer()指令:通过在admin库中发送db.shutdownServ
8、er()指令去停止MongoDB实例Unix系统指令:在找到实例的进程后,可能通过发送kill-2 PID或kill-15 PID来停止进程,MongoDB下载安装,命令启动进入到bin目录下,输入命令./mongod-dbpath=/usr/local/soft/mongodb/data-logpath=/usr/local/soft/mongodb/logs/MongoDB.log-logappend-auth-port=27017-fork配置文件启动在mongodb下创建mongo.config文件,编辑mongo.config,输入 dbpath=D:mongodbdatadb lo
9、gpath=D:mongodblogmongo.log 进入bin目录下,输入mongod-config/mongodb/mongo.config,MongoDB下载安装,停止服务最稳妥的方式,处理完当前所有操作并将缓存的数据保存到磁盘上才停止 user admin db.shutdownServer();当然我们也可以直接关闭进程,但这种方式会导致缓存中的数据未急时刷新保存到磁盘上而丢失参数解释:-dbpath 数据库路径(数据文件)-logpath 日志文件路径-master 指定为主机器-slave 指定为从机器-source 指定主机器的IP地址-logappend 日志文件末尾添加,
10、MongoDB下载安装,-pologSize 指定日志文件大小不超过64M.因为resync是非常操作量大且耗时,最好通过设置一个足够大的oplogSize来避免resync(默认的 oplog大小是空闲磁盘大小的5%)。-port 启用端口号-fork 在后台运行-only 指定只复制哪一个数据库-slavedelay 指从复制检测的时间间隔-auth 是否需要验证权限登录(用户名和密码),本节主要了解怎么运用MongoDB,包括其添加,修改,删除,查询,索引,聚合。本节将会是重点。,第 三 节,返回,MongoDB应用,MongoDB应用,添加?添加有两种方式insert()与save()
11、MongoDB是面向文档存储的数据库,文档结构形式叫BSON(类似JSON)db.c1.insert(name:user1);db.c1.save(_id:1,name:user1);他们两者之间的区别是:1、使用save函数里,如果原来的对象不存在,那他们都插入数据,如果已经存在,save会调用update更新里面的记录,而insert则会忽略操作 2、insert可以一次性插入一个列表,而不用遍历,效率高,save则需要遍历列表,一个个插入。具体的看一下函数的源码。,MongoDB应用,数组操作?$push向文档数组中添加元素,如果没有该数组,则自动添加数组。db.foo.update(,
12、$push:users:1)向users数组末尾添加一个1元素db.foo.update(,$push:users:“$each”:1,2)向users数组末尾添加多个元素,要$each 配合使用$addToSet 可以避免插入重复元素,配合$each使用,可以添加多个不同的值,数组修改器慢,因为文档大小可能会变$pop从头部或尾部删除元素$pull删除满足条件的元素,不止删除一个默认情况下,更新只能对符合匹配条件的第一个文档执行操作,要是多个文档符合条件,只有第一个文档会被更新,其他文档不会发生变化,要更新所有匹配的文档,可以将update的第四个参数设置为truedb.foo.update
13、(,$set:name:tes,false,true)在MongoDB找下级是按点的方式:比如user下有叫logs数组,就user.logs,MongoDB应用,修改?db.collection.update(,)修改现有存在的文档或集合时使用。默认的update()方法值更新单个文档。但是如果multi参数设置为true,则更新操作可以更新全部符合条件的文档。Query 类型:文档;用于更新选择过滤。Update 类型:文档;需要更新的文档的内容。Upsert 类型:文档或boolean;设置为true时,当查询没有匹配到文档时进行新建。默认值为false Multi:-类型:文档或boo
14、lean;设置为true时,则更新满足查询条件的所有文档(多个)。设置为false时只更新单个文档。默认为false。,MongoDB应用,MongoDB应用,删除?db.collection.remove(query,justOne)Query 类型:文档;用于删除选择过滤。JustOne 类型:boolean;当设置为true时只删除一个文档。db.collection.remove();删除collection中的所有数据,一旦删除不可恢复。但是不会删除collection;db.collection.drop();直接删除collection;去重?Distinct()db.colle
15、ction.distinct(field,query)Field 类型:字符串;返回非重复的字段。Query 类型:文档;查询条件。db.user.distinct(_id,age:1),MongoDB应用,查询?db.collection.find(,)find()返回的是一个文档集合;db.collection.findOne(,)findOne()返回的是一个文档前一个是查询条件,后一个参数是显示的数据 查询操作符(Query Operators)可以让我们写出复杂查询条件,让我们使用的过程更加灵活。比较查询操作符$all 语法:field:$all:,.field:文档中键的名称(不使
16、用双引号)。$gt 语法:field:$gt:value 匹配键值大于指定值的所有文档。,MongoDB应用,$gte 语法:field:$gte:value 匹配键值不小于指定值的所有文档。$lt 语法:field:$lt:value 匹配键值小于指定值的所有文档。$lte 语法:field:$lte:value 匹配键值不大于指定值的所有文档。$in 语法:field:$in:,.匹配键值等于指定数组中任意值的文档。类似sql中in.$nin 语法:field:$nin:,.匹配键不存在或者键值不等于指定数组的任意值的文档。$ne 语法:field:$ne:value 匹配键值不等于指定值
17、的文档。逻辑查询操作符$and 语法:$and:,.,and指定一个至少包含两个表达式的数组,选择出满足该数组中所有表达式的文档。and操作符使用短路操作,若第一个表达式的值为“false”,余下的表达式将不会执行。$nor语法:$nor:,.$nor执行逻辑NOR运算,指定一个至少包含两个表达式的数组,选择出都不满足该数组中所有表达式的文档。$not语法:field:$not:$not执行逻辑NOT运算,选择出不能匹配表达式的文档,包括没有指定键的文档。$not操作符不能独立使用,必须跟其他操作一起使用(除$regex)。,MongoDB应用,$or语法:$or:,.,$or执行逻辑OR运算
18、,指定一个至少包含两个表达式的数组,选择出至少满足数组中一条表达式的文档。元素查询操作符$exists语法:field:$exists:如果$exists的值为true,选择存在该字段的文档;若值为false则选择不包含该字段的文档。如果该字段的值为null,$exists的值为true会返回该条文档,false则不返回。$mod 语法:field:$mod:divisor,remainder 匹配字段值对(divisor)取模,值等于(remainder)的文档。$type语法:field:$type:选择字段值为指定的BSON数据类型的文档.使用下面类型对应的编号:,MongoDB应用,M
19、ongoDB应用,如果文档的键值是一个数组。那么$type将对数组里面的元素进行类型匹配而不是键值数组本身。JavaScript查询操作符$regex regex操作符查询中可以对字符串的执行正则匹配。MongoDB使用Perl兼容的正则表达式(PCRE)库来匹配正则表达式.可以使用正则表达式对象或者regex操作符.db.inventory.find(name:/.4/i);db.inventory.find(name:$regex:.4,$options:i);,MongoDB应用,options(regex 提供四个选项标志)i 如果设置了这个修饰符,模式中的字母会进行大小写不敏感匹配。
20、m 默认情况下,PCRE 认为目标字符串是由单行字符组成的(然而实际上它可能会包含多行).如果目标字符串 中没有 n字符,或者模式中没有出现“行首”/“行末”字符,设置这个修饰符不产生任何影响。s 如果设置了这个修饰符,模式中的点号元字符匹配所有字符,包含换行符。如果没有这个修饰符,点号不匹配换行符。x 如果设置了这个修饰符,模式中的没有经过转义的或不在字符类中的空白数据字符总会被忽略,并且位于一个未转义的字符类外部的#字符和下一个换行符之间的字符也被忽略。这个修饰符使被编译模式中可以包含注释。注意:这仅用于数据字符。空白字符 还是不能在模式的特殊字符序列中出现,比如序列。注:JavaScri
21、pt只提供了i和m选项,x和s选项必须使用$regex操作符。$where$where操作符功能强大而且灵活,他可以使用任意的JavaScript作为查询的一部分,包含JavaScript表达式的字符串或者JavaScript函数。最典型的应用就是比较文档中的两个键的值是否相等.,MongoDB应用,索引?在MongoDB上,索引能提高读操作和查询性能,没有索引,mongoDB必须扫描集合中的每一个文档,然后选择与查询条件匹配的文档。索引的管理创建索引命令 db.foo.ensureIndex(“x”:1,“y”:-1)使用ensureIndex来创建索引,1为升序,-1为倒序 db.test
22、.ensureIndex(“x”:1,“unique”:true)上面这条语句是创建唯一索引,创建唯一索引前可能会有重复数据,我们可以使用”dropDups”来鲁莽的删除这些重复数据,写法如下 db.test.ensureIndex(“x”:1,“unique”:true,“dropDups”:true),MongoDB应用,我们可以在创建索引时,为索引起个名字,而不是用系统自动生成的名字,写法如下:db.test.ensureIndex(“x”:1,“name”:“myindex”)当我们的集合数据量很大的时候,创建索引是一件费时费力的事情,我们可以这些写创建索引的语句,是创建索引的过程在后
23、台完成:db.test.ensureIndex(“x”:1,“background”:true)删除索引db.test.dropIndex();,MongoDB应用,聚合函数?count最简单的聚合工具就是count了,它返回document的数量db.foo.count()可以不跟参数也可以跟查询条件distinctdistinct命令返回指定的key的所有不同的值。你必须指定一个collection和一个key。db.runCommand(distinct:people,key:age)group$group:_id:$author,count:sum:1sort$sort:count:-
24、1 排序,类似于sql中的order by-1是降序排列,1是正序排列limit分页match 用于对文档集合进行筛选,了解什么是GridFS,为什么要用GridFS,及其怎么使用GridFS存储文件,第 四 节,返回,GridFS,GridFS 是一种将大型文件存储在 MongoDB 数据库中的文件规范。所有官方支持的驱动均实现了 GridFS 规范。为什么要用 GridFS?由于 MongoDB 中 BSON 对象大小是有限制的,所以 GridFS 规范提供了一种透明的机制,可以将一个大文件分割成为多个较小的文档,这样的机制允许我们有效的保存大文件对象,特别对于那些巨大的文件,比如视频、高
25、清图片等。如何实现海量存储?为实现这点,该规范指定了一个将文件分块的标准。每个文件都将在文件集合对象中保存一个元数据对象,一个或多个 chunk 块对象可被组合保存在一个 chunk 块集合中。大多数情况下,你无需了解此规范中细节,而可将注意力放在各个语言版本的驱动中有关 GridFS API 的部分或是如何使用 mongofiles 工具上。语言支持?GridFS 对 Java,Perl,PHP,Python,Ruby 等程序语言均支持,且提供了良好的 API 接口。,GridFS,GridFS 使用两个表来存储数据:files 包含元数据对象 chunks 包含其他一些相关信息的二进制块为
26、了使多个 GridFS 命名为一个单一的数据库,文件和块都有一个前缀,默认情况下,前缀是 fs,所以任何默认的 GridFS 存储将包括命名空间 fs.files 和 fs.chunks。各种第三方语言的驱动有权限改变这个前缀,所以你可以尝试设置另一个 GridFS 命名空间用于存储照片,它的具体位置为:photos.files 和 photos.chunks。mongofiles 是从命令行操作 GridFS 的一种工具,本节将会详细介绍MongoDB的复制和分片,将会作为重点。,第 五 节,返回,复制与分片,复制:使用复制可以将数据副本保存到多台服务器上,即使一台或者多台服务器出错,也可以
27、保证应用程序正常运行和数据的安全。什么是副本集?副本集是一组服务器,其中一个位主服务器,用于处理客户端的请求,还有很多备份服务器,用于保存主服务器的数据副本,如果主服务器崩溃了,备份服务器会自动将一个成员升级为新的主服务器。在mongoDB中创建一个副本集之后就可以使用复制功能了。使用复制功能时,如果有一台服务器宕机了,仍然可以从副本集的其他服务器上访问数据,如果服务器上的数据损坏或者不可访问,可以从副本集的某个成员中创建一份新的数据副本创建副本集创建副本命令 replicaSet=new ReplSetTest(nodes:3)replicaSet.startSet();/启动3个mongo
28、d进程 replicaSet.initiate();/配置复制功能,复制与分片,在主节点上执行:isMaster()可以查看副本集的状态。isMaster其中有一个很重要的字段指明了这是一个主节点(isMaster:true),副本集还有一个hosts列表备份节点数据可能落后与主节点,可能没有最新写入的数据,所以默认是拒绝访问的。以防止应用程序意外拿到过期的数据。如果在备份节点上做查询,可能得到一个错误提示,说当前节点不是主节点。要想在备份节点读取数据应该输入命令:setSlaveOk();这样就可以读 取数据了。不能对备份节点执行写操作。备份节点只能通过复制功能写入数据,不接受客户端的写入请
29、求。客户端在单台服务器上可以执行的请求,都可以发送到主节点执行关闭副本集命令:replicaSet.stopSet(),复制与分片,配置副本集启动mongoDB服务$mongod-replSet spock-f mongod.conf-fork 只有第一个副本集成员拥有数据,其他成员数据目录为空,只要将成员添加到副本集中,会自动克隆第一个成员的数据。刚开始启动服务是他们之间是互不相通的,要想让成员知道彼此,需要创建一个配置文件:config=_id:spock,members:_id:0,host:主机名1,_id:1,host:主机名2,_id:2,host:主机名3,复制与分片,将conf
30、ig对象发送给其中一个副本集成员连接到一个有数据的服务,然后执行命令,初始化副本集rs.initiate(config)然后这个服务器就会解析配置对象,向其他成员发送消息,所有成员都配置完成之后,他们会自动选出一个主节点,就可以正常处理读写请求了。修改副本集配置rs.add(服务主机名:端口号);为副本集添加新成员。rs.remove(服务主机名:端口号)删除副本集中的成员除了添加成员外,其他改变副本集配置的行为时主节点会关闭所有连接,重新配置副本集时,主节点需要先退化为普通节点,以便接受新的配置。重新配置副本集之后,副本集暂时没有主节点,之后就会经过选举产生新的主节点。恢复正常rs.conf
31、ig()查看配置修改是否成功。,复制与分片,分片:是指将用户拆分,将其分散存放在不同机器上的过程,用于处理更大的负载,mongoDB 支持自动分片。分片与复制的区别:复制是将数据同步的存在不同服务器上,每个节点的数据都是相同的,而分片每个节点的数据是不相同的,拆分数据。sh.enablesharding();启动分片。sh.shardcollection(colection:分片依据);进行分片如果查询的时候不使用片键的话,就会将查询发送的每个分片;如果集合存在必须为片键添加索引,如果不添加索引,进行分片的时候会报错,如果集合不存在。mongodb会自动在片键上创建索引。拆分快:达到拆分阀值点
32、进行拆分。,复制与分片,对集合进行拆分时,要选择一个或两个字段用于拆分数据,这个键就叫片键。拆分数据最常用的分发方式有三种:升序片键。类似于date或者是ObjectId随着时间稳定增长的字段。随机分发的片键。可以是用户名,MD5散列值或是数据集中其他一些没有规律的键基于位置的片键,可以是用户的IP,地址,经纬度。片键策略:散列片键流水策略多热点,复制与分片,何时分片?通常不比太早分片,因为分片不仅会增加部署的操作复杂度,还要求作出设计决策,而该决策以后很难改,另外最好也不要再系统运行太久之后再做分片,在一个过载的系统上不停机进行分片时非常困难的。分片用来:增加可用RAM,增加可用磁盘空间减轻
33、单台服务器的负载处理单个mongod无法承受的吞吐量,Mongodb存取数据机制,第 六 节,返回,Mongodb存取数据机制,Collections:在mongodb中叫做集合,是文档的集合。无模式,可以存储各种各样的文档。类似mysql中的表。Document:这里的user集合(“表”)有一个document(document可以理解为mysql中的记录)。文档是mongodb保存数据的基本单元。数据的存储结构为BSON格式,也就是我们开始添加的文档,key value键值对类型。GridFS:因为bson对象的大小有限制,不适合存储大型文件,GridFS文件系统为大型文件提供了存储的方
34、案,GridFS下的fs保存的是图片、视屏等大文件。,Mongodb存取数据机制,写入:了解了数据结构,就知道了存储机制,MongoDB的默认数据目录是/data/db,它负责存储所有的MongoDB的数据文件。在MongoDB内部,每个数据库都包含一个.ns文件和一些数据文件,而且这些数据文件会随着数据量的增加而变得越来越多。MongoDB内部有预分配空间的机制,每个预分配的文件都用0进行填充,由于有了这个机制,MongoDB始终保持额外的空间和空余的数据文件,从而有效避免了由于数据暴增而带来的磁盘压力过大的问题。由于表中数据量的增加,数据文件每新分配一次,它的大小都会是上一个数据文件大小的
35、2倍,每个数据文件最大2G。这样的机制有利于防止较小的数据库浪费过多的磁盘空间,同时又能保证较大的数据库有相应的预留空间使用。数据库的每张表都对应一个命名空间,每个索引也有对应的命名空间。这些命名空间的元数据都集中在*.ns文件中。,Mongodb存取数据机制,读取:Mongodb可以使用内存映射文件来处理对磁盘文件中数据的读写请求,mongodb并不对磁盘和RAM这两者进行区别对待,只是将文件看做一个巨大的数组,然后按照字节为单位访问其中的数据,剩下的都交由操作系统处理。,权限管理,监控MongoDB,备份,第 七 节,返回,MongoDB服务器管理,使用认证保护服务器?MongoDB支持简
36、单的基于角色的认证系统,通过该系统可以控制用户对数据库的访问以及他们被授予的访问级别。启动的时候指定参数,可以阻止客户端的访问和连接。先启用系统的登录验证模块,只需在启动时指定 auth 参数即可MongoDB用户角色:Read:允许用户读取指定的数据库。readWrite:授予用户指定数据库的读和写权限。dbAdmin:允许用户在指定的数据库中执行管理函数。userAdmin:允许用户向system.users集合中写入,具有该权限的用户可以在该数据库中创建,删除和管理用户。clusterAdmin:只在admin数据库可使用,为用户赋予所有分片和复制集相关函数的完全管理权限。,MongoD
37、B服务器管理,添加删除用户?添加命令:db.addUser(user_reader,user_pwd,true)删除命令:db.system.users.remove(user:java1);监控MongoDB?性能监控:mongosniff:此工具可以从底层监控到底有哪些命令发送给了 MongoDB 去执行。Mongostat:工具可以快速的查看某组运行中的 MongoDB 实例的统计信息。db.serverStatus:这个命令是最常用也是最基础的查看实例运行状态的命令之一。db.stats:查看数据库状态信息MongoDB 从一面世就得到众多开源爱好者和团队的重视,在常用的监控框架如 c
38、acti、Nagios、Zabbix 等基础上进行扩展,进行 MongoDB 的监控都是非常方便的,MongoDB服务器管理,备份?文件快照方式这是最简单的备份方法。但是,需要系统文件支持快照和mongod必须启用journal。恢复时,确保没有运行mongod,执行快照恢复操作命令,然后启动mongod进程,mongod将重放journal日志。使用mongodump方式千万不要fsyncLock与mongodump配合使用,如果数据库被锁定了,mongodump将永远挂起,使用mongodump备份比较慢,在备份复制集时还有些问题.但是,用来备份单个数据库、集合、子集合还是比较好的方法。复
39、制数据文件方式直接拷贝数据目录下的一切文件。但是在拷贝过程中必须阻止数据文件发生更改。因此需要对数据库加锁,以防止数据写入,MongoDB服务器管理,备份复制集通常情况下,在secondary进行备份,降低primary负载,只在secondary上锁定,以免影响业务(假设没有发送读请求到secondary)。可以使用上面的任意方式进行备份,不过推荐使用文件快照方式和复制数据文件方式。使用mongodump备份,上面提到了一个问题,那就是在mongodump备份过程中,发生写操作。在复制集架构环境下,要避免这种情况发生,mongodump需要加上-oplog参数,来跟踪备份时服务器上发生的所有
40、操作,获取一个pointin-time快照,否则备份的状态将与集群中其他节点不匹配。在恢复时,还必须创建oplog,并指定-oplogReplay参数来应用这些操作,否则恢复的成员将不知道从何处开始同步,从而在某个时间点上与源服务器保持一致。在备份复制集时,可以设置mongodump连接setName/s1,s2,s3,它会自动选择一个可用的secondary进行备份。,MongoDB服务器管理,备份分片在分片集群下,不可能在一个时间点上得到一个完整集群状态的快照。当集群越来越大时,从备份恢复整个架构的几率越来越小的。因此,对于分片集群的备份,只需独自备份config server和复制集。在
41、对分片集群进行备份与恢复操作前,要关闭balancer。对于比较小的分片集群,可以直接从mongos来备份与恢复。在大多数情况下,我们只需要恢复集群中的某个节点。如果需要恢复 整个集群,那你够倒霉的了,整个集群数据丢失可能性比较小的。备份时,直接连接分片集群的mongod而不是通过mongos。对于比较小型的分片集群,可以直接通过mongodump连接到mongos进行备份,备份的文件将包含config服务器的元数据信息和实际数据。,对MongoDB的总结。,第 八 节,返回,MongoDB总结,Mongodb主要解决的是海量数据的访问效率问题,根据官方的文档,当数据量达到50GB以上的时候,
42、Mongo的数据库访问速度是MySQL的10倍以上。Mongo的并发读写效率不是特别出色,根据官方提供的性能测试表明,大约每秒可以处理0.5万1.5次读写请求。因为Mongo主要是支持海量数据存储的,所以Mongo还自带了一个出色的分布式文件系统GridFS,可以支持海量的数据存储,最后由于Mongo可以支持复杂的数据结构,而且带有强大的数据查询功能和类似于sql的索引。Mongodb的高性能在于模式自由,使用高效的二进制数据存储,包括大型对象(如视频等)自动处理碎片,以支持云计算层次的扩展性。在存储海量数据的同时,还有良好的查询性能。当然了mongodb支持多种语言,支持RUBY,PYTHON,JAVA,C+,PHP,C#等多种语言,MongoDB与MySql的对比,从其反映出了nosql数据库与sql数据库的差异。,附 录,返回,MongoDB与MySql对比,见文档,