html5-img
1 / 23

第一篇:认识MongoDB

第一篇:认识MongoDB. MongoDB是一个高性能、开源、 无模式 的文档类型数据库,使用C++开发,主要解决的是海量数据的访问效率问题。 优点: 根据文档记载,当数据量达到50GB以上的时候,MongodDB的数据库访问速度是Mysql的10倍以上。 缺点: 并发读写效率不是特别出色,根据官方提供的性能测试,大约0.5W ~ 1.5W/s次读写请求。(注意:关系数据库如mysql,如果空库也许并发还OK,如果数据量积累越来越大,那么并发及相关索引生成等会遇到非常大瓶颈,而非关系数据库则不存在这种问题)

Télécharger la présentation

第一篇:认识MongoDB

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第一篇:认识MongoDB MongoDB是一个高性能、开源、无模式的文档类型数据库,使用C++开发,主要解决的是海量数据的访问效率问题。 优点:根据文档记载,当数据量达到50GB以上的时候,MongodDB的数据库访问速度是Mysql的10倍以上。缺点:并发读写效率不是特别出色,根据官方提供的性能测试,大约0.5W ~ 1.5W/s次读写请求。(注意:关系数据库如mysql,如果空库也许并发还OK,如果数据量积累越来越大,那么并发及相关索引生成等会遇到非常大瓶颈,而非关系数据库则不存在这种问题) ------- liuxinming

  2. 什么是MongoDB • 介于关系数据库和非关系数据库之间 • 是非关系数据库当中功能最丰富的一个 • 支持类似JSON的BSON格式

  3. 为什么要使用MongoDB 随着现在WEB及移动互联网对大数据操作的要求,非关系型的数据库是基于解决这样问题而诞生的。关系数据库在应用中暴露了以下几个难以克服的问题(Mysql) • 对数据库高并发读写的需求 • 对海量数据的高效率存储和访问的需求 • 对数据库的高可扩展性和高可用性的需求

  4. MongoDB使用原理 • 面向集合(Collection-Oriented):数据被分组存储在数据集中,称为一个集合,每个集合在数据库中都有一个唯一标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库里的表(table)。不同的是它不需要定义任何模式(schema) • 模式自由(Schema-Free):对于存储在MongoDB中的文件,不需要知道它的任何结构定义。多次提到的无模式或模式自由具体是什么?例如,下面两条记录可以存在同一个集合里面。{"company","联云科技"}{"area","西安,杭州"}通俗点:就是不需要预先定义存储字段,每个文档结构可以是不一样的,在mysql中每张表模式是固定的,存储的字段也往往比较受限,而mongodb模式比较自由 • 文档型存储的数据是键值对的集合,键是字符串,值可以是数据类型集合里的任意类型,包括数组和文档。这个格式称为BSON(Binary Serialized dOcument Notation)

  5. MongoDB特点 • 面向集合存储,易于存储对象类型的数据。 • 模式自由 • 支持动态查询 • 支持完全索引,包含内部对象 • 支持查询 • 支持复制(主存概念)和故障恢复 • 使用高效二进制数据存储 • 自动处理碎片 • 支持Python,PHP,Ruby,Java,C,C#,JavaScript,Perl及C++语言的驱动程序

  6. MongoDB功能 • 面向集合存储,是和存储对象及JSON形式的数据。 • 动态查询,MongoDB支持丰富的查询表达式。查询指令使用JSON形式的标记 • 完整的索引支持 • 复制及自动故障转移:支持服务器之间的数据复制,支持主存模式及服务器之间的互相复制。复制主要目的是自动故障转移。 • 适合场景:1、网站数据2、缓存3、大尺寸、低价值的数据

  7. MongoDB应用实际案例 • 淘宝网 • 大众点评 • 视觉中国网站视觉中国NoSql之路文章:http://blog.nosqlfan.com/html/1155.htmlhttp://www.infoq.com/cn/interviews/pf-mongodb-develop

  8. MongoDB-windows安装 • 步骤一: 下载MongoDB url下载地址: http://www.mongodb.org/downloads • 步骤二: 设置MongoDB程序存放程序存放目录目录 将其解压到 对应的目录我本地是E:\pdenv\mongodb\ • 步骤三:设置MongoDB数据文档存储目录 • 步骤四:启动MongoDB服务进入 cmd 提示符控制台,E:\pdenv\mongodb\bin\mongod.exe --dbpath=E:\pdenv\data\mongodbMongoDB服务端的默认监听端口是 27017 • 步骤五:客户端连接验证输入:mongo

  9. MongoDB数据逻辑结构 • MongoDB的逻辑结构是一种层次结构。主要由:文档(document)、集合(collection)、数据库(database)这三部分组成的。逻辑结构是面向用户的,用户使用MongoDB开发应用程序使用的就是逻辑结构。 • MongoDB的文档(document),相当于关系数据库中的一行记录 • 多个文档组成一个集合(collection),相当于关系数据库的表 • 多个集合(collection),逻辑上组织在一起,就是数据库(database) • 一个MongoDB实例支持多个数据库 • 结构图如下:

  10. 启动MongoDB数据库 MongoDB安装、配置完后,必须先启动,然后才能使用。 1、命令行方式启动E:\pdenv\mongodb\bin\mongod.exe --dbpath=E:\pdenv\data\mongodb 只需要指定dbpath参数即可。 2、配置文件方式启动 3、Daemon方式启动

  11. mongod参数说明 • dbpath:数据文件存放路径,每个数据库会在其中创建一个子目录,拥有防止同一个实例多次运行的mongodb.lock也保存在此目录 • logpath:错误日志文件 • logappend:错误日志采用追加模式(默认是覆写模式) • bind_ip:对外服务器的绑定ip,一般设置为空,及绑定在本机所有可用ip上,如有需要可以单独指定IP • port:对外服务端口。Web管理端口在这个port的基础上+1000 • fork:以后台Daemon形式运行服务 • journal:开启日志功能,通过保存日志来降低单机故障的恢复时间 • syncdelay:系统同步刷新磁盘的时间,单位为秒,默认60s • directoryperdb:每个db存放在单独的目录中,建议设置该参数。与Mysql的独立表空间类型 • maxConns:最大链接数 • repairpath:执行repair时的临时目录。在如果没有开启joumal,异常down机后重启,必须执行repair操作。

  12. MongoDB插入记录 • 我们建一个17car的集合然后写入数据,建立数据.并保存到集合中去1、先执行show dbs 列出当前的数据库2、定义新的数据库名,use 17car(use databasename语法),注意,这时数据库还没建立起来,不过可以继续使用,因为mongodb会在真正插入了数据后,自动建立这个数据库。use 17car后只表明目前正在使用17car集合了。3、保存数据:定义一个collection,"member",然后插入数据。>db.member.save({username:"batu",mobile:"18691635352"})>db.member.find() • >show dbs(这时17car数据库就出现了) • 注意:1、不需要预先创建一个集合,在第一次插入数据会自动创建2、在文档中可以存储任何结构数据3、每次插入数据时候集合中都会有一个ID,名字叫 _id.

  13. MongoDB _id key • _id是自有产物存储在MongoDB集合中的每个文档都有一个默认主键_id,这个主键名称是固定的,它可以是MongoDB支持的任何数据类型,默认是Objectid.在Mysql关系数据库schema设计中,主键大多是数值型的,比如常用int和long,并且更通常的是主键的取值由数据库自增获取,反观MongoDB,它在设计之初就定位于分布式存储系统,所以它原声的不支持自增主键。 • 举例说明我们往17car集合写入一条文档时,系统会自动生成一个名为_id的 key----------分割线 --- 代码演示 -------这里多出了一个类型为Objectid的 key,在插入时没有指定,属于自动生成

  14. 注:在MongoDB中,每一个集合的文档都必须有一个叫_id的字段,字段类型默认是Objectid,换句话说字段类型也可以不是Objectid类型。如下:注:在MongoDB中,每一个集合的文档都必须有一个叫_id的字段,字段类型默认是Objectid,换句话说字段类型也可以不是Objectid类型。如下: > db.member.insert({_id:3,username:"batu1"})【注意:同一个集合中_id必须唯一,如果重复系统会抛出异常】> db.member.find()

  15. MongoDB查询记录 • 普通查询:我们先从简单查询开始,具体看查询中怎么返回一个游标对象,可以简单的通过find()查询,他返回一个任意结构的集合。>db.member.find() • 使用JavaScript shell,可以用到js的特性,forEach可以输出游标了:forEach()必须定义一个函数供每个游标元素调用。>db.member.find().forEach(printjson); • 在MongoDB shell里,我们可以把游标当作数组来用>var cursor = db.member.find();>printjson(cursor[1]);注:使用游标时候注意占用内存的问题,特别是很大的游标对象,可能会出现内存溢出,所以用迭代的方式输出合理一些,下面我们用迭代方式输出。>var cursor = db.member.find();>while(cursor.hasNext()) printjson(cursor.next());

  16. 游标转换成真实的数组类型>var arr = db.member.find().toArray();>arr[1];注意:这些特性只是在MongoDB shell 里使用,而不是所有的其他应用驱动都支持,具体参考各个应用驱动官方文档。如果有其他用户在集合里第一次或最后一次调用next(),我们可能得不到游标里的数据,所以要明确的锁定要查询的游标。

  17. MongoDB条件查询 • 先简单看一个类似SQL的条件查询方式select * from car_member where username="batu"===========对照MongoDB条件查询===>db.member.find({username:"batu"}).forEach(printjson);查询条件是{a:1,b:2,...} 类似SQL的 "where a=1 and b=2 and ..."上面显示的是所有的元素,我们也可以返回特定的元素,类似返回表里面某个字段值,只需要在find({username:"batu"})里指定元素的名称>db.member.find({username:"batu"},{mobile:true}).forEach(printjson); • findOne()语法:MongoDB shell避免游标可能带来的开销,提供一个findOne()函数,这个函数和find()函数一样,不过它返回的是游标里的第一条数据,或者返回Null

  18. 例如,username="batu" 可以用很多方法来实现,可以用next()来循环游标或当做数组返回第一个元素。但是用findOne()方法则更简单和高效>printjson(db.member.findOne({username:"batu"})); • 通过limit限制结果集数量如果需要限制结果集的长度,那么可以调用limit方法>db.member.find().limit(1);

  19. MongoDB修改记录 • 修改是用update方法例如,将列username的值从"butu" 修改为"batus">db.member.update({username:"batu"},{$set:{username:"batus"}});

  20. MongoDB删除记录 • 删除记录是用remove方法例如,将username是“batus”的记录从集合member中删除>db.member.remove({username:"batus"});

  21. 常用GUI管理工具 • MongoVUE • RockMongo • MongoHub

  22. 第二篇预告:MongoDB高级使用 • 高级查询查询操作符 & 语法 & 联合查询 & 游标和存储过程 • 高级更新数据更新命令update,save • 高级特性高并发数据存储Map分组聚合计算获取结果格式化输出定制输出 • PHP应用驱动相关使用方法

More Related