MongoDb数据库知识点

Nosql数据库知识点汇总

第一章 初识Mongodb

1.1【掌握】大数据的时代对数据存储的挑战

  • 高并发读写需求

  • 高效率存储和访问需求

  • 高扩展性

1.2【掌握】Nosql简介、特点、与传统数据库的区别

1.2.1 Nosql简介
  • 出现:1988年

  • 非关系型数据库,主要是强调键值存储和文档存储数据库的优点,而不是单纯的反对关系型数据库

  • Nosql是 Not Only SQL 的缩写

  • Nosql的出现是主要是解决大规模数据集合下数据种类多样性带来的挑战

1.2.2 Nosql特点【未完善】
  • 易扩展性

  • 高性能

  • 灵活的数据模型

  • 高可用

1.2.3Nosql(非关系型数据库)与Mysql(关系型数据库)的区别【未完善】
  • 存储方式

  • 存储结构

  • 存储规范

  • 扩展方式

  • 查询方式

  • 规范化

  • 事务性

  • 读写性能

  • 授权方式

1.3【背】Nosql基础理论

1.3.1 CAP原则

CAP原则包括 一致性(C),可用性(A),分区容错性(P);

CAP原则中,一个分布式系统只能同时实现上诉的两个要素,不可同时实现三个。

在这里插入图片描述

CAP原则-三大要素内容
一致性(consistency)系统在执行过某项操作之后,仍然处于一致的状态。在分布式系统中,更新操作执行成功后,用户应该读取到最新的值,这样的系统被认定为具有一致性。
可用性(Availability)每一个操作在一定的时间内返回结果,若超时,则认为是不可用的。
分区容错性(P->Partition Tolerance)系统在遇到网络分区故障时,任然可以保证对外提供满足一致性和可用性的服务,除非整个网络都发生了故障。
1.3.2 BASE理论
发表人Dan Pritchett
BASE理论是对CAP原则中 一致性和可用性权衡的结果,也是CAP理论的延伸
核心思想即使无法保证系统的强一致性,也要根据自身业务特点,使用恰当方式来达到最终一致性
BASE理论-三大要素内容
基本可用是指在分布式系统中再出现不可预知的故障的时候,允许部分可用性损失,保证系统的核心可使用即可
软状态允许系统在不同节点的数据副本之间进行数据同步的过程存在延迟
最终一致性是指在系统中的所有数据副本经过一定时间后,最终达到一致的状态
BASE理论与ACID理论的区别BASE理论ACID理论
一致性最终一致性强一致性
可用性可用性优先可用性不做要求
灵活性变化速度快、灵活难以变化
1.3.3 最终一致性
类型描述
强一致性要求集群中所有的节点状态实时保持一致
弱一致性不要求集群中所有的节点状态实时保持一致,最终一致性是弱一致性的一种特殊形式。 Nosql通常选择最终一致性的思想设计,从而使得系统达到高可用性和高扩展性

1.4 Nosql数据库理论【了解】

Nosql数据库分类描述
键值对存储数据库Nosql中的一种,键值对存储数据库的结构实际上是一个映射,即(key)是键查找每条数据的唯一标识符
文档存储数据库文档是结构化的数据(JSON格式)
列式存储数据库以列为单位储存数据
图形存储数据是Nosql中的一种类型,主要应用图形理论来存储实体之间的关系信息

第二章

第三章 Mongodb数据库操作

3.1 mongodb数据库基本操作

操作名称-数据库操作命令
启动mongodb
新建数据库use DATABASE_Name
查看数据库show dbs
查看当前数据库db
删除数据库db.dropDatabase

3.2 集合操作

集合操作
【显式】创建集合db.createCollection(COLLECTION_NAME,[OPTIONS])
【隐式】创建集合db.createCollection(COLLECTION_NAME)
查看集合show.collections
删除集合db.COLLECTION_NAME.drop

3.3 文档操作

文档操作
单文档插入db.collection_name.insert(document)
多文档插入db.collection_name.insertMany({document1,document2})
查询文档(整个文档)db.collection_name.find().pretty() 【pretty()整理文档更好阅读】
查询文档(条件查询)“查看条件查询表”
文档更新【例子】db.comment.update({“context”:“1234”},{$set{“context”:“2345”}})
文档删除(整个文档)db.collection_name.remove
文档删除(条件删除)【例子】db.collection_name.remove({“nickeName”:“陶”})

3.4 查询操作【扩展】

操作符操作符名称操作例子
$anddb.comment.find({$and:[{“userid”:“1005”,“nickName”:“陶”}]})
$ordb.comment.find({$or:[{“userid”:“1”},{“userid”:“2”}]})
$gt大于db.comment.find({“userid”:{$gt:“1005”}}).pretty()
$lt小于db.comment.find({“userid”:{$lt:“1005”}}).pretty()
$gte大于等于db.comment.find({“userid”:{$gte:“1005”}}).pretty()
$lte小于等于db.comment.find({“userid”:{$lte:“1005”}}).pretty()
$ne不等于db.comment.find({“userid”:{$ne:“1005”}}).pretty()
$in包含db.comment.find({“_id”:{$in:[“1”,“3”]}}).pretty()
$nin不包含db.comment.find({“_id”:{$nin:[“1”,“3”,“5”]}}).pretty()
特定类型查询操作操作例子
NUll 类型查询db.comment.find({“state”:null}).pretty()
正则表达式查询 【模糊查询】db.comment.find({“content”:“/^专家/”}).pretty()
精确查询db.comment.find({“phone”:{“homePhone”:“1234”,“mobilePhone”:“1234”}}).pretty() --二维数组精确查询
点查询db.comment.find({“phone.homePhone”:“1234”}) --二维数组点查询

