好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

mongodb技术分享.ppt

69页
  • 卖家[上传人]:简****9
  • 文档编号:95475989
  • 上传时间:2019-08-19
  • 文档格式:PPT
  • 文档大小:1.22MB
  • / 69 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • Mongodb分享,钟秋,2015-11-27,1. 背景 2. MongoDB入门 3. 索引 4. 复制 5. 分片 6. 管理与监控 7. 使用优化案例,主要内容,1.背景,1.1 从集中式到分布式 1.2 从sql到nosql 1.3 分布式一致性问题 1.4 CAP和BASE理论,1.1 从集中式到分布式,集中式的问题: 计算、存储能力瓶颈 单点问题 分布式的问题: 通信异常 网络分区 三态 节点故障 一致性,1.2 从SQL到NoSQL,SQL 建立在严格的关系模型基础之上,通常支持复杂的事务操作,提供严格的数据一致性、完整性约束,并且支持关联查询等 复杂事务,关联查询等特性影响读写性能,同时限制了关系型数据库的分布式扩展能力 NoSQL non-relational not only sql 是对SQL的补充: 高并发读写 海量数据 高可扩展和高可用性 还无法替代SQL: 复杂事务,严格的一致性 读写实时性 join 与SQL不同,NoSQL没有统一的标准,种类繁多(key-value,列式,文档,图),根据业务选择适合的,1.3 分布式一致性问题,强一致性 弱一致性 … 最终一致性 鱼和熊掌:分布式系统中数据一致性和系统性能之间的关系,1.4 CAP和BASE理论,CAP C:Consistency A:Availability P:Partition tolerance 分布式系统中,P是基础,所以 一般只能在C、A之间进行取舍。

      MongoDB处于哪一部分? BASE Basically Available,Soft state,Eventually consistent,2.MongoDB入门,2.1 什么是MongoDB 2.2 存储引擎与版本选择 2.3 mongo shell 2.4 mongodb数据模型 2.5 数据类型 2.6 bson 2.7 GridFS 2.8 模式设计 2.9 CRUD,2.1 什么是MongoDB,MongoDB是面向文档的,无模式(schema-less)的,支持二级索引,支持冗余、自动故障转移,支持数据分片、负载均衡,易扩展,能为海量数据提供支撑的非关系型数据库 MongoDB不支持跨多个文档的复杂事务,但保证单文档操作原子性 MongoDB不支持联接(join) MongoDB不支持MVCC(3.x wiredTiger引擎支持)2.2 存储引擎,版本2.8(3.0)开始支持插件式存储引擎 MMAPv1 WiredTiger(since 3.0),2.2 存储引擎-MMAPv1(1),读写锁 不支持MVCC Version 2.2 : 只支持进程级锁,一个Mongod实例一个锁。

      2.2 ≤ Version 2.8 : 支持库级锁,一个db一把锁 3.0.0 ≤ Version 支持 collection 级别的锁 内存 内存映射文件 交由操作系统管理,不能 手动配置管理 无强制内存量要求 缓存索引、热数据等,2.2 存储引擎-MMAPv1(2),Journal日志 Journal日志,是MongoDB的预写日志WAL(类似Mysql的Redo log) 因为Journal日志文件是磁盘上连续分配的空间,MongoDB在运行时通过顺序追加的方式记录,通过顺序IO来改善写性能同时,后台会定时刷写Journal日志文件以将写操作持久化到数据文件通过这种两次写的方式,当Mongodb因为一次非正常退出(比如崩溃),重启mongod进程后会根据journal下的文件来恢复数据以达到数据一致,防止数据丢失同时,一次正常的退出时MongoDB会刷写并删除journal目录下所有文件 journal除了故障恢复的作用之外,还可以提高写入的性能,通过批量提交(batch-commit)的方式减少IO次数,一般默认100ms刷新一次到journal,可通过下面参数修改: mitIntervalMs 值越低,刷新输出频率越高,journal的持久性也就越高(故障意外情况下丢失的数据越少),但同时意味着更多的磁盘IO。

      2.0以上版本默认开启的,可以通过nojournal = true 或--nojournal关闭,但建议开启 Journal文件是以“j._”开头命名的,且是append only的,如果1个journal文件满了1G大小,mongodb就会新创建一个journal文件来使用,一旦某个journal文件所记载的写操作都被使用过了,mongodb就会把这个journal文件删除通常在journal文件所在的文件夹下,只会存在2~3个journal文件,除非你使用mongodb每秒都写入大量的数据 使用 smallfiles 这个运行时选项可以将journal文件大小减至128M大小2.2 存储引擎-MMAPv1(3),数据文件 每个db有1个.ns(namespace)和若干个数据文件(.n)构成 数据文件随着数据的增多而增多,默认从64M开始,数据文件每新增一次,大小为上一个数据文件的2倍,上限为2GB这样的设计有利于防止数据量较小的数据库浪费过多的空间,同时又能保证数据量较大的数据库有相应的空间使用 MongoDB会使用预分配方式来保证写入性能的稳定(可通过–noprealloc关闭,但不建议)。

      预分配在后台进行预分配使得MongoDB始终保持额外的空间和空余的数据文件,从而避免了数据增长过快而带来的分配磁盘空间引起的阻塞版本3.0起引入,只支持64位系统,还不是默认的存储引擎,需要手动指定在即将到来的3.2版本将成为默认引擎 storageEngine = wiredTiger 读写锁 通过MVCC实现文档级别锁(更细粒度 的锁,大大提高并发读写性能) 以前的微分片,分库分表及其他为提高 MMAPv1并发率而实现的变通方案将 不再需要,2.2 存储引擎-WiredTiger(1),MVCC(snapshot, copyOnWrite),2.2 存储引擎-WiredTiger(2),内存 可配置缓存大小(默认为1GB或物理内存的一半) wiredTigerCacheSizeGB = 10 压缩 wiredTigerCollectionBlockCompressor=snappy/zlib wiredTigerIndexPrefixCompression=true wiredTigerJournalCompressor=snappy/zlib 高效的压缩算法,相比先前版本数据占用更少空间,,2.2 存储引擎-WiredTiger(3),Snapshots 和 Checkpoints Snapshot代表缓存中数据的一个一致性状态下的视图快照。

      WiredTiger会以一种一致性的方式将snapshot写到磁盘的所有数据文件上,这些持久化的数据被称为一个checkpoint 当一个checkpoint在写入过程中,上个checkpoint会保留,如果在这个过程中,系统崩溃,则可以恢复到上一个checkpoint的状态Checkpoint在此扮演的角色类似一个恢复点(recover point). 一旦一个新的checkpoint写入完成并可访问,则会释放上次的checkpoint Mongodb每60秒或者每2GB journal的时候创建一个checkpoint(即将snapshot写到磁盘) Journal 100MB 避免故障重启后丢失上次checkpoint之后的数据,2.2 存储引擎-WiredTiger(4),数据文件 db.collection.stats().wiredTiger.uri,2.2 版本选择,Mongodb版本:x.y.z X 是主要版本. 功能上要么不变要么就做很大的改动 Y 是发行版本号. 这种版本经常更新功能,包括一些新的特性并且常常不向后兼容偶数是稳定版本,奇数是开发版本 Z 版本号是用来修改BUG和安全性。

      历史版本:2.6.4 当前使用版本:3.0.1和3.0.3(WiredTiger存储引擎) 建议升级到3.0.7 即将发布的新版本:3.2.0 Document Validation partial indexes readConcern: { level: } left outer join (企业版),2.3 mongo shell,DBQuery.shellBatchSize = 100 注意数值字面量默认是双精度类型 help,2.4 mongodb数据模型,和关系型数据库的一个类比:,2.4 mongodb数据模型,·一个MongoDB实例可以承载多个数据库,它们之间可视为完全独立的,每个数据库都有独立的权限控制,各自的数据文件 集合就是一组文档,集合可以看作没有模式(shema-less)的表 特殊集合:Capped Collection, TTL Collection 文档是MongoDB中数据的基本单元,类似于关系数据库中的行 多个键及其关联的值有序地放置在一起便是文档,类似映射,散列或字典 文档的键是字符串(不能含有\0, ., $),文档中的值不仅可以是字符串,也可是其他类型。

      文档中的键/值对是有序的,不同序则是不同文档 键是区分大小写的,否则为不同文档 文档不能有重复的键,否则非法2.5 数据类型–基本类型和$type,db.collection.find( { field: { $type: 8 } } ); 尽量不要在同一字段上混合类型 注意js(mongo shell) 等一些弱类型语言数值 默认都视为浮点数,在使用时记得做类型转换2.5 数据类型–比较排序,当比较不同BSON类型的值时,MongoDB使用如下的比较排序,从低到高为: 注意:在3.0.0中,Date对象排在Timestamp对象之前先前版本中,Date和Timestamp对象是同等的2.5 数据类型-null,{ _id: 1, cancelDate: null } { _id: 2 } --------------- db.test.find( { cancelDate: null } ) { “_id“ : 1, “cancelDate“ : null } { “_id“ : 2 } --------------- db.test.find( { cancelDate : { $type: 10 } } ) { “_id“ : 1, “cancelDate“ : null } --------------- db.test.find( { cancelDate : { $exists: false } } ) { “_id“ : 2 },2.5 数据类型-内嵌文档和数组,通过内嵌冗余文档、数组的方式解决一些事务和join查询的需求。

      数组元素和内嵌文档字段也可以建索引 在文档中使用数组的时候,同时在文档中维护数组的长度 数组元素经常动态增减且元素过多的,不要使用内嵌数组的方式 数组不是HashSet,尽量不要使用数组来排重2.5 数据类型-ObjectId,_id的默认类型 时间戳(4byte,秒级)+机器标识(3byte)+PID(2byte)+计数器(3byte) 尽量客户端生成,减轻服务端压力,2.5 数据类型-自定义_id,findAndModify CAS Return new,2.5 数据类型-自定义_id,1)简单的方式(SimpleMongoIdGenerator): 一次获取一个,2.5 数据类型-自定义_id,2)池化的方式(PooledMongoIdGenerator):一次获取多个,2.6 BSON,Binary Json,传输和存储所使用的格式 16MB 更快的遍历速度,操作更简单,扩充的数据类型,无类似sql注入风险 优化 无需遍历定位,基于记。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.