欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载
     

    mongodb学习总结.doc

    • 资源ID:5277370       资源大小:993.58KB        全文页数:44页
    • 资源格式: DOC        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    mongodb学习总结.doc

    MongoDB学习文档1、 NoSQL简介1、什么是NoSQL?NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。2、NoSQL的优点/缺点优点:高可扩展性。分布式计算。低成本。架构的灵活性,半结构化数据。没有复杂的关系。缺点:没有标准化。有限的查询功能(到目前为止)。最终一致是不直观的程序。3、NoSQL 数据库分类类型部分代表特点列存储HbaseCassandraHypertable顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。文档存储MongoDBCouchDB文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有有机会对某些字段建立索引,实现关系数据库的某些功能。key-value存储Tokyo Cabinet / TyrantBerkeley DBMemcacheDBRedis可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能)图存储Neo4JFlockDB图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。对象存储db4oVersant通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。xml数据库Berkeley DB XMLBaseX高效的存储XML数据,并支持XML的内部查询语法,比如XQuery,Xpath。2、 MongoDB简介 1、什么是MongoDB?MongoDB 是由C+语言编写的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB自带的JavaScript Shell,可在shell中使用shell命令行与MongoDB实例交互。Shell是一个功能完备的JavaScript解释器,可运行任意的JavaScript。2、Mongodb的主要特点:1、 面向集合存储,易存储对象类型的数据2、 支持动态查询3、 支持丰富的类型:支持 dates, regular expressions, code, binary data 等类型。4、 支持索引5、 支持服务器端javascript执行:javaScript是MongoDB的一种通用语言,它可以被用在查询,聚集函数,直接由数据库执行。补充:所谓“面向集合”(Collenction-Orented),意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定义任何模式(schema)。模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各中复杂的文件类型。我们称这种存储形式为BSON(Binary Serialized dOcument Format)。MongoDB把数据存储在文件中(默认路径为:/data/db),为提高效率使用内存映射文件进行管理。MongoDB的主要目标是在键/值存储方式(提供了高性能和高度伸缩性)以及传统的RDBMS系统(丰富的功能)架起一座桥梁,集两者的优势于一身。用于对象及JSON数据的存储:Mongo的BSON数据格式非常适合文档化格式的存储及查询。3、MongoDB适合用场景:网站数据:Mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。缓存:由于性能很高,Mongo也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo搭建的持久化缓存层可以避免下层的数据源过载。大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。高伸缩性的场景:Mongo非常适合由数十或数百台服务器组成的数据库。Mongo的路线图中已经包含对MapReduce引擎的内置支持。用于对象及JSON数据的存储:Mongo的BSON数据格式非常适合文档化格式的存储及查询。自然,MongoDB的使用也会有一些限制,例如它不适合:高度事务性的系统:例如银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序。传统的商业智能应用:针对特定问题的BI数据库会对产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。需要SQL的问题3、 MongoDB的安装及配置1、MongoDB的安装1、 MongoDB的下载:在MongoDB的官网https:/www.mongodb.org/downloads,根据不同的操作系统下载MongoDB的安装包。备注:32-bit的操作系统,MongoDB支持的最大存储数据为2G。64-bit的则无最大数据限制。推荐安装64-bit。下载完后,解压即可。MongoDB的目录结构如下图所示:2、访问MongoDB数据库MongoDB安装完成后,要访问数据库,必须经过以下两步:1、 启动MongoDB服务。以管理员身份运行命令提示符,在命令提示符下,找到MongoDB安装目录下面的bin目录,运行 “mongod”则启动了MongoDB服务。备注:默认保存数据库的DATABASEPATH为MongoDB安装盘符下面的的datadb路径,所以,自己必须先创建一个这样的文件。此命令提示符窗口一旦关闭,则该服务也随之关闭。2、 访问MongoDB数据。重新打开一个命令提示符窗口,找到安装目录下面的bin目录,运行“mongo”,则默认进入到test文档。3、启动MongoDB时的附加参数 下表为MongoDB启动的可附带的参数说明:参数描述-bind_ip绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定默认本地所有IP-logpath定MongoDB日志文件,注意是指定文件不是目录-logappend使用追加的方式写日志-dbpath指定数据库路径-port指定服务端口号,默认端口27017-serviceName指定服务名称-serviceDisplayNam指定服务名称,有多个mongodb服务时执行。-install指定作为一个Windows服务安装。示例 说明:此命令指定了MongoDB的dbpath和logpath。4、将MongoDB添加到windows服务将MongoDB服务器作为Windows服务运行,启动后,MongoDB服务直接运行在后台,避免重复的开启关闭命令。此时请注意,你必须有管理权限才能运行下面的命令。mongod -bind_ip yourIPadress -logpath "C:datadbConfmongodb.log" -logappend -dbpath "C:datadb" -port yourPortNumber -serviceName "YourServiceName" -serviceDisplayName "YourServiceName" -install示例:开启MongoDB服务:关闭MongoDB服务:删除MongoDB服务:四、MongoDB中的基本概念1、数据库一个mongodb中可以建立多个数据库。MongoDB的默认数据库为"db",该数据库存储在data目录中。命名规则:不能是空字符串(“”);数据库名区分大小写;数据库名最多为64字节,不能含有/,。,*,<,>,|,$,空格,空字符等。数据库最终会变成文件系统里面的文件,数据库名就是相应的文件名。有一些数据库名是保留的,可以直接访问,这些数据库有:admin(相当于“root”数据库),local(此数据库不可复制,且一台服务器上的所有本地集合都可以存储在这个数据库中),config(用户存储分片信息)。查看MongoDB中所有的数据库:> show dbs;查看当前使用的数据库: > db使用“use databasename”转换到特定的数据库 :> use admin创建数据库:Use mydb: 创建或者转到一个数据库,如果什么都不操作离开的话 这个库就会被系统自动删除。删除数据库:> use testMongo> db.dropDatabase();2、文档文档是mongodb中的最核心的概念,是其核心单元。我们可以将文档类比成关系型数据库中的每一行数据。多个键及其关联的值有序的放置在一起就是文档。例如,在javascript中,文档被表示为对象:“greeting”:“hello world”,这个文档只有一个键“greeting”,期对应的值为“hello world”,这是一个简单的文档对象,但大多数情况下会比这个复杂的多,可能会包含多个键/值,例如“greeting”:“hello world”,“foo”:3。文档中的键/值对是有顺序的。MongoDB严格区分数据类型和大小写。MongoDB的键是字符串,而且键不能重复,键不能含有空字符。同时“.”和“$”为保留字符,一般情况下不推荐使用。在mongodb中使用一种类json的bson存储数据。bson数据可以理解为在json的基础上添加了一些json中没有的数据类型。show3、集合集合(collection)就是一组文档的组合。如果将文档类比成数据库中的行,那么集合就可以类比成数据库的表。在mongodb中的集合是无模式的,也就是说集合中存储的文档的结构可以是不同的,比如下面的两个文档可以同时存入到一个集合中:当第一个文档插入时,集合就会被创建。集合命名规则:集合名不能是空字符串(“”);集合名不能包含空字符(0);集合名不能以“system.”开头,system为系统集合保留的前缀;用户创建的集合名中不能包含“$”,因为某些系统生成的集合中包含$;子集合:组织集合的一种惯例是用“.”分隔不同命名空间的子集合,例如,一个具有博客功能的应用可能包含两个集合,分别是blog.posts和blog.auths,这是为了使组织更加清晰。这里的blog(这个集合甚至不需要存在)跟他的子集合没有任何关系。在MongoDB中,使用子集合来组织数据非常高效,值得推荐。把数据库名添加到集合名前,得到集合的完全限定名,即命名空间(namespace),如果使用CMS数据库中的blog.posts集合,这个集合的命名空间就是CMS.blog.posts。命名空间的长度不超过121字节。显示当前数据库中所有的集合: > show collections;删除某个集合:db.collection.remove();MongDB和传统关系型数据库(RDBMS)的对比:RDBMSMongoDBTable(表)Collection(集合)Column(栏)Key(键)Value(值)Value(值)Records / Rows(记录/列)Document / Object(文档/对象)五、文档操作1、插入文档调用insert()方法,这个操作会给文档自动添加一个“_id”键,然后将其保存到MongoDB中。方法一:先创建一个文档(document),然后将文档插入到集合中(collection)示例:方法二:直接在collection中插入数据(不需要定义document)批量插入:如果需要向集合中插入多个文档,使用批量插入会快一点。在shell中,可以使用insert函数实现批量插入,它于insert函数非常像,只不过接受的是一个文档数组作为参数。注意:如果在执行批量插入的过程中,有一个文档插入失败,那么在这个文档之前的所有文档都会被成功的插入到集合中,而这个文档以及之后的所有文档都插入失败。示例:MongoDB中insert()和save()的区别:如果插入的集合的“_id”值,在集合中已经存在,用Insert执行插入操作回报异常,已经存在"_id"的键。用Save如果系统中没有相同的"_id"就执行插入操作,有的话就执行覆盖掉原来的值。相当于修改操作。2、MongoDB查询集合中的数据MongoDB中使用find来进行查询,find的第一个参数决定了要返回哪些文档,这个参数是一个文档, 用于指定查询条件,如果不知道查询参数,则默认查询集合下面的所有文档。1、基本查询示例:Example1:查询集合testuser下面的所有文档:Example2:查询集合testuser中name为“zhangsan”的文档信息Example3:查询集合testuser中name为“zhangsan”,age为23岁的文档信息2、 返回指定需要的键有时候不需要将所有的键/值全部返回,可以通过设置find的第二个参数来完成,参数仍然是一个文档对象,如果文档对象键对应的值为1,则显示,为0,则不显示。Example1:查询testuser集合中的所有文档,只显示name和create_time键注意:默认情况下,“_id”即使没被指定,也显示。如果不想让其显示,设置“_id”键所对应的值为0Example2:查询testuser集合中的所有文档,只显示name和create_time键,“_id”键不显示3、MongoDB条件查询1、"$lt","$lte","$gt","$gte"分别对应<,<=,>,>=Example1:查询age >=18 <=30db.users.find("age":"$gte":18,"$lte":30)2、使用"$ne"Example2:查出所有name不等refactor1的文档,注意 文档中不存在键name的文档也会被查出来db.users.find("name":"$ne":"refactor1")3、使用or查询MongoDB可以使用"$in","$or"使用"$in"Example3:查询出pageViews为10000,20000的数据db.users.find(pageViews:"$in":10000,20000)Db.users.find($or:pageViews:10000,pageViews:20000)"$in"可以指定不同类型的条件和值,如正在将用户的ID号迁移成用户名的过程中,要做到两者兼顾的查询:Example4:这会匹配user_id为12345和"refactor"的文档.db.users.find("user_id":"$in":12345,"refactor")使用"$nin"返回与数组中所有条件都不匹配的文档Example5:查出所有pageViews不等10000,20000的文档,注意:文档中不存在键pageViews的文档也会被查出来db.users.find("pageViews":"$nin":10000,20000)4、正则表达式正则表达式能够灵活有效的匹配字符串.Example6:查找所有名包含refact或Refact的用户,使用正则表达式执行忽略大小写的匹配db.users.find("name":/refact/i)系统可以接受正则表达式标识(i),但不是一定有.现在匹配了各种大小写形式的refact.MongoDB可以为前缀型正则表达式(如:/refactor/)查询创建索引.所以这种类型的查询非常高效.Example7:查出name为/refact/的文档.db.users.find("name":/refact/)5、使用"$size""$size"可以查询指定长度的数组Example8:查询数组长度为3的数组db.users.find("emails":"$size":3)6、使用"$slice"查询find的第二个参数是可选的,可以指定返回那些键,"$slice"返回数组的一个子集合Example9:返回emails数组的前两个元素db.users.find("userName":"refactor","emails":"$slice":2)Example10:返回emails数组的后两个元素 db.users.find("userName":"refactor","emails":"$slice":-2)Example11:返回emails数组的第2个和第11个元素.如果数组不够11个,则返回第2个后面的所有元素db.users.find("userName":"refactor","emails":"$slice":1,10)"$slice"默认将返回文档中的所有键.7、MongoDB Limit与Skip方法MongoDB Limit() 方法如果你需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。limit()方法基本语法如下所示:Db.collection_name.find().limit(NUMBER)MongoDB Skip() 方法我们除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。skip() 方法脚本语法格式如下:Db.collection_name.find().limit(NUMBER).skip(NUMBER)注:skip()方法默认参数为 0 。8、MongoDB 排序 MongoDB sort()方法在MongoDB中使用使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排序,而-1是用于降序排列。sort()方法基本语法如下所示:db.COLLECTION_NAME.find().sort(列名:1)3、mongod更新集合中的数据调用mongodb中自定义的update函数,即可完成对数据的更新db.collection.update(criteria,objNew,upsert,multi);update()函数接受以下四个参数:criteria : update的查询条件,类似sql update查询内where后面的。objNew : update的对象和一些更新的操作符(如$,$inc.)等,也可以理解为sql update查询内set后面的upsert : 这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。multi : mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。示例:Example1:只更新第一条记录:db.test0.update( "count" : $gt : 1 , $set : "test2" : "OK" );Example2:全部更新:db.test0.update( "count" : $gt : 3 , $set : "test2" : "OK" ,false,true );Example3:只添加第一条:db.test0.update( "count" : $gt : 4 , $set : "test5" : "OK" ,true,false );Example4:全部添加加进去:db.test0.update( "count" : $gt : 5 , $set : "test5" : "OK" ,true,true );Example4:全部更新:db.test0.update( "count" : $gt : 15 , $inc : "count" : 1 ,false,true );Example5:只更新第一条记录:db.test0.update( "count" : $gt : 10 , $inc : "count" : 1 ,false,false );4、MongoDB使用- remove()函数删除数据如果你想移除"userdetails"集合中"user_id" 为 "testuser"的数据你可以执行以下命令:db.userdetails.remove( "user_id" : "testuser" )如果你想删除"userdetails"集合中的所有数据,可以执行以下命令:db.userdetails.remove()如果你想删除整个"userdetails"集合,包含所有文档数据,可以执行以下数据:db.userdetails.drop()drop()函数返回 true或者false。以上执行结果返回了true,说明操作成功。5、mongoDB的主从备份所谓主存复制,指的是将某台特定电脑上的mongodb数据在其他电脑上做备份。保障数据安全。实现:主节点配置:#主数据库地址dbpath = E:mongodb2.6databasemaster27000#主数据库端口号port = 27000#主数据库所在服务器bind_ip = 127.0.0.1#确定我是主服务器master = true从节点配置:#从数据库地址dbpath = E:mongodb2.6databaseslaves27001#从数据库端口号 port = 27001#从数据库所在服务器bind_ip = 127.0.0.1 #告诉从服务器 主节点数据库地址source = 127.0.0.1:27000#确定自己是从服务器slave = true启动方式:先启动主节点,然后用客户端连接主节点。随后启动各个从节点即可。其他配置参数: only 从节点配置,只复制特定某个数据库 autoresync 从节点配置,如果主节点与从节点数据不同,则自动重新同步。配置这个节点可以给运行了一段时间的主节点加上一个新节点,则这个新节点会把之前的主节点数据全部同步过来,而不是从现在这个时间同步。 slavedelay 从节点配置,从数据库延迟同步主数据库的时间 fastsync 从节点配置,以主节点的数据库快照启动从节点,可以加快启动速度。oplogsize 主节点配置,主节点oplog大小,主节点会把数据库操作的日志写在oplog中,从节点参考oplog做复制操作,可以根据自身情况调节日志大小。如果不指定oplogsize大小,mongod将指配5%的可用磁盘空间给他,32位机最小是50M,64位机最小是1G。Ps:1、在从节点处可以看从节点状态:2、主节点可以进行增删改查,同时从节点可以对主节点的数据进行同步更新。从节点只可以进行查询,不能对从节点进行增删改。3、在从节点的local库中,有个resources表,可以查看主节点信息。4、动态添加子节点如果在启动从服务器的时候,没有指定source则可手动在从服务的local库,有个resources表,手动添加主节点信息。db.sources.insert(host:"127.0.0.1:27000")5、动态删除子节点在从节点的resources的表中删除就行 (有问题)6、MongoDB的副本集当一个节点出现故障,可以自动切换到另外一个节点上。配置实现:节点1:节点2:节点3:分别启动上面三个节点。然后随便选一个节点,执行下面指令:1、转换到admin库下面:User admin2、执行以下指令:查看副本集状态:任选一个节点,使用admin库,执行以下指令:rs.status();ps:1、在此集群中,只能有一个活跃节点(primary),其他节点为备用节点(secondary)或者裁判节点。2、在正常运行过程中,对活跃节点的增删改查都会自动同步到备用节点中。同时,只能对活跃节点进行数据的增删改查操作,不能对备用节点执行其他操作。3、如果要对备用节点执行查询操作,需要手动设置 链接到需要操作的备用节点,转到特定库下,执行以下指令: db.getMongo().slaveOk=true 即可(只对当前会话有效)。 4、mongodb默认是从活跃节点读写数据的,备用本节点上不允许读,需要设置备用本节点可以读。同时,备用节点不可进行些操作。测试故障转移:手动停掉其中的活跃节点,会在集群中的备用节点中进过投票机制,选出另外一个活跃节点。5、通过priority 设置节点的优先级(权重),权重越高,最可能被裁定为主节点。6、读写分离:通过java代码可以实现。7、MongoDB的分片 Step1:Sharding1: 启动指令:mongod -config sharding_27007.confSharding2: 启动指令:mongod -config sharding_27008.confconfigServer: 启动指令:mongod -config configServer_27009.confronter: 不需要配置文件启动指令:mongos -port 27010 -configdb 127.0.0.1:27009 (confingdb:告诉路由服务器,配置服务器的地址)Step2:以上四个节点启动后,通过客户端访问router节点, 利用路由为集群添加分片(允许本地访问) use admin db.runCommand(addshard:"127.0.0.1:27007",allowLocal:true) db.runCommand(addshard:"127.0.0.1:27008",allowLocal:true) step3: 为特定的数据库打开分片功能db.runCommand("enablesharding":"mydb")step4:为特定集合设置分片,并值得片键 db.runCommand("shardcollection":"mydb.persons","key":"_id":1)step5:执行大数据插入(至少2030万)step6:查看分片信息db.printShardingStatus()分片拓展1(配置服务器做副本集)分片拓展2(片区做副本集)

    注意事项

    本文(mongodb学习总结.doc)为本站会员(少林足球)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开