版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、翼卡MONGODB培训 主讲人:周政 培训时间:2017-04-20 19:00-20:00 主要内容 1.mongo数据库简介 mongo的优势 mongo的局限性 2.mongodb的应用 mongo应用场景 mongo应用案例 WHEN我们选择mongodb 3.mongo主流版本介绍,以及各版本特性 4.mongo的使用 两种操作mongo的方式 mongo聚合操作 mongo地理位置操作 mongo索引的创建 5.mongo安装部署 mongo的两种安装部署方式 mongo服务器使用成本预算 第一部分:mongodb简介 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,
2、 是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据 结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数 据类型。 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 mongo的主要优势 MongoDB主要优势:灵活文档模型 + 高可用 + 水平扩展 mongo的局限性 1.多表关联:仅仅支持Left outer join 2.sql语句支持:查询为主,部分支持 3.多表原子性事务:不支持 4.16M文档限制 5.不支持中文排序 6.服务端javascript性能欠佳 mongo应用场景 应用案例 1.案例1 使用MongoDB做了O2O快递应用,将送快递骑手、
3、快递商家的信息(包含位 置信息)存储在 MongoDB,然后通过 MongoDB 的地理位置查询,这样很方便的实 现了查找附近的商家、骑手等功能,使得快递骑手能就近接单。 2.案例2 奇虎360公司用户认证数据的缓存层的实现。360公司用户登陆到他们网站后 ,还可以直接登陆其合作的网站,这里就涉及多重服务的单点登录(SSO),为了 更快地读取,用户的单点登录会话被存储到MongoDB中。MongoDB可以支持成千上 万的并行用户,每秒钟大致可以处理3万个操作以及每天支撑18亿次的查询。 3.案例3 世界上最大的农用收割机厂商,John Deere将传感器添加到了他们最新的设 备上,来帮助农场主
4、们管理他们的车队。采集的信息组合了历史和实时的数据,包 括天气预测、土壤情况、农作物特点以及其它的数据集。John Deere使用MongoDB 存储传感器数据并提供实时的分析功能,以便在用户界面上展现结果。 WHEN 我们选择mongodb 第二部分:mongo主流版本及特性 一.当前使用较多的主流版本: 2.X 默认使用MONGODB-CR认证方式,默认的存储引擎为MMAPV1 (该引擎为DB级别锁,且不支持数据压缩) 3.2 默认使用更安全的 SCRAM-SHA-1 算法鉴权,可配置使用存储引 擎wiredtiger(文档级别锁,支持数据压缩)。配置MMAPV1存储引擎时, 为集合级别锁
5、。较2.X版本,使用wiredtiger之后,存取性能提高7-10倍, 数据存储大小,只有MMAPV1的30%左右。 3.4 最新的mongodb版本,默认存储引擎为wiredtiger,在3.2上,做 了大量优化。分片集群里引入了 Zone 的概念,支持跨机房部署。 版本使用建议:废弃2.X版本,强烈建议使用3.2版本,鼓励使用3.4版本。 正菜来了:mongo的使用(1) 1.使用官网原生态的MongoClient String mongoUri = mongodb:/mongouser:thepasswordA110.66.187.127:27017/admin; MongoClient
6、URI connStr = new MongoClientURI(mongoUri); MongoClient mongoClient = new MongoClient(connStr); / 使用名为 someonedb 的数据库 MongoDatabase db = mongoClient.getDatabase(someonedb); / 取得集合/表 someonetable 句柄 MongoCollection collection=db.getCollection(table); collection.insert(XXX); MongoCursor cursor = colle
7、ction.find(filter).iterator(); while (cursor.hasNext() System.out.println(find document: + cursor.next(); collection.delete(BSON) collection.update(BSON) . mongo的使用(1) 2.spring-mongo方式操作数据库 在spring-bean.xml文件中配置mongo数据源 java类中注解MongoTemplate (在要使用的类中) Autowired private MongoTemplate mongoTemplate; 两
8、种java操作mongo方式的选择 1.优先情况下,采用spring-mongo方式操作mongo,可避免新手采用MongoClient, 不停地new,close操作,导致请求数据库模型为短连接方式,每次短连接都会增 加建立 tcp 连接 + mongodb鉴权的开销,并且并发的请求数会受限于连接数 限制,极大的影响性能; 2.对于很多旧系统,spring版本太低spring3.X,导致不能支持使用高版本的mongo ,系统就不得不使用官方原生态的MongoClient。 使用MongoClient时,要注意这个类官网介绍是单例线程安全的,也就是说,一 个数据源只需要new一个MongoCl
9、ient即可,它自带线程池,可支持并发线程安全 操作mongo。 此外,mongo官网上,CRUD操作,aggregate等操作都有示例,开发者也较为 简单获取API文档。 备注:具体MongoClient,spring-mongo具体操作示例,参见我发出来的mongo使用手册 (文档包括多mongo数据源配置方法) mongo聚合操作 1.group操作 db.term.aggregate( $match:library_id:3607, $limit:5, $group:_id:$version, count: $sum:1, $sort:count:-1 ) term:你要查询的集合名称
10、 $match:匹配条件,可选 $limit:结果条数,可选 $group:聚合规则 $sort:对查询结果排序,-1表示降序 mongo还支持max,min,sum,count等一系列操作 mongo地理位置操作 地理位置搜寻 db.lbs.find( loc: $near: $geometry: type: Point, coordinates: 113.323568, 23.146436 , $maxDistance: 1000 ) mongo创建索引规则 当你抱怨MongoDB集合查询效率低的时候,可能你就需要考虑使用索引了,或者,你没 有按照正确的方式创建索引。 mongo的索引有单
11、字段索引、复合索引、多key索引、文本索引等,每种索引有不同的使 用场合: 1.单字段索引,db.person.createIndex( age: 1 ),即查询条件只为age字段。 2.复合索引重中之重,也是使用最广泛的。例如db.person.createIndex( age: 1, name: 1 ) 针对age, name这2个字段查询条件,建索引。 复合索引也能满足复合索引条件前缀的查询走索引加速。比如,上面建好的复合索引,查询语 句db.person.find( age: 18 )的查询也能通过该索引来加速;但db.person.find( name: jack )则无 法使用该复
12、合索引。 复合索引的顺序问题: 复合索引创建,每个索引是有顺序的,比如上面的索引,就是age正序,name也是正序(逆序值 为-1)。复合索引的顺序在一般查询条件下没卵用,但带有sort排序的查询中,就极大影响查询 效率。 例如 对表建索引db.person.createIndex( name: 1,age: 1 ) 查询条件db.persons.find().sort(name:1,age:1).explain() queryPlanner : . winningPlan : stage : FETCH, inputStage : stage : IXSCAN, /索引扫描 keyPatte
13、rn : name : 1, age : 1 , indexName : name_1_age_1, . direction : forward, indexBounds : name : MinKey, MaxKey , age : MinKey, MaxKey . ok : 1 基于name:1,age:-1的排序 db.persons.find().sort(name:1,age:-1).explain() 复合索引之索引字段顺序对查询性能也有很大影响。对于db.person.createIndex( name: 1, age: 1 )这 个索引。age字段的取值很有限,即拥有相同age
14、字段的文档会有很多;而name字段的取值则丰富很多, 拥有相同name字段的文档很少;显然先按name字段查找,再在相同name的文档里查找age字段更为 高效。 3.多key索引 当索引的字段为数组时,创建出的索引称为多key索引,多key索引会为数组的每个元素建立一 条索引,比如person表加入一个habbit字段(数组)用于描述兴趣爱好,需要查询有相同兴趣爱好的人 就可以利用habbit字段的多key索引。 name : jack, age : 19, habbit: football, runnning db.person.createIndex( habbit: 1 ) / 自动创
15、建多key索引 db.person.find( habbit: football ) 4.其他索引 哈希索引(Hashed Index)是指按照某个字段的hash值来建立索引,目前主要用于MongoDB Sharded Cluster的Hash分片,hash索引只能满足字段完全匹配的查询,不能满足范围查询等。 地理位置索引(Geospatial Index)能很好的解决O2O的应用场景,比如查找附近的美食、 查找某个区域内的车站等。 文本索引(Text Index)能解决快速文本查找的需求,比如有一个博客文章集合,需要根据博客 的内容来快速查找,则可以针对博客内容建立文本索引。 此外,建索引,
16、最好在建表的时候建索引。不要在没想好查询业务需求时,就盲目使用 mongo。不然,数据量增长到千万级别之后,再建索引,可能就要慎重了,因为此时建索引,可能 要花半个多小时,亿级别的跟不用说了。 万一,上面的情形发生了, 在生产环境,咋办? 那就只能最终最无奈的处理办法了: 第一步:考察需要建索引的表insert document量大不大 ? 第二步:若第一步中很大,新建一张临时表,将数据往临时表中写。否则,第三步 第三步:以后台进程方式建索引,即db.person.createIndex( age: 1, name: 1 ,background:true),否 则,建索引的表将被锁住,数据无法
17、往表中插入 第四步:待第三步完成,若第二步中往临时表写数据,则切换程序往原表写数据,接着,把临时表 的数据,用mongoexport 导出,进一步使用mongoimport导入 mongo的几种安装方式 1.复制集Replica Sets(主从) 一般采用一主一从一仲裁,或者一主多从一仲裁。很多情况下,自己搭建主从 mongodb,不用仲裁节点。 这种安装方式,比较适合数据量不大的场景(腾讯的万兆IO mongo除外,他们就是玩 命的用固态硬盘,牛逼的cpu,大内存来搞高并发数据操作)。主节点死掉之后,从节点选举 成为主节点,保证服务持续稳定进行。mongo的三大特性之一的高可用,也是基于此。
18、(具 体涉及的心跳选举主节点算法,以后再来探讨) 2.分片集群 在物联网领域,随着接入的实时设备越来越多,高并发,海量数据情形下,任何一台 单机数据库,终将无法承受数据的压力。mongo的分片集群,很好的解决了水平扩展问题。 mongo的水平集群如下图: mongo使用成本计算 不得不说,mongo使用成本及其昂贵,要是一些没啥用的数据,建议不要玩啥mongo,不然,公司被你玩垮都是有可能的。 比如,复制集mongo Replica Sets,平均存储1T的数据,就必须两台服务器2T的空间为这1T的数据买单,算上服务器其他部分费用,相当可 观。 案例一 某西班牙银行 该银行希望存储6个月的日志
19、。每个月的数据需要3TB的空间。那么6个月的数据需要使用6 x 3 = 18 TB的空间。他们知道他们希望分析上个月的日志, 因此工作集的大小被设为:1个月的数据(3TB)加上索引(1TB),即一个4TB的工作集。 在概念验证环境中,他们选择使用约10%的数据(2TB)。生产需求需要一个4TB大小的工作集,4TB/18TB数据再乘上我们2TB的概念验证数据,从而 得到444GB的概念验证工作集大小。用户最多只能提供每台128GB容量的服务器,因此在概念验证环境中,他们选择采用4个分片,每个分片有128G 存储。4 x 128GB = 512GB能够满足444GB的要求。每个分片上用于读取可用性及冗余的3个复制集成员为我们提供了4 x 3 = 12台物理机器。两台应用服 务器运行mongos,虚拟机上的三台配置服务器进行概念验证配置。 为满足在128GB的服务器中存放4TB部署工作集及18TB数据,他们选择分割成36个分片,每个分片有128GB的内存(RAM)及512GB的可用存储。总的 看来:一共有36 * 128GB = 4
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 上海工会管理职业学院《临床血液学检验技术》2025-2026学年期末试卷
- 沈阳音乐学院《薪酬管理》2025-2026学年期末试卷
- 沈阳体育学院《会计实训》2025-2026学年期末试卷
- 沈阳工业大学《旅游资源开发与管理》2025-2026学年期末试卷
- 上海电机学院《商业银行经营学》2025-2026学年期末试卷
- 上海海关学院《外贸单证实务》2025-2026学年期末试卷
- 上海交通职业技术学院《卫生人力资源管理》2025-2026学年期末试卷
- 沈阳建筑大学《海商法》2025-2026学年期末试卷
- 沈阳农业大学《大众传播学》2025-2026学年期末试卷
- 上海东海职业技术学院《传播概论学》2025-2026学年期末试卷
- 房产产权变更授权委托书样本
- 工程项目竣工验收确认单范本
- (武大)公共管理学-15-第五章公共管理的过程1课件
- 金属封隔器高温密封:数值模拟研究
- 《藤野先生》讲义
- “日管控、周排查、月调度”记录和报告格式参考模板
- 胸部CT读片讲解
- 团体员工意外保险
- 河南省安全生产职责清单
- 子宫内膜癌的试题及答案
- 码头环保管理办法
评论
0/150
提交评论