概述
- 三高需求:
- High performance对数据高并发读写的要求
- High Storage对海量数据的高效率存储和访问的需求
- High Scalability/Availability对数据库的高扩展和高可用性的需求
- 应用场景:
- 社交场景
- 存储用户信息,用户发表朋友圈信息,通过地理位置索引实现附近的人、地点等功能
- 游戏场景
- 存储游戏用户信息,用户的装备,积分等直接以内嵌文档的形式存储,方便查询、高效率存储和访问
- 物流场景
- 存储订单信息,订单状态在运送过程中会不断更新,以内嵌数组的形式来储存
- 物联网场景
- 接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析
- 视频直播
- 存储用户信息,点赞互动信息等
- 社交场景
- 适合使用MongoDB共同特点:
- 数据量大
- 写入操作频繁
- 价值较低的数据,对事务性要求不高
- 什么时候选择?
- 简介:
- MongoDB是一个开源、高性能、无模式的文档型数据库,用于简化开发和方便拓展,是NoSQL数据库的一种
- 支持的数据结构非常松散,叫BSON,既可以存储比较复杂的数据类型,又很灵活
- 其记录是一个文档,是一个由字段和值对组成的数据结构
- MongoDB文档类型类似于JSON对象,即一个文档就是一个对象
- 字段的数据类型是字符型,它的值除了使用基本的一些类型外,还可以包括其他文档,普通数组和文档数组
- 与MySQL的对比:
- MongoDB的特点:
- 高性能
- 高可用性
- 高扩展性
- 丰富的查询支持
数据类型
基本操作
数据库
- 操作:
- 选择和创建数据库:use dbname(若不存在则自动创建)
- 查看有权限查看的所有的数据库命令:show dbs
- 查看当前正在使用的数据库命令:db
- 删除数据库:db.dropDatabase()
- 数据库命名规则:
- 不能是空字符串
- 不得含有‘ ’(空格)、.、$、/、\、\0
- 应全部小写
- 最多64字节
- 特殊的数据库
- admin
- local
- config
集合
-
介绍:
- 类似关系型数据库中的表
- 可以显式创建,也可以隐式创建
-
操作:
- 集合的显式创建:db.createCollection(“name”)
- 查看当前库中的表:show tables
- 集合删除:db.name.drop()
文档
- 单个文档插入
- 批量插入
- 单个查询
-
查询所有
- db.comment.find()
-
按一定条件查询
- db.comment.find({user:‘1003’})
-
查询所有数据,只显示部分字段
- db.comment.find({},{userid:1,nickname:1})
-
文档更新
- db.collection.update(query,update,options)
- 覆盖修改:db.comment.update({_id:“1”},{likenum:NumberInt(1001)})
- 局部修改:db.comment.update({_id:“1”},{$set:{likenum:NumberInt(1001)}})
- db.collection.update(query,update,options)
-
删除文档
- db.name.remove(条件)
- db.comment.remove({_id:“1”})
- db.name.remove(条件)
-
文档的统计查询
- 统计查询:db.collection.count(query,options)
- 括号内不带条件查询所有
-
文档的分页列表查询
- 排序查询:
索引
介绍:
- 支持在MongoDB中高效地执行查询
- 索引是特殊的数据结构,它以易于遍历的形式存储集合数据集的一小部分
- 索引存储特定字段或一组字段的值,按字段值排序
索引类型:
- 单字段索引:MongoDB支持在文档的单个字段上创建用户定义的升序/降序索引
- 复合索引
- 地理空间索引:平面几何的二维索引和球面几何的二维球面索引
- 文本索引:支持在集合中搜索字符串内容,这些文本索引不存储特定语言的停止词,而将集合中的词作为词干,只存储根词
- 哈希索引:支持基于散列的分片,它对字段值的散列进行索引
索引操作:
-
查看:db.collection.getIndexes
-
创建:db.collection.createIndex(keys,options)
-
移除:db.collection.dropIndex(index)
- 移除所有:db.collection.dropIndexes
- _id的字段的索引无法删除
-
执行计划:db.collection.find(query,options).explain(options)
集群和安全
副本集-Replica Sets
-
介绍:
- 是一组维护相同数据集的mongod服务,可提供冗余和高可用性,是所有生产部署的基础
-
两种类型:
- 主节点:数据操作的主要连接点
- 从节点:数据冗余备份节点,可以读或选举
-
三种角色:
- 主要成员Primary:接受所有写操作,就是主节点
- 副本成员Replicate:从主节点通过复制操作以维护相同的数据集,及备份数据,不可写操作,但可以读操作
- 仲裁者Arbiter:不保留任何数据的副本,只具有投票选举作用
分片集群-Sharded Cluster
- 是什么:
- 是一种跨多台机器分布数据的方法,MongoDB使用分片来支持具有非常大的数据集和高吞吐量操作的部署
- 分片是指将数据拆分,将其分散在不同的机器上的过程
- 分片集群包含的组件:
- 分片(存储):每个分片包含分片数据的子集,每个分片都可以部署为副本集
- mongos(路由):mongos充当路由器,在客户端 应用程序和分片集群之间提供接口
- config servers(调度的配置):配置服务器存储群集的元数据和配置设置
安全认证
用户和角色权限
- 保证mongodb的安全步骤:
- 相关步骤:
- 角色命令:
副本集环境
1.生成一个key文件到当前文件夹中
2.分别编辑几个服务的mongod.conf
- SpringDataMongoDB连接副本集