3.5 聚合操作

aggregate是指查询集合中所有文档

管道操作符操作名称例子
$group分组db.comment.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: group:{"_id":"userid}}]).pretty()
$limit限制db.comment.aggregate({$limit:3})
$sort排序db.comment.aggregate([{$sort:{“age”:-1}}])-1 降序 1升序
$project修改文档结构db.comment.aggregete([{$project:{“_id”:“0”}}])删除增加字段
$skip跳过指定数量文档,返回剩下的文档db.comment.aggregate([{$skip:{“_id”:“4”}}])
管道表达式表达式名称例子
$sum总和db.product.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: group:{"_id":"type",“price”:{ s u m : " sum:" sum:"price"}}}])
$avg平均值db.product.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: group:{"_id":"type",“price”:{ a v g : " avg:" avg:"price"}}}])
$min获取对应值的最小值db.product.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: group:{"_id":"type",“price”:{ m i n : " min:" min:"price"}}}])
$max获取对应值的最大值db.product.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: max:{"_id":"type",“price”:{ m a x : " max:" max:"price"}}}])
$push将分组结果插入到一个数组中db.product.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: group:{"_id":"type",“tags”:{ p u s h : " push:" push:"name"}}}])
$first获取分组文档中的第一个文档db.product.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: group:{"_id":"type",“FirstProcuct”:{ f i r s t : " first:" first:"name"}}}])
$last获取分组文档中的最后一个文档db.product.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: group:{"_id":"type",“LastProduct”:{ l a s t : " last:" last:"name"}}}])

第四章 副本集

4.1 副本集概述

副本集是一组Mongodb实例保持其相同数据集的集群,由一个主服务器和多个副服务器构成。通过复制将数据的更新由主服务器推送到各个副本服务器上。副本集可提供冗余和高可用性,是所有生产部署的基础。

功能描述
数据的冗余副本集可以确保副本结点与主节点数据的更新,以防止单个数据库服务崩溃造成的数据丢失问题
自动故障转移副本集没有固定的主节点,整个集群会选举出一个主节点,当这个主节点不能正常工作时,会选举一个副本结点作为主结点,以保证客户端数据的正常使用
读写分离副本集可以将读写请求分流到所有副本上,以减轻主节点读写压力

4.2 副本集架构

主节点 副节点 仲裁节点

在这里插入图片描述

第五章 分片

5.1 架构

架构描述数量服务器
分片服务器实际储存数据的组件,持有完整数据集的一部分3shard1(主、副、仲裁),shard2,shard3
路由服务器主要提供客户端应用程序与分片集群的交互的接口2mongos1,mongos2
配置服务器储存着分片集群的持久化元数据3主、副、副

在这里插入图片描述

第六章 GridFS

6.1 存储结构

GridFS使用两个集合存储文件。一个集合是fs.chunks, 用于存储文件内容的二进制数据;一个集合是fs.files,用于存储文件的元数据。

fs.chunks: GirdFS将文件切分为多个大小为255KB的二进制数据块

fs.files: 存储文件的元数据

Grids 查询的过程:使用GridsFS 查询时。Mongodb首先从集合fs.flies中获取数据信息,根据获取的元数据集合,fs.chunks查找符合要求的块(files_id 与 元数据中_id相同的块)

第七章 Redis 操作

7.1 特点

  • 读写速度快
  • 支持多种数据结构
  • 功能丰富
  • 应用广泛

7.2 应用场景

  • 缓存
  • 构建队列系统
  • 排行榜
  • 实时的反垃圾系统
  • 过期数据自动处理
  • 计数器应用

7.3 支持的数据结构

  • String
  • List
  • Set
  • Hash
  • Sorted Sets

7.4 键操作

7.4.1 redis操作
启动redis服务: Redis-server.exe redis.windows.conf
启动redis客户端: redis-cil.exe -h 127.0.0.1 -p 6379
7.4.2 键操作
操作命令【键】描述例子
set设置单个键的值set name “tss”
mset设置多个键的值set name “tss” age “18”
key查找所有给定模式的正则表达式的键key * 【查询所有】
get获取单个值get name
mget获取多个值mget name age
dump序列化指定的键并返回被序列化的值dump name
exists判断键是否存在 【0 不存在 1存在】exists name
type返回键的类型type name
rename修改键的名称rename name username
expire设置键的生存时间expire name 30
ttl查看指定键的剩余过期时间ttl name
persist移除指定键的生存时间persist name
del删除指定键del name
操作命令【字符串】描述例子
getset获取键并赋值getset name “tss”
strlen获取键的长度strlen name
getrange获取键值指定索引范围的值getrange name 0 1 【返回 ”ts“】
setrange设置键从指定索引范围的值setrange name 1 “new” 【返回 “tnew”】
append在指定键的值末尾添加新内容append name '“add” 【返回 ”tssadd“】
|

| strlen | 获取键的长度 | strlen name |
| getrange | 获取键值指定索引范围的值 | getrange name 0 1 【返回 ”ts“】 |
| setrange | 设置键从指定索引范围的值 | setrange name 1 “new” 【返回 “tnew”】 |
| append | 在指定键的值末尾添加新内容 | append name '“add” 【返回 ”tssadd“】 |

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值