您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > mongodb介绍.
MongoDB目录Mongodb介绍结构介绍复制原理分片原理Mongodb应用举例架构部署数据模型特点可扩展•自动分片功能支持水平的数据库集群,可以动态添加额外的机器高性能•文档影射到内存,查询性能快。支持动态查询,支持丰富的查询表达式•支持全文索引:包括文档的内嵌的对象及数组,MONGO本身具有查询优化器易使用•面向文档存储,文档的检索方式,类似JAVASCRIPT。•文档存储方式是BJSON,数据格式非常类似JS的JSON格式。模式自由•文档内部可以定义很多数据类型,文档可动态变化添加。适用场景适用场景实时的插入、更新、查询,具备数据存储的复制MONGODB的BJSON非常合适文档化格式的存储查询适合作为信息基础设施的持久化缓存层适合由数十台、数百台组成的数据库,MONGODB包含了MAPREDUCE的内置支持不适用场景不适用场景高度的事务系统(最终一致性)极为复杂的查询系统传统的商业智能数据逻辑结构{“id”:“610000”,“name”:”test”,“address”:{“province”:”jiangxi”,“city”:”jiujiang”,“country”:”china”}}文档1文档2文档3文档4数据库DATABASE1集合1集合2MongoDB关系型数据库文档(document)行(row)集合(collection)表(table)数据库(database)数据库(database)数据类型数据类型描述形式NULL空,不存在的值{“x”:null}Booleantrue、false{“x”:true}String任意UTF8ObjectID12位唯一的ID{“id”:ObjectId()}Date保存从纪元到现在的毫秒数{“x”:newDate()}RegularexpressionJS的正则表达式{“x”:/foobar/i}Array数组{“x”:[“a”,”b”,”c”]}Embeddeddocument嵌入文档{“x”:{“foo”:”bar”}}MongoDB文档内部结构CollectionNameSpaceExtendExtendExtendnextnextprovprovIndexNameSpaceIndexNameSpaceBtreeNodeBtreeNodeBtreeNodeBtreeNodeBtreeNodeBtreeNodeBtreeNodeindexHmDAGIzFileSpaceFileSpaceFileSpaceFileSpaceFileSpaceDocRecordMongoDB在数据存储上按命名空间来划分,一个Collection是一个命名空间,一个索引也是一个命名空间。同一个命名空间的数据被分成很多个Extent,Extent之间使用双向链表连接。在每一个Extent中,保存了具体每一行的数据,这些数据也是通过双向链接来连接的。每一行数据存储空间不仅包括数据占用空间,还可能包含一部分附加空间,这使得在数据Update变大后可以不移动位置。索引以BTree结构实现。DocRecordnextprovDocRecordnextprovDocRecordnextprovheadtail应用架构ApplicationMMPMMMMongoServiceMongoDumpMongorestoreMongoimportMongoexportMongostatC++APIJAVAAPIWEBAPISHELL服务与支撑mongosmongosmongosTCP/IPmongodmongodmongodLOCALNFSDFS(扩展中)数据资源安全管理IT基础设施磁盘内存映射Test.nsTest.0Test.1test.nsTest.0Test.1otherdiskVM16M32M……2GB2GBTest.0Test.1Test.2……Test.XMongoDB存储原理【Mongodb:内存-虚拟内存-物理磁盘-存储文件系统】MongoDB存储原理【Mongodb内存管理】*对于内存:Mongodb及其消耗内存,有多少吃多少。*内存充足:Mongodb在内存充足时,将全部的索引(hash)与数据存放在内存中,同时将所有数据压缩后映射到磁盘。*内存不够:Mongodb在内存不够时,将全部的索引(hash)与部分热数据存放内存中,同时将所有数据压缩后映射到磁盘。如果内存实在不够,则只存索引(hash),通过索引可以迅速锁定数据所在磁盘物理区块。【Mongodb文件管理】*磁盘存储策略:存储文件时成倍增长的,自动切割。*目前2.2版本增长过程:16M、32M、64M、128M、256M、512M、1024M、2048M最大值为2GB。*文件的分隔是Mongodb系统自动分隔的。目录Mongodb介绍结构介绍复制原理分片原理Mongodb应用举例架构部署数据模型复制冗余分类Master1、Master-SlaveReplicationSlaveSlavePrimary1、ReplicaSetSecondarySecondary复制ClientPrimarySecondarySecondaryOPLOG写数据返回请求复制准备复制复制–OPLOG结构{ts:...,op:...,ns:...,o:...o2:...}ts:8字节的时间戳,由4字节unixtimestamp+4字节自增计数表示。这个值很重要,在选举(如master宕机时)新primary时,会选择ts最大的那个secondary作为新primary。1字节的操作类型,例如i表示insert,d表示delete。操作所在的namespace。操作所对应的document,即当前操作的内容(比如更新操作时要更新的的字段和值)在执行更新操作时的where条件,仅限于update时才有该属性{ts:{t:1306207317000,i:1},h:NumberLong(7272647888810218413),op:i,ns:test.foo,o:{_id:ObjectId(4ddb2455be10000000002f6a),x:2,y:1}}{ts:{t:1306207325000,i:1},h:NumberLong(3083832920223263240),op:d,ns:test.foo,b:true,o:{_id:ObjectId(4ddb244d2d0d00000000551a)}}复制副本集中节点的类型standard:常规节点,它存储一份完整的数据副本,参与选举投票可以成为活跃节点。passive:存储了完整的数据副本,参与投票,不能成为活跃节点。arbiter:仲裁者只参与投票,不能接受复制数据,也不能成为活跃节点。每个参与节点(非仲裁者)都有个优先权,优先权为0是被动的,不能成为活跃节点,优先值不为0,则按照大小选出活跃节点。如果2个值一样,则数据最新的为活跃节点。目录Mongodb介绍结构介绍复制原理分片原理Mongodb应用举例架构部署数据模型分片MongoDBShard架构客户端访问路由节点mongos来进行数据读写。config服务器保存了两个映射关系,一个是key值的区间对应哪一个chunk的映射关系,另一个是chunk存在哪一个分片节点的映射关系。路由节点通过config服务器获取数据信息,通过这些信息,找到真正存放数据的分片节点进行对应操作。路由节点还会在写操作时判断当前chunk是否超出限定大小。如果超出,就分列成两个chunk。对于按分片key进行的查询和update操作来说,路由节点会查到具体的chunk然后再进行相关的工作。对于不按分片key进行的查询和update操作来说,mongos会对所有下属节点发送请求然后再对返回结果进行合并。分片机制chunk1chunk2chunk3chunk4chunk5MongoDB的分片是指定一个分片key来进行,数据按范围分成不同的chunk,每个chunk的大小有限制。有多个分片节点保存这些chunk,每个节点保存一部分的chunk。每一个分片节点都是一个ReplicaSets,这样保证数据的安全性。当一个chunk超过其限制的最大体积时,会分裂成两个小的chunk。当chunk在分片节点中分布不均衡时,会引发chunk迁移操作。chunk1chunk3chunk5chunk7chunk9chunk8chunk4chunk2chunk6chunk12chunk10chunk11Shard1Shard2Shard3-INF+INFKEYSPACEPrimaryDBSecondaryDBSecondaryDB每个块按KEY值指定范围当文档块变大的时候,会自动分离chunk10负载不均衡,自动迁移目录Mongodb介绍结构介绍复制原理分片原理Mongodb应用举例架构部署数据模型业务场景以南方基地网络设备日志系统为例,业务场景如下:1.多台网络设备通过syslog协议与日志采集服务器通讯。2.解析模块解析日志文本,根据相关的业务需求,对日志进行格式化后输出至文本。3.库模块日志进行入库查询。架构部署Clientmongosmongosmongodmongod副本mongodmongod副本10.1.1.110.1.1.210.1.2.110.1.2.210.1.2.310.1.2.4shard10.1.2.xxx数据量增大,可动态添加分片。当分片实例挂了,副本实例继续工作。此处的MONGOS作为备份节点CILENT需要判断哪个是活跃节点架构部署1、高可靠性:a、mongos可以部署多个,但是需要CLIENT去判断哪个可用。b、mongod可以配置多个副本集,当一个DOWN后,会根据副本集合的优先级自动成为活跃节点。2、可扩展性:a、当集群不能满足数据的增长时,可以动态添加分片,MONGODB会根据分片键,自动调整CHUNK的数量,使整个集群达到负载均衡。文档格式自由{“id”:ObjectId(),“time_stamp”:“2013-01-0123:40:20348”“ip”:“10.3.3.141”“description”:“thisistestdata”}{“id”:ObjectId(),“time_stamp”:“2013-01-0123:40:20348”“ip”:“10.3.3.141”“stat”:[10,20,30],“description”:“thisistestdata”}{“id”:ObjectId(),“time_stamp”:“2013-01-0123:40:20348”“ip”:“10.3.3.141”}需求发生改变,添加了stat信息db.tablename.inser(文档),文档的结构变化,不需要改变集合结构需求:需要增加stat信息。Mogodb:直接插入db.tablename.save({“time_stamp”:“2013-01-0123:40:20348”,“ip”:“10.3.3.141”,“description”:“thisistestdata”,“stat”:[10,20,30]});Mysql关系型数据库:需要改变原始表的表结构,添加字段来保存STAT标识。Altertabletableaddcolumnstatvarchar(20);需求:少了state,description数据信息。Mogodb:直接插入db.tablename.save({“time_stamp”:“2013-01-0123:40:20348”,“ip”:“10.3.3.141”});不需要改变表结构,浪费资源。Mysql关系型数据库:插入NULL数据,浪费空间,表冗余。插入性能的SQLMOGODB指定ID的插入。db.tablename.save({“id”:ObjectId(),“time_stamp”:“2013-01-0123:40:20348”,“i
本文标题:mongodb介绍.
链接地址:https://www.777doc.com/doc-2888801 .html