您好,欢迎访问三七文档
MongoDB2016.3目录1介绍概念23部署与架构安装与管理45数据访问与开发6最佳实践目录介绍2009NOW2016现今应用于各个领域,尤其互联网企业中。20092009年10gen团队首度推出。MongoDB是一个数据库。高性能、无模式、文档型,当前NoSql中比较热门的数据库之一。Mongo一词来自单词“humongous“。开源产品,使用C++开发。什么是MongoDB?介绍存储特性•高效的存储方式•自动分片基本特性•面向集合•无模式•半结构化•动态查询•完整的索引支持MongoDB系统特性•复制及自动故障转移•横向伸缩性应用特性•支持查询监视•支持程序驱动广泛介绍合适场景适用场景网站数据:Mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。缓存:由于性能很高,Mongo也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo搭建的持久化缓存层可以避免下层的数据源过载。大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。高伸缩性的场景:Mongo非常适合由数十或数百台服务器组成的数据库。Mongo的路线图中已经包含对MapReduce引擎的内置支持。用于对象及JSON数据的存储:Mongo的BSON数据格式非常适合文档化格式的存储及查询不适用场高度事务性的系统:例如银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序。不合适场景基础概念系统上运行库的进程及节点集一个实例可以有多个库多个集合组成数据库。每个数据库都是完全独立的,有自己的用户,权限信息,独立的存储文件集。集合即是一组文档,如果说文档类似于行的话。则集合则相当于表。集合内的文档格式可以不同。文档是mongoDB数据库的最小数据集单位,其基本概念为:由多个键-值有序组合在一起的数据单元。文档集合库实例基础概念VSMongoDBDB(库)Collection(集合)Document(文档)Field(字段)IndexEmbedding&LinkdingShardShardingKeyMysql/RDBMSDatabase(数据库)Table(表)Row/Record(行/记录)Col(列)IndexJoinPartitionPartitionKey基础概念(文档)文档(document)2007.01文档是mongoDB数据库的最小数据集单位,其基本概念为:由多个键-值有序组合在一起的数据单元。{“One”:”Hi”,”Two”:”Hello,World”}文档的组成类似于Hash表,每个键对应一个记录值。但是文档中的Key-Value是有顺序的。这与一般字典表或HashMap不同。文档也可以看做关系数据库中的行,每个键值组合可以看成是这个行中对应的列,键表示列的名称,值则为表列值部署架构以下是Mongodb的生产环境中的典型部署模式。这个案例的为:4分片、每分片3副本的副本集、3配置服务器、多mongos组成部署架构1单服务器模式2主从模式-分离备份-扩展读-可多个从服务器部署模型演化MongoDB部署可以从简单逐步演化到非常强大也相当复杂3副本集模式-自动化HA(选举)-其他主从特性5分片+复制模式-分片所有特性-副本集所有特性4分片模式-分布数据读写-分布入口-分布集群配置存储-无复制部署架构从节点主动从主服务器上获取oplog。执行进而完成增量式的数据同步。主从集群即可以使用单台也可以使用多台。但一般不超过个位数。部署架构副本集是一种进化的主从结构。其主要是可以讲副本集看做一个整体。副本集自动会选举一个活动active节点。这个节点被用来直接访问。其他副本则成为从服务器进行数据同步。当活动节点整体失效时,副本集自动选举一个新的active节点来提供服务。部署架构分片集群与主从或副本集相对,是另一种集群分支。其主要思想是通过将数据存储分布到不同主机上进行保存。而访问(更新或查询)时也会将操作分布到不同节点进行。入口(Mongos)配置信息(ConfigServer)都可以集群部署。进一步防止性能瓶颈。从整体上提高访问效率。但并不考虑数据的高可用性。基础概念同时兼顾性能与高可用性的一种集群方式。同时将整个部署结构变得比较复杂。记住概念,每个分片对应一个副本集。基本安装配置1下载下载对应操作系统的发布版本如:v2.2.1windows32位版本2解压建立Mongodb的目录如:d:\mongodb22将发布包加压到该目录下主要是bin目录形成d:\mongodb22\bin这样的结构5启动使用mongod启动window使用cmd界面,执行命令mongod--dbpathd:\mongodb22\dbdata4建立一个库数据目录如:创建目录d:\mongodb22\dbdata3配置环境变量(推荐)将d:\mongodb22\bin设置到PATH平台基础以window为例注意:默认端口2个数据访问端口27017默认web管理端口比默认数据访问端口高1000即28017基本管理mongostatWeb控制台Db.serverStatus()启停服务冷备mongodumpfsvnc和lockslaveDBrepair命令行启动配置文件启动安全和认证监控备份和恢复db.addUser(root,123)db.addUser(read_only,123,true);db.auth(read_only,123)启停服务ContentTitleContentTitle启动实例-命令行-配置文件./mongod--dbpath/data/mongodb/db/--logpath/data/mongodb/logs/mongolog--logappend–fork./mongod–fxx.conf启动实例停止服务-db.shutdownServer()-ctrl+c-Kill-9安全和认证Mongodb认证是与数据库的连接绑定在一起,即在同一个连接下,对一个数据库的验证进行一次即可。原理备份优点:速度快缺点:需要停止mongo服务优点:不需要停止mongo服务缺点:在操作时用户插入的数据可能无法备份出来。优点:不需要停止mongo服务缺点:在数据库lock期间用户无法执行insert操作。优点:不需要停止mongo服务,不会影响用户insert操作(推荐使用此方法)mongodumpfsyncandlockslaveDB冷备恢复•ClicktoaddText•ClicktoaddText•ClicktoaddText•ClicktoaddText•ClicktoaddText•ClicktoaddText•ClicktoaddText•ClicktoaddText•ClicktoaddTextAGroupCGroupBGroup./mongod--repairdb.repairDatabase()db.runCommand({repairDatabase:1})监控1mongdb自带的状态检测工具。可以查看插入、查询、更新、物理内存等自带了Web控制台。可以查看当前Mongodb的所有连接、写锁的状态、插入、查询、更新、物理内存等3获取服务器的状态22mongostatWeb控制台db.serverStatus()管理操作工具Mongovue数据访问与开发数据类型2007.0132为整型、64位整型、64位浮点;系统会根据情况自动判断,但shell只有64位浮点UTF-8字符串数值字符串值的集合或者列表;如:[“string1”,”string2”,”string3”]数组文档可以作为文档中某个key的value内嵌文档ObjectId、DBRef、null、undefined其他:从标准纪元开始的毫秒数;{“date”:newDate()}时间数据访问与开发Addyourtextinhere音乐、图像等二进制类型数据如何保存?ThemeGallery小类型可以使用BSONBinary类型ThemeGallery较大文件(超过16MB)可以使用GridFS功能。数据访问与开发MongoShell$mongo#操作符db表示当前库使用use[库名],完成库切换。usemytest#查看有哪些库showdbs#查看有哪些集合showcollections数据访问与开发db.[collection].Insert({新增文档});db.user.insert({name:wf});增db.[collection].remove({查找条件文档});db.user.remove({name:wf});删db.[collection].update({查找条件文档},{修改器文档});db.[collection].update({查找条件文档},{新文档});db.user.update({name:”wf”},{$set:{count:1}})改db.[collection].find({查找条件文档});db.user.find({name:”wf})对于复杂查询需要用到mapreduce聚合功能查数据访问与开发驱动获取••下载java版本的访问驱动•导入工程•驱动mongoXXX.jar放入classpath第一Java版本Helloworld例子数据访问与开发基本代码框架基本api框架(对比jdbc)创建数据源,指向一个库实例,同时维护内部连接池。类似jdbc的datasource。Mongomg=newMongo(127.0.0.1,27017);获得某库的连接,DB线程安全。内部连接池会缓存。DBdb=mg.getDB(wf);获得collection的连接,DBCollection线程安全。内部连接池会缓存。DBCollectionuserC=db.getCollection(user);操作数据db.getCollection(“user”).findOne();userC.findOne();最后关闭数据源mg.close();最佳实践(系统)文档(document)2007.01总是使用ReplicaSets生产环境不要用32位系统压力过大升级配置。在日常使用中,最好保持负载低于65%。生产环境默认开启journaling日志。最佳实践(分片集群)数据类型2007.01config集群生产一点3个,且不应该在同一台机器上。config集群都需要64位机器。分片字段选择技巧:最好使用1个自然有序字段+一个可作为查询条件的字段。如:月份+邮箱。分片字段要点:保持变化保证热数据最好能放在内存中。(pagefault保持低的水平)当热数据量超出了可用内存量时,通常有两种解决方法:增加内存和数据分片。建议先增加内存,再考虑通过数据分片的方式解决。mongos可以与应用服务器一一对应。最佳实践(开发设计)数据类型2007.01关联:内嵌(反范式化)vs范式化$where使用时附加普通条件限制分片字段选择技巧:最好使用1个自然有序字段+一个可作为查询条件的字段。如:月份+邮箱。非精确日志使用iso格式字符串自行完成定时业务:一致性修复、预分配、聚合(自增、统计等)尽量不用数据局库引用,而使用应用相关的业务引用,直接引用唯一键如_id基础管理及工具•启动和停止MongoDB实例–从命令行启动mongod--config/etc/mongodb.confmongod-f/etc/mongodb.conf–基本配置文件fork=truebind_ip=127.0.0.1port=27017quiet=truedbpath=/srv/mongodblogpath=/var
本文标题:mongodb介绍
链接地址:https://www.777doc.com/doc-4917877 .html