




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录MongoDB基础1MongoDB文档操作技术基础2MongoDB数据库集群架构3MongoDB管理与监控4小结51MongoDB官网:/2目录本章MongoDB数据库技术学习内容思维导图如下MongoDB官网:http://www.MongoDB.org/downloadsWin10平台下载:MongoDB-win32-x86_64-2008plus-ssl-4.0.6-signed.msi安装默认路径:C:\ProgramFiles\MongoDB\Server\4.05.1.1下载与安装{"_id"
:ObjectId("590d63bd59e819a6ae569a65"),"address":{"building"
:"203","coord":[
-73.97822040000001,40.6435254],
"street":
"ChurchAvenue","zipcode":"11218"
},"borough":"Brooklyn","cuisine":"IceCream,Gelato,
Yogurt,Ices","grades":
[
{"date":ISODate("2014-02-10T00:00:00Z"),"grade":"A","score":
2},
{"date":ISODate("2013-01-02T00:00:00Z"),"grade":
"A",
"score":13
},{"date":ISODate("2012-01-09T00:00:00Z"),"grade"
:
"A","score"
:AnIntroduction
to
DatabaseSystemMongoDB安装完毕后,可查看系统的服务列表将安装路径bin目录添加到系统环境变量Path后,可在命令行窗口中执行以下命令进一步验证是否安装成功,MongoDB数据库服务默认端口号为27017,将进入MongoDBShell环境>mongo或者>mongo--host:270175.1.1下载与安装{"_id"
:ObjectId("590d63bd59e819a6ae569a65"),"address":{"building"
:"203","coord":[
-73.97822040000001,40.6435254],
"street":
"ChurchAvenue","zipcode":"11218"
},"borough":"Brooklyn","cuisine":"IceCream,Gelato,
Yogurt,Ices","grades":
[
{"date":ISODate("2014-02-10T00:00:00Z"),"grade":"A","score":
2},
{"date":ISODate("2013-01-02T00:00:00Z"),"grade":
"A",
"score":13
},{"date":ISODate("2012-01-09T00:00:00Z"),"grade"
:
"A","score"
:AnIntroduction
to
DatabaseSystemMongoDBShell:可以运行任何JavaScript脚本;在Shell中可以键入help以获取帮助;执行exit命令、quit()、Ctrl+C均可退出Shell环境5.1.1下载与安装bin目录下配置文件:mongod.cfg其他配置项:多节点部署地址、分片、复制集、安全管理、网络接口等5.1.1下载与安装Bin目录下可执行程序:5.1.1下载与安装可执行文件名称说明mongod启动数据库实例进程对应的可执行文件。是整个MongoDB中最核心的内容,负责数据库的创建、删除等各项管理工作,运行在服务器端为客户端提供监听。详细参数说明请查看mongod—helpmongo是一个与mongod进程进行交互的JavaScriptShell进程,它提供了一些交互函数,用于系统管理员对数据库系统进行管理mongodump提供了一种从,MongoDB实例上创建BSONdump文件的方法,如mongodump--port27017--dbtest--outd:\bakmongorestore可以将mongodump命令导出的文件数据恢复到数据库中mongoexport可以将MongoDB实例数据导出为BSON文件mongoexport--port27017--dbtest--collectionfoo--outd:\bak\foo.jsonmongoimport可以将JSON或CSV文件内容导入MongoDB,如mongoimport--port27017--dbtest--collectionfoo--filed:\bak\foo.jsonBin目录下可执行程序:5.1.1下载与安装可执行文件名称说明mongofiles
提供了操作MongoDB分布式文件存储系统的命令行接口,如可以将本地文件上传到数据库中保存mongos
分片机制中用到的进程,所有应用程序端的查询操作都会先由它分析,然后它会将查询定位到具体的某一个分片上mongostat
展示当前正在运行的mongod实例状态的工具mongotop
用于跟踪分析MongoDB实例花在读写数据上的时间,它提供的统计数据在每一个collection级别上bsondump
将BSON格式的文件转储为JSON格式的数据AnIntroduction
to
DatabaseSystemMongoDB访问管理工具:Robo3Thttps://Studio3T收费版,可试用30天,支持导入、导出,功能丰富其他:Mongovue、RockMongo5.1.1下载与安装Robo3T:连接数据库
5.1.1下载与安装界面示意5.1.1下载与安装切换树形、表格、文档输出格式命令输入区结果显示区数据库、集合选择区5.1.2常用操作符MongoDB提供了丰富的文档操作运算符12序号操作符说明示例1)关系比较类1$lt,$lte$gt,$gte,$eq,$ne<,<=,>,>=,=,<>db.c.find({“a":{$gt:100}})db.c.find({x:{$ne:3}})2$in属于db.c.find({j:{$in:[2,4,6]}})3$nin不属于db.c.find({j:{$nin:[2,4,6]}})2)元素查询类4$exists可选:true,falsedb.c.find({a:{$exists:true}})5$type按数据类型查询db.c.find({a:{$type:2}})3)模式评估类6$mod取模:a%10==1db.c.find({a:{$mod:[10,1]}})7$regex正则表达式匹配db.c.find({sku:{$regex:/^ABC/i}})8$where主要弥补其他方式无法满足的查询条件,一般效率较低db.myCollection.find({"$where":"this.a>3"})5.1.2常用操作符13序号操作符说明示例3)模式评估类9$text文本搜索,要先建索引db.articles.find({$text:{$search:"coffee"}})4)逻辑运算类10$nor$or的反操作,即不匹配(a或b)db.c.find({name:"bob",$nor:[{a:1},{b:2}]})11$orOr子句,语义或db.c.find({name:"bob",$or:[{a:1},{b:2}]})12$and与运算db.c.find({name:"bob",$and:[{a:1},{b:2}]})13$not非运算db.c.find({name:"bob",$not:[{a:1},{b:2}]})5)数组查询类14$size匹配数组长度db.c.find({a:{$size:1}})5.1.2常用操作符$and示例选择集合inventory中的满足条件是price不等于1.99并且price字段存在的文档db.inventory.find({$and:[{price:{$ne:1.99}},
{price:{$exists:true}}]})隐式AND操作db.inventory.find({price:{$ne:1.99,$exists:true}})AND可使用多个子表达式定义更加复杂的判定条件db.inventory.find({$and:[
{$or:[{price:0.99},{price:1.99}]},{$or:[{sale:true},{qty:{$lt:20}}]}]})5.1.2常用操作符15序号操作符说明示例5)数组查询类15$all数组中的元素是否完全匹配db.c.find({a:{$all:[2,3]}})16$elemMatch数组中的元素级别需要匹配的条件db.c.find({product:{"$elemMatch":{shape:"square",color:"purple"}}})6)位查询操作类17$bitsAllClear所有位的值为0db.c.find({a:{$bitsAllClear:[1,5]}})18$bitsAllSet所有位的值为1db.c.find({a:{$bitsAllSet:[1,5]}})19$bitsAnyClear部分位的值为0db.c.find({a:{$bitsAnyClear:[1,5]}})20$bitsAnySet部分位的值为1db.c.find({a:{$bitsAnySet:[1,5]}})地理空间类操作符$minDistance、$maxDistance、$box、$center、$geoWithin、$near……重点掌握以下内容文档CRUD操作文档链接查询文档聚合与管道操作MongoDB索引机制目录MongoDB基础1MongoDB文档操作技术基础2MongoDB数据库集群架构3MongoDB管理与监控4小结516MongoDB官网:/5.2.1文档CRUD操作基于存储客户信息的ct集合来进一步学习文档的CRUD操作,分别示例如下1. 新增文档实现新增单个客户信息批量新增多个客户信息,注意文档数组参数1718DB操作使用insert插入多个文档,但必须将多个文档放在一个[]里,作为数组参数传递,否则默认只插入第一个文档5.2.1文档CRUD操作1919DB操作2.文档查询find条件第1个花括号参数限定返回文档各个字段需满足的条件,如果为空则返回集合中所有文档
>db.ct.find({})也可以>db.ct.find()
>db.getCollection('ct').find({})#select*fromct
whereName='Yan'
>db.ct.find({Name:"Yan"})
#select*fromct
whereName=‘Li'andage=26
>db.ct.find({Name:"Li",age:26})
5.2.1文档CRUD操作2020DB操作2.文档查询find第2个花括号参数设定返回的字段>db.ct.find({age:21},{'Name':1,'age':1})
{"_id":ObjectId("4c452c343d48c8f284b388e0"),"name":"user1","age":21}1表示显示,0表示不显示,一般要求都是1或者0
>db.ct.find({},{'age':0})如果只在结果中显示具体的内容字段,不包含_id字段,参数设置示例如下。>db.ct.find({Name:"user1"},{"_id":0})
>db.ct.find({age:23},{_id:0,'Name':1,'age':1})查询满足条件的首个文档>db.ct.findone()5.2.1文档CRUD操作2121DB操作2.文档查询结果排序,1表示升序,-1表示降序
#select*fromct
orderbyage
>db.ct.find().sort({age:1})
#select*fromct
orderbysexasce,agedesc
>db.ct.find().sort({gender:1,age:-1})使用limit查询满足条件的Topk文档,也可用skip先忽略Topk个文档,然后在结果中显示限制个数的文档列表。如下示例表示跳过前3个文档,然后显示后续的2个文档。>db.ct.find().limit(2).skip(3)5.2.1文档CRUD操作22222.文档查询IN判断条件
>db.ct.find({age:{$in:[23,26,32]}})
对应的操作符有$nin(notin)。OR运算
>db.ct.find({$or:[{age:25},{age:28}]})
#age<=23orage>=33
>db.ct.find({$or:[{age:{$lte:23}},{age:{$gte:33}}]})COUNT计数查询
>db.ct.find({age:{$gt:30}}).count()5.2.1文档CRUD操作2323DB操作3.文档删除
Removeremove()用于删除单个或全部文档,删除后的文档无法恢复。>id=db.ct.findOne({Name:"ChenGang"})._idObjectId(“4c4508818c4a1e0bf570460f”)
>db.ct.remove(id)
//删除上面id对应的行删除一个或多个文档也可以分别通过以下方式实现>db.ct.deleteOne({"age":{$gt:25}})>db.ct.deleteMany({"age":{$gt:25}})删除所有>db.ct.drop()或者>db.ct.remove({})5.2.1文档CRUD操作2424DB操作3.文档删除
Remove
remove函数还可以配置第二个布尔类型的参数,如果为true,表示只删除满足条件的第一个文档,默认为false。5.2.1文档CRUD操作2525DB操作4.文档更新
:
Update常用语法:db.collection.update(criteria,objNew,upsert,mult)criteria:需要被更新的文档需满足的条件表达式(过滤条件)
objNew:更新表达式
upsert:可选,布尔值,如目标记录不存在,是否插入新文档
multi:可选,布尔值,是否更新多个文档一般用法
#updateuserssetage=100,sex=0wherename='
Wang'
>db.ct.update({Name:"Wang"},{$set:{age:100,sex:0}})#updateuserssetage=age+10>db.ct.update({},{$inc:{age:10}},false,true)#updateuserssetage=age+10,sex=1wherename='
Wang'
>db.ct.update({Name:"Wang"},{$inc:{age:10},$set:{sex:1}})5.2.1文档CRUD操作4.文档更新
:
Update精确匹配更新一个文档>db.ct.update({"_id":ObjectId("5e72ddea4654e4e59dc4d1a0")},{"Name":"Yan","age":23})更新满足条件的第一个文档>db.ct.update({"Name":"Chen"},{$set:{"Name":"ChenGang","age":32}},false,false)或者也可以使用以下updateOne函数实现。>db.ct.updateOne({"Name":"Chen"},
{$set:{"Name":"ChenGang","age":32},
$currentDate:{lastModified:true}})或者>db.ct.replaceOne({"Name":"Li"},{"Name":"LiLi","age":23})26DB操作5.2.1文档CRUD操作5.2.2文档链接查询文档之间存在关联关系时,可用$lookup查询db.orders.insertMany([{"_id":1,"item":"almonds","price":12,"quantity":2},{"_id":2,"item":"pecans","price":20,"quantity":1},{"_id":3}])db.inventory.insertMany([{"_id":1,"sku":"almonds",description:"product1","instock":120},{"_id":2,"sku":"bread",description:"product2","instock":80},{"_id":3,"sku":"cashews",description:"product3","instock":60},{"_id":4,"sku":"pecans",description:"product4","instock":70},{"_id":5,"sku":null,description:"Incomplete"},
{"_id":6}])db.orders.aggregate([{$lookup:{from:"inventory",localField:"item",foreignField:"sku",as:"inventory_docs"}}]){"_id":1,
"item":"almonds","price":12,"quantity":2,"inventory_docs":[{"_id":1,"sku":"almonds","description":"product1","instock":120}
]}{"_id":2,
"item":"pecans","price":20,"quantity":1,"inventory_docs":[{"_id":4,"sku":"pecans","description":"product4","instock":70}
]}{"_id":3,"inventory_docs":[{"_id":5,"sku":null,"description":"Incomplete"},{"_id":6}
]}5.2.2文档链接查询聚合框架可以用来实现类似于SQL的“GROUPBY”的功能,但它的功能不限于此。聚合框架中支持的基本操作:$match:用于过滤数据,只输出符合查询条件的文档;$sort:将输入文档排序后输出;$limit:用来限制聚合返回的文档数;$skip:在聚合过程中跳过指定数量的文档,并返回余下的文档;$group:将集合中的文档分组,可用于统计结果;$unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值;$project:修改输入文档的结构。可以用来重命名、增加或删除字段;$geoNear:输出接近某一地理位置的有序文档;5.2.3文档聚合与管道操作MongoDB的聚合操作和SQL的关系5.2.3文档聚合与管道操作5.2.3文档聚合与管道操作MongoDB提供三种方式的聚合运算1)单一目的的聚合方法(SinglePurposeAggregationMethods)对于简单的排序、计数、查看某个字段都有哪些不同取值等操作,MongoDB提供了专门的实现单一目的聚合操作的函数,如sort()、count()、distinct()等。示例如下。>db.inventory.distinct("item")>db.inventory.find({status:"A"}).count()5.2.3文档聚合与管道操作MongoDB提供三种方式的聚合运算2)聚合管道(AggregationPipeline)
管道是指通过一个处理序列,分阶段、分步骤地将一系列文档处理成所需要的结果。
类似面向对象编程思想中方法链的依次调用过程。》语法形式:db.collection.aggregate([阶段1,阶段2,…,阶段n])》阶段中可以通过$+field名称,引用前一阶段字段名称完成相应操作5.2.3文档聚合与管道操作聚合管道示例MongoDB的聚合操作作用?5.2.3文档聚合与管道操作MongoDB的聚合操作:数组$unwind作用?5.2.3文档聚合与管道操作5.2.3文档聚合与管道操作MongoDB提供三种方式的聚合运算3)MR函数(theMap-ReduceFunction)数据库中通过给集合创建索引能够大大提高文档数据查询的性能和效率;可用explain()方法了解find查询操作都利用了哪些索引可用hint()方法进行使用哪些索引。MongoDB会为每个集合的_id字段默认创建索引;各个数据库创建的索引存储在系统自动创建的system.indexes集合中;MongoDB支持全文索引、地理位置索引,支持文本类、地理空间数据的高性能访问;重点掌握三类索引操作:创建、查询、删除5.2.4MongoDB索引机制一般索引操作1)创建索引createIndex()方法的基本语法格式如下:>db.collection.createIndex(keys,options)注:keys值为要创建的索引字段,1为指定按升序创建索引,-1为按降序创建索引。参数options可以设置是否后台创建(background参数为true)、是否创建唯一索引、是否创建稀疏索引、指定索引名称等。示例:>db.ct.createIndex({"Name":1})>db.ct.createIndex({"Name":1,"gender":-1})>db.ct.createIndex({"gender":1},{background:true})5.2.4MongoDB索引机制2)查询索引>db.ct.getIndexes();查看总索引记录大小>db.ct.totalIndexSize();删除索引,也适用全文索引删除>db.ct.dropIndex("Name_1");以下命令执行完后,除了默认创建的-id索引外,ct集合其他索引将全部删除。>db.ct.dropIndexes();5.2.4MongoDB索引机制全文索引操作使用createIndex函数创建全文索引时,需要对字符串类型或字符串数组类型的字段指定创建"text"类型的索引,如下示例>db.reviews.createIndex({comments:"text"})全文索引也可以基于多个字段建立复合索引。>db.reviews.createIndex({subject:"text",comments:"text"
})有时在不确定哪些字段是文本类型时,也可以使用“$**"(wildcardspecifier)通配说明符对所有文本类型字段创建全文索引,如下示例
>db.collection.createIndex({"$**":"text"})5.2.4MongoDB索引机制全文索引操作(续)对于创建全文索引后的集合,find方法利用索引示例如下。①查询包含"bad"的文档。
>db.collection.find({$text:{$search:"bad"}})②查询包含"bad"或者"spoiled"的文档,查询参数中用空格间隔开多个关键词即可。
>db.collection.find({$text:{$search:"badspoiled"}})③查询包含"bad"不包含"ok"的文档,在不需要包含的关键词前加符号"-"。
>db.collection.find({$text:{$search:"bad-ok"}})④查询包含"notok"完整词组的文档,在完整词组前后用引号括起来。
>db.collection.find({$text:{$search:"\"notok\""}})
5.2.4MongoDB索引机制地理位置索引MongoDB的地理位置索引可以在包含地理空间形状和点集的集合上高效地执行空间查询。地理位置索引支持是MongoDB的一大亮点,这也是目前很多流行的基于位置的服务(LocationBasedService,LBS)平台选择MongoDB的原因之一。空间位置存储:经度:合法的经度坐标取值范围为[-180,180],正为东经,负为西经;纬度:坐标取值范围为[-90,90],正为北纬,负为南纬5.2.4MongoDB索引机制地理位置索引一般分为以下两种
①2d索引:用于存储和查找平面上的点,称为平面地理位置索引;②2dsphere索引:用于存储和查找球面上的点,称为球面地理位置索引。MongoDB只支持每个集合一个地理空间索引。创建语法如下。其中2d可替换成2dsphere。
>db.collection.createIndex({<locationfield>:"2d"})示例:>db.restaurants.createIndex({location:"2dsphere"})地理位置查询既可以使用平面几何,也可以使用球面几何,根据使用的查询和索引类型来决定。2dsphere索引只支持球面几何,而2d索引同时支持平面和球面几何。5.2.4MongoDB索引机制常用地理位置查询操作符5.2.4MongoDB索引机制查询类型几何类型备注$near(GeoJSON点,2dsphere索引)
球面某邻域范围内文档$near(传统坐标,2d索引)
平面某邻域范围内文档$nearSphere(GeoJSON点,2dsphere索引)球面某邻域范围内文档$nearSphere(传统坐标,2d索引)球面可使用GeoJSON点替换$geoWithin:{$geometry:...} 球面某区域范围内文档$geoWithin:{$box:...} 平面矩形区域内文档$geoWithin:{$polygon:...} 平面多边形区域内文档$geoWithin:{$center:...} 平面某圆形区域内文档$geoWithin:{$centerSphere:...} 球面某点球面距离区域内文档$geoIntersects:{$geometry:...}
球面邻近区域范围内文档GeoJSON:是一种基于JSON的地理空间数据交换格式,它定义了一些不同类型的JSON对象以及它们的组织方式,用于表达地理特性、属性和空间范围。GeoJSON使用WGS84(WorldGeodeticSystem1984)作为地理坐标参考系统,并以10进制方式表示。GeoJSON文档中使用type字段来指定GeoJSON对象类型,如点、线、面、多点、多线、多面和几何集合等,使用coordinates对象来指定对象的坐标,基本语法格式如下。
{type:"<GeoJSONtype>",coordinates:<coordinates>}示例:(1)点{type:"Point",coordinates:[40,5]}(2)线{type:"LineString",coordinates:[[40,5],[41,6]]}5.2.4MongoDB索引机制5.2.4MongoDB索引机制地理位置查询示例db.places.insert({name:"CentralPark",location:{type:"Point",coordinates:[-73.97,40.77]},category:"Parks"});db.places.insert({name:"SaraD.RooseveltPark",location:{type:"Point",coordinates:[-73.9928,40.7193]},category:"Parks"});db.places.insert({name:"PoloGrounds",location:{type:"Point",coordinates:[-73.9375,40.8303]},category:"Stadiums"});db.places.createIndex({location:"2dsphere"})db.places.find({location:{$near:{$geometry:{type:"Point",coordinates:[-73.9667,40.78]},$minDistance:1000,$maxDistance:5000}}})重点掌握以下内容分片机制与集群架构数据冗余复制集分布式文件存储Journaling日志功能目录MongoDB基础1MongoDB文档操作技术基础2MongoDB数据库集群架构3MongoDB管理与监控4小结547MongoDB官网:/5.3.1分片机制与集群架构MongoDB分片机制的集群技术架构Shard:用于存储实际的数据块,实际生产环境中一个Shard角色可由几台机器组成一个replicaset(复制集)承担,防止主机单点故障。RouterMongos:前端路由,客户端由此访问接入,整个集群看上去像单一数据库,前端应用可以透明访问分布集群中的数据。ConfigServer:配置服务器存储整个Cluster元数据,包括分块(chunk)信息。485.3.1分片机制与集群架构MongoDB中数据的分片是以集合为基本单位的,集合中的数据通过片键(ShardKey)被分成多个部分。片键对应集合中的一个或多个字段,片键的值作为数据拆分的依据。选择的片键要求每个文档都必须包含。一个好的片键对分片至关重要。片键必须有索引。相同片键值的文档一定会处于同一个块(Chunk)中片键的选择主要有两个原则1)片键基数大(片键范围):可能取值要尽可能多,也就是基数一定要大2)片键分布情况:尽可能选择取值分布均匀的字段做片键5.3.2数据冗余复制集MongoDB的复制集群至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。常见的搭配方式为一主一从或一主多从。写入操作都在主节点上,主节点记录在其上的所有操作,存储为opLog日志文件50MongoDB复制集支持主从式分布式部署MongoDB复制就是将数据同步到多个服务器的过程。5.3.2数据冗余复制集MongoDB中只能通过主节点将Mongo服务添加到副本集中。判断当前运行的Mongo服务是否为主节点可以使用命令db.isMaster()。复制集通过replSetInitiate命令,或MongoShell的rs.initiate()进行初始化,初始化后各个成员间开始发送心跳消息,并发起Primary选举操作,获得“大多数”成员投票支持的节点,会成为Primary,其余节点成为Secondary。51Arbiter节点只参与投票,不能被选为Primary,并且不从Primary同步数据。Arbiter本身不存储数据,是非常轻量级的服务。5.3.3分布式文件存储MongoDB提供了基于文件的分布式存储系统GridFS。GridFS用于存储和恢复那些超过16MB(BSON文件限制)的文件,如图片、音频、视频等。GridFS也是文件存储的一种方式,它存储在MongoDB的集合中。GridFS会将大文件对象分割成多个小的数据块,即文件片段,一般每个数据块默认为255KB,作为MongoDB的一个文档存储在chunks集合中。
GridFS用两个集合来存储一个文件:fs.files与fs.chunks。bin文件夹中Mongofiles.exe是一个GridFS管理工具,可实现二进制文件的存取。525.3.3分布式文件存储如添加文件操作可用mongofiles命令实现:
>mongofiles-dgridfsputsong.mp3
其中gridfs是存储文件的数据库名称。如果不存在该数据库,MongoDB会自动创建。song.mp3是上传的音频文件名。查看数据库中GridFS文件的命令示例如下:>db.fs.files.find()以上命令执行后返回以下文档数据:
{_id:ObjectId('534a811bf8b4aa4d33fdf94d'),filename:"song.mp3",chunkSize:261120,uploadDate:newDate(1397391643474),
md5:"e4f53379c909f7bed2e9d631e15c1c41",length:10401959
}可以根据具体的文件_id值,获取区块的数据,命令如下:>db.fs.chunks.find({files_id:ObjectId('534a811bf8b4aa4d33fdf94d')})将会返回n个文档的数据,意味着mp3文件被存储在这n个数据块中。535.3.4Journaling日志功能
Journaling日志不同于普通的log,它是MongoDB中WiredTiger存储引擎故障恢复一个非常重要的功能,保证了数据库服务器在意外断电、自然灾害下数据的完整性。日志功能使数据库在意外故障后能够快速恢复最近checkpoint后数据更新操作。Journaling功能有两个重要内存视图:privateview与sharedview这两个视图都是通过内存映射来实现的,对privateview映射内存的修改不会直接影响到磁盘上,而sharedview中数据的变化则会影响到磁盘上的文件,系统会周期性地刷新sharedview数据到磁盘上545.3.4Journaling日志功能sharedview在mongoDB启动的过程中,操作系统会将磁盘上的数据文件映射到内存中的sharedview,操作系统只是完成映射,并没有立即加载数据到内存,mongoDB会根据需要加载数据到sharedview。Privateview内存视图是为读操作保存数据的位置,是mongodb保存新的写操作的第一个地方。磁盘上的Journaling日志文件,是实现写操作持久化保存的地方。mongoDB实例启动时会读这个文件。参考:/longshiyVip/p/5096086.html555.3.4Journaling日志功能例如以写操作db.colection.insert({key,value})为例,写操作发生的关键步骤如下。(1)首先将数据写入privateview中,privateview并不与磁盘文件相连接,数据不会直接刷新到磁盘上。(2)将privateview中的数据批量复制到Journal该操作会周期性完成,启动MongoDB时可通过mitIntervalMs来控制,默认100ms。Journal会将写操作记录存储到磁盘上的文件中,进行持久化保存,Journal日志文件上的每一条都描述了写操作更改了数据文件上的哪些字节。此时由于数据被写入Journal中,即便MongoDB服务器崩溃了,写操作仍然是安全的,当数据库重启时,Mongod会先读取Journal日志,将写操作引起的变化重新同步到数据文件中。5.3.4Journaling日志功能(3)利用Journal日志中的写操作记录引起的数据文件变化更新sharedview中的数据。(4)重新利用sharedview来对privateview进行映射,使其占用的内存空间恢复到初始值,此时sharedview中的数据与磁盘变得不一致了,MongoDB周期性(参数storage.syncPeriodSecs,默认60s)地将sharedview中的数据flush到磁盘,进行数据同步。(5)执行完数据同步后,通知Journal日志已经刷入,一旦Journal日志文件只包含全部刷入的写操作,不再用于恢复,MongoDB会将它删除或者作为一个新的日志文件再次使用。重点掌握以下内容文档数据导入与导出文档数据备份与恢复多文档事务管理数据库监控目录MongoDB基础1MongoDB文档操作技术基础2MongoDB数据库集群架构3MongoDB管理与监控4小结558MongoDB官网:/59
MongoDB提供了mongoexport工具,可以把一个collection导出成json格式或csv格式的文件。可以指定导出哪些数据项,也可以根据给定的条件导出数据。-h[--host]-u[--username]argusername-p[--password]argpassword-d[--db]argdatabasetouse-c[--collection]argcollectiontouse(somecommands)-f[--fields]如-fname,age
-q[--query]argqueryfilter,asaJSONstring--csvexporttocsvinsteadofjson
-o[--out]
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 贵州师范大学《运动生物力学Ⅱ》2023-2024学年第二学期期末试卷
- 吉林电子信息职业技术学院《康复心理学》2023-2024学年第二学期期末试卷
- 石家庄铁道大学《病原生物学实验》2023-2024学年第二学期期末试卷
- 重庆文理学院《地下空间规划与设计》2023-2024学年第一学期期末试卷
- 云南理工职业学院《思想品德修养与法律基础》2023-2024学年第二学期期末试卷
- 武汉电力职业技术学院《建筑施工图设计》2023-2024学年第二学期期末试卷
- 售楼部主体施工合同
- 房屋装修木工合同
- 医疗器械代加工合同
- 商业住房买卖合同
- GB/T 3717-1983测长机
- GB/T 19189-2011压力容器用调质高强度钢板
- 【农业养殖技术】花鲈淡水池塘标准化养殖技术
- 政治学基础课件全部终稿
- 一园青菜成了精-课件
- 酒店运营管理课件
- 中国古代建筑理论知识考核试题与答案
- 山东省青岛市各县区乡镇行政村村庄村名居民村民委员会明细
- 注浆防水工程检验批质量验收记录
- 绿色建筑评价评分表
- 接触网工程施工方法及技术措施
评论
0/150
提交评论