MongoDB快速实战
《MongoDB快速实战》要点:
mongodb介绍 MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比拟热门的一种.它在许多场景下可用于替代传统的关系型数据库或键/值存储方式.Mongo使用C++开发.Mongo的官方网站地址是:http://www.mongodb.org/ NoSql,全称是 Not Only Sql,指的是非关系型的数据库.下一代数据库主要办理几个要点:非关系型的、分布式的、开源的、水平可扩展的.原始的目的是为了大规模web应用,这场运动开始于2009年初,通常特性应用如:模式自由、支持简易复制、简单的API、最终的一致性(非ACID)、大容量数据等.NoSQL被我们用得最多的当数key-value存储,当然还有其他的文档型的、列存储、图型数据库、xml数据库等. 特点 高性能、易部署、易使用,存储数据非常便利.主要功能特性有: 面向集合存储,易存储对象类型的数据. 模式自由. 支持动态查询. 支持完全索引,包括内部对象. 支持查询. 支持复制和故障恢复. 使用高效的二进制数据存储,包含大型对象(如视频等). 自动处理碎片,以支持云计算条理的扩展性 支持Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C++语言的驱动法式,社区中也提供了对Erlang及.NET等平台的驱动法式. 文件存储格式为BSON(一种JSON的扩展). 可通过网络拜访. 功能 面向集合的存储:适合存储对象及JSON形式的数据. 动态查询:Mongo支持丰富的查询表达式.查询指令使用JSON形式的标志,可轻易查询文档中内嵌的对象及数组. 完整的索引支持:包含文档内嵌对象及数组.Mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划. 查询监视:Mongo包括一个监视工具用于分析数据库操作的性能. 复制及自动故障转移:Mongo数据库支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制.复制的主要目标是提供冗余及自动故障转移. 高效的传统存储方式:支持二进制数据及大型对象(如照片或图片) 自动分片以支持云级其余伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器. 适用场景 网站数据:Mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性. 缓存:由于性能很高,Mongo也适合作为信息基础设施的缓存层. 大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比拟昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储. 高伸缩性的场景:Mongo非常适合由数十或数百台服务器组成的数据库.Mongo的路线图中已经包括对MapReduce引擎的内置支持. 用于对象及JSON数据的存储:Mongo的BSON数据格式非常适合文档化格式的存储及查询. MongoDB的使用限制 高度事务性的系统:例如银行或会计系统.传统的关系型数据库目前还是更适用于必要大量原子性复杂事务的应用程序. 传统的商业智能应用:针对特定问题的BI数据库会对发生高度优化的查询方式.对于此类应用,数据仓库可能是更合适的选择. 安装与运行 官网下载对应的版本,必定要分清楚是32位还是64位 此处以32位的tar.gz包为例子 tar mv改名,改名为mongodb mv移动到/opt目录下,并修改权限为777 mkdir -p /data/db,并修改权限为777 vi ~/.bashrc 参加:export PATH=/opt/mongodb/bin:$PATH 重启机器 输入命令mongod即可启动,可以看到端口,浏览器拜访IP+端口即可(不要关闭该窗口) 如果无法启动就删除掉/data/db下的mongod.lock mongoVUE基本操作 MongoVUE是一个MongoDB在windwos下的客户端管理工具,一般都会使用它来操作. name随便写,server写你服务器的ip,port端标语,mongodb的默认端口是27017,然后连接就OK 体系布局 MongoDB 的文档(document),相当于关系数据库中的一行记录. 多个文档组成一个集合(collection),相当于关系数据库的表. 多个集合(collection),逻辑上组织在一起,便是数据库(database) . 一个 MongoDB 实例支持多个数据库(database) . 单条件查询 in查询 多条件查询and 多条件查询or 显示查询字段 排序(1 升序;-1 降序) 插入记录 修改记录 删除记录 输入条件,运行即可删除 mongodb监控——mongostat getmore:通常发生在结果集比拟大的查询时,第一个query返回了部分结果,后续的结果是通过getmore来获取的 flushs:每秒执行同步将数据写入硬盘的次数. mapped 映射到内存的数据大小,单位是MB, vsize:虚拟内存使用量,单位MB res:物理内存使用量,单位MB faults:每秒拜访失败数(只有Linux有),数据被交换出物理内存,放到swap.不要超过100,否则就是机器内存太小,造成频繁swap写入.此时要升级内存或者扩展 locked db:被锁的时间百分比,尽量控制在10%以下 idx miss %:索引不命中所占百分比.如果太高的话就要考虑索引是不是设计不合理 qr|qw ar|aw: mongo负载高时,命令来不及处置,mongo将命令放入队列. qr|qw 等待读/写的队列长度 ar|aw 执行读/写操作客户端数量. conn:有多少连接 mongodb profiler 类似于mysql中的慢查询 开启profile db.setProfilingLevel(n); n: 0 - 关闭性能阐发,测试环境可以打开,生成环境关闭,对性能有很大影响 1 - 开启慢查询日志,执行时间大于100毫秒的语句 2 - 开启所有操作日志 db.setProfilingLevel(level,slowms); Mongo Profile 记录是直接存在系统db里的,记录位置local》collections》system.profile 重点指标以及常见优化 millis: 该命令执行耗时,以毫秒记 responseLength:查询返回的长度 nscanned:在执行查询操作的时候扫描了多少对象 nreturned:从查询中返回的成果对象 如果 nscanned(扫描的记录数)远大于 nreturned(返回成果的记录数)的话,那么我们就要考虑通过加索引来优化记录定位了. db.表名.ensureIndex({age:1}) //1(升序);-1(降序) 对于创建索引的建议是:如果很少读,那么尽量不要添加索引,因为索引越多,写操作会越慢.如果读量很大,那么创建索引还是比拟划算的. 当返回的结果集很大时即responseLength值相当大时,会使得性能下降,在做find查询时,必要添加第二个查询参数,只获取必要显示的字段. 造成慢查询可能是索引的问题,也可能是数据不在内存造成(磁盘读入). 最大连接数 db.serverStatus().connections; current数值+available数值便是当前mongodb最大连接数 启动里面加参数 --maxConns=3000 不要忘了linux中的打开最大文件连接数会影响此处的设置,必定要把他也调大 mongo主从复制 架构上和mysql的主从复制类似,原理如下: mongodb的复制至少需要两个服务器或者节点.其中一个是主,负责处理客户端哀求,其余为从,负责映射主节点的数据.主节点记录在其上执行的所有操作.从节点定期轮询主节点获得操作,然后对自己的数据副本执行这些操作. 打开oplog
《MongoDB快速实战》是否对您有启发,欢迎查看更多与《MongoDB快速实战》相关教程,学精学透。编程之家 52php.cn为您提供精彩教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |