欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    八天学会MongoDBWord下载.docx

    • 资源ID:16679871       资源大小:1.13MB        全文页数:55页
    • 资源格式: DOCX        下载积分:12金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要12金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

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

    八天学会MongoDBWord下载.docx

    1、1insert 操作好,数据库有了,下一步就是集合,这里就取集合名为“person”,要注意的就是文档是一个json的扩展(Bson)形式。2 find 操作我们将数据插入后,肯定是要find出来,不然插了也白插,这里要注意两点: “_id: 这个字段是数据库默认给我们加的GUID,目的就是保证数据的唯一性。 严格的按照Bson的形式书写文档,不过也没关系,错误提示还是很强大的。 update操作 update方法的第一个参数为“查找的条件”,第二个参数为“更新的值”,学过C#,相信还是很好理解的。4 remove操作 remove中如果不带参数将删除所有数据,呵呵,很危险的操作,在mongo

    2、db中是一个不可撤回的操作,三思而后行。 看过上一篇,相信大家都会知道如何开启mongodb了,这篇就细说下其中的增删查改,首先当我们用上一篇同样的方式打开mongodb,突然傻眼了,擦,竟然开启不了,仔细观察“划线区域“的信息,发现db文件夹下有一个类似的”lock file”阻止了mongodb的开启,接下来我们要做的就是干掉它,之后,开启成功,关于mongodb的管理方式将在后续文章分享。 Insert操作上一篇也说过,文档是采用“K-V”格式存储的,如果大家对JSON比较熟悉的话,我相信学mongodb是手到擒来,我们知道JSON里面Value可能是“字符串”,可能是“数组”,又有可能

    3、是内嵌的一个JSON对象,相同的方式也适合于BSON。 常见的插入操作也就两种形式存在:“单条插入”和“批量插入”。 单条插入 先前也说了,mongo命令打开的是一个javascript shell。所以js的语法在这里面都行得通,看起来是不是很牛X。 批量插入 这玩意跟“单条插入”的差异相信大家应该知道,由于mongodb中没有提供给shell的“批量插入方法”,没关系,各个语言的driver都打通了跟mongodb内部的批量插入方法,因为该方法是不可或缺的,如果大家非要模拟下批量插入的话,可以自己写了for循环,里面就是insert。Find操作日常开发中,我们玩查询,玩的最多的也就是二类

    4、: , =, , 25一些人员。有时person数组里面的人员太多,我想加上一个count属性标明一下。针对上面的需求,在group里面还是很好办到的,因为group有这么两个可选参数: condition 和 finalize。condition:这个就是过滤条件。finalize:这是个函数,每一组文档执行完后,多会触发此方法,那么在每组集合里面加上count也就是它的活了。 mapReduce 这玩意算是聚合函数中最复杂的了,不过复杂也好,越复杂就越灵活。 mapReduce其实是一种编程模型,用在分布式计算中,其中有一个“map”函数,一个”reduce“函数。 map: 这个称为映射

    5、函数,里面会调用emit(key,value),集合会按照你指定的key进行映射分组。 reduce:这个称为简化函数,会对map分组后的数据进行分组简化,注意:在reduce(key,value)中的key就是 emit中的key,vlaue为emit分组后的emit(value)的集合,这里也就是很多count:1的数组。 mapReduce: 这个就是最后执行的函数了,参数为map,reduce和一些可选参数。具体看图可知:从图中我们可以看到如下信息:result:存放的集合名“;input:传入文档的个数。emit:此函数被调用的次数。reduce:output:最后返回文档的个数。最

    6、后我们看一下“collecton”集合里面按姓名分组的情况。游标 mongodb里面的游标有点类似我们说的C#里面延迟执行,比如: var list=db.person.find(); 针对这样的操作,list其实并没有获取到person中的文档,而是申明一个“查询结构”,等我们需要的时候通过for或者next()一次性加载过来,然后让游标逐行读取,当我们枚举完了之后,游标销毁,之后我们在通过list获取时,发现没有数据返回了。当然我们的“查询构造”还可以搞的复杂点,比如分页,排序都可以加进去。var single=db.person.find().sort(name,1).skip(2).l

    7、imit(2);那么这样的“查询构造”可以在我们需要执行的时候执行,大大提高了不必要的花销。这些天项目改版,时间比较紧,博客也就没跟得上,还望大家见谅。 好,今天分享下mongodb中关于索引的基本操作,我们日常做开发都避免不了要对程序进行性能优化,而程序的操作无非就是CURD,通常我们又会花费50%的时间在R上面,因为Read操作对用户来说是非常敏感的,处理不好就会被人唾弃,呵呵。 从算法上来说有5种经典的查找,具体的可以参见我的算法速成系列,这其中就包括我们今天所说的“索引查找”,如果大家对sqlserver比较了解的话,相信索引查找能给我们带来什么样的性能提升吧。我们首先插入10w数据,

    8、上图说话:性能分析函数(explain)好了,数据已经插入成功,既然我们要做分析,肯定要有分析的工具,幸好mongodb中给我们提供了一个关键字叫做“explain,那么怎么用呢?还是看图,注意,这里的name字段没有建立任何索引,这里我就查询一个“name10000”的姓名。仔细看红色区域,有几个我们关心的key。cursor: 这里出现的是”BasicCursor,什么意思呢,就是说这里的查找采用的是“表扫描”,也就是顺序查找,很悲催啊。nscanned:这里是10w,也就是说数据库浏览了10w个文档,很恐怖吧,这样玩的话让人受不了啊。n: 这里是1,也就是最终返回了1个文档。millis

    9、:这个就是我们最最最.关心的东西,总共耗时114毫秒。建立索引(ensureIndex)在10w条这么简单的集合中查找一个文档要114毫秒有一点点让人不能接收,好,那么我们该如何优化呢?mongodb中给我们带来了索引查找,看看能不能让我们的查询一飞冲天. 这里我们使用了ensureIndex在name上建立了索引。”1“:表示按照name进行升序,”-1“:表示按照name进行降序。我的神啊,再来看看这些敏感信息。 这里出现的是”BtreeCursor,这么牛X,mongodb采用B树的结构来存放索引,索引名为后面的“name_1。我擦,数据库只浏览了一个文档就OK了。 直接定位返回。看看这

    10、个时间真的不敢相信,秒秒杀。通过这个例子相信大家对索引也有了感官方面的认识了吧。唯一索引和sqlserver一样都可以建立唯一索引,重复的键值自然就不能插入,在mongodb中的使用方法是:db.person.ensureIndex(1,uniquetrue)。四:组合索引有时候我们的查询不是单条件的,可能是多条件,比如查找出生在1989-3-2名字叫jack的同学,那么我们可以建立“姓名”和生日“的联合索引来加速查询。看到上图,大家或者也知道name跟birthday的不同,建立的索引也不同,升序和降序的顺序不同都会产生不同的索引,那么我们可以用getindexes来查看下person集合中

    11、到底生成了那些索引。此时我们肯定很好奇,到底查询优化器会使用哪个查询作为操作,呵呵,还是看看效果图:看完上图我们要相信查询优化器,它给我们做出的选择往往是最优的,因为我们做查询时,查询优化器会使用我们建立的这些索引来创建查询方案,如果某一个先执行完则其他查询方案被close掉,这种方案会被mongodb保存起来,当然如果非要用自己指定的查询方案,这也是可以的,在mongodb中给我们提供了hint方法让我们可以暴力执行。五: 删除索引可能随着业务需求的变化,原先建立的索引可能没有存在的必要了,可能有的人想说没必要就没必要呗,但是请记住,索引会降低CUD这三种操作的性能,因为这玩意需要实时维护,

    12、所以啥问题都要综合考虑一下,这里就把刚才建立的索引清空掉来演示一下:dropIndexes的使用。从这一篇开始我们主要讨论mongodb的部署技术。 我们知道sql server能够做到读写分离,双机热备份和集群部署,当然mongodb也能做到,实际应用中我们不希望数据库采用单点部署,如果碰到数据库宕机或者被毁灭性破坏那是多么的糟糕。主从复制1: 首先看看模型图2: 从上面的图形中我们可以分析出这种架构有如下的好处:数据备份。数据恢复。读写分离。3:下面我们就一一实践实际应用中我们肯定是多服务器部署,限于自己懒的装虚拟机,就在一台机器上实践了。第一步:我们把mongodb文件夹放在D盘和E盘,

    13、模拟放在多服务器上。第二步:启动D盘上的mongodb,把该数据库指定为主数据库,其实命令很简单:mongodb -dbpath=XXX -master,端口还是默认的27017.第三步:同样的方式启动E盘上的mongodb,指定该数据库为从属数据库,命令也很简单,当然我们要换一个端口,比如:8888。source 表示主数据库的地址。mongod -dbpath=xxxx -port=8888 -slave -source=127.0.0.1:27017第四步:从图中的红色区域我们发现了一条:“applied 1 operations这样的语句,并且发生的时间相隔10s,也就说明从属数据库每

    14、10s就向主数据库同步数据,同步依据也就是寻找主数据库的”OpLog“日志,可以在图中红色区域内发现”sync_pullOpLog“字样。接下来我们要做的就是测试,惊讶的发现数据已经同步更新,爽啊。4:如果我还想增加一台从属数据库,但是我不想在启动时就指定,而是后期指定,那么mongodb可否做的到呢?答案肯定是可以的。 我们的主或者从属数据库中都有一个叫做local的集合,主要是用于存放内部复制信息。 好,那么我们就试一下,我在F盘再拷贝一份mongodb的运行程序,cmd窗口好多啊,大家不要搞乱了。 看上面的log,提示没有主数据库,没关系,某一天我们良心发现,给他后期补贴一下,哈哈,再开

    15、一个cmd窗口,语句也就是 在sources中add一个host地址,最后发现数据也同步到127.0.0.1:5555这台从属数据库中.5: 读写分离这种手段在大一点的架构中都有实现,在mongodb中其实很简单,在默认的情况下,从属数据库不支持数据的读取,但是没关系,在驱动中给我们提供了一个叫做“slaveOkay来让我们可以显示的读取从属数据库来减轻主数据库的性能压力,这里就不演示了。副本集 这个也是很牛X的主从集群,不过跟上面的集群还是有两点区别的。该集群没有特定的主数据库。如果哪个主数据库宕机了,集群中就会推选出一个从属数据库作为主数据库顶上,这就具备了自动故障恢复功能,很牛X的啊。好

    16、,我们现在就来试一下,首先把所有的cmd窗口关掉重新来,清掉db下的所有文件。第一步:既然我们要建立集群,就得取个集群名字,这里就取我们的公司名shopex, -replSet表示让服务器知道shopex下还有其他数据库, 这里就把D盘里面的mongodb程序打开,端口为2222。指定端口为3333是shopex集群下的另一个数据库服务器。第二步:既然上面说3333是另一个数据库服务器,不要急,现在就来开,这里把E盘的mongodb程序打开。ok,看看上面的日志红色区域,似乎我们还没有做完,是的,log信息告诉我们要初始化一下“副本集“,既然日志这么说,那我也就这么做,随便连接一下哪个服务器都

    17、行,不过一定要进入admin集合。 开启成功后,我们要看看谁才能成为主数据库服务器,可以看到端口为2222的已经成为主数据库服务器。第五步:我们知道sql server里面有一个叫做仲裁服务器,那么mongodb中也是有的,跟sql server一样,仲裁只参与投票选举,这里我们把F盘的mongodb作为仲裁服务器,然后指定shopex集群中的任一个服务器端口,这里就指定2222。然后我们在admin集合中使用rs.addArb()追加即可。追加好了之后,我们使用rs.status()来查看下集群中的服务器状态,图中我们可以清楚的看到谁是主,还是从,还是仲裁。不是说该集群有自动故障恢复吗?那么

    18、我们就可以来试一下,在2222端口的cmd服务器按Ctrl+C来KO掉该服务器,立马我们发现在3333端口的从属服务器即可顶上,最后大家也可以再次使用rs.status()来看下集群中服务器的状态。在mongodb里面存在另一种集群,就是分片技术,跟sql server的表分区类似,我们知道当数据量达到T级别的时候,我们的磁盘,内存就吃不消了,针对这样的场景我们该如何应对。分片mongodb采用将集合进行拆分,然后将拆分的数据均摊到几个片上的一种解决方案。下面我对这张图解释一下:人脸: 代表客户端,客户端肯定说,你数据库分片不分片跟我没关系,我叫你干啥就干啥,没什么好商量的。mongos: 首

    19、先我们要了解”片键“的概念,也就是说拆分集合的依据是什么?按照什么键值进行拆分集合.好了,mongos就是一个路由服务器,它会根据管理员设置的“片键”将数据分摊到自己管理的mongod集群,数据 和片的对应关系以及相应的配置信息保存在config服务器上。 mongod: 一个普通的数据库实例,如果不分片的话,我们会直接连上mongod。 实战 首先我们准备4个mongodb程序,我这里是均摊在C,D,E,F盘上,当然你也可以做多个文件夹的形式。开启config服务器 先前也说了,mongos要把mongod之间的配置放到config服务器里面,理所当然首先开启它,我这里就建立2222端口。 开启mongos服务器 这里要注意的是我们开启的是mongos,不是mongod,同时指定下config服务器,这里我就开启D盘上的mongodb,端口3333。启动mongod服务器对分片来说,也就是要添加片了,这里开启E,F盘的mongodb,端口为:4444,5555。 服务配置 哈哈,是不是很兴奋,还差最后一点配置我们就可以大功告成。 先前图中也可以看到,


    注意事项

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

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




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开