数据库分类
- 关系型
- MySQL
- Oracle
- SQL Server
- Access
- DB2, PostgreSQL
- …
- 非关系型
- MongoDB (文档类型)
- Redis (键值对类型)
- Memcached (键值对类型)
- HBase
NoSQL
- 易扩展,高性能,高可用
- 较容易映射复杂数据(key-value)
- 无事务特性要求(ACID特性:原子性,一致性,隔离性,持久性)
MongoDB4以后也支持ACID特性了
NoSQL设计
常见场景及设计方法(内嵌,父/子引用,反范式)
内嵌:
内嵌是指存在关联关系的文档,放在同一文档中,以数组的形式存放。
特点:
- 减少了关联查询
- 适合于单类需要描述的属性
- 不经常变化的属性(扩展,嵌套关联)
父引用:
父引用是指存在一对多的情况中,放在同一文档中,以数组的形式存放。
子应用:
子引用是指存在一对非常多的情况中,由于数据库文档存放限制,这个时候进行反向引用。
父子引用设计注意点:
- 引用数据内容是否非常多
- 引用数据量是否非常庞大,而且在增加
- 数据是否需要单独访问
范式:
范式是指按既定的用法,范式就是一种公认的模型或模式。
(前面的父/子引用,就是一种范式)
反范式:
不走寻常路。。
反范式设计需注意点:
- 是否有提升性能的区间
- 数据量的变化是否非常庞大,庞大到更新会异常低效
- 先考虑读写比,才考虑反范式
NoSQL设计原则小结:
- 优先考虑内嵌,如果要对内嵌数据单独访问,则不适合
- 数组不应该无限制增长(如果数组是一个大的量,考虑父引用;如果数组是一个极大的量,无限增长,考虑子引用)
- 先考虑读写比,考虑反范式,考虑应用场景(读大于写,用反范式可以提高系统性能)
Robo 3T
MongoDB GUI工具
MongoDB备份&恢复
把mongodb全部数据库备份到容器目录下的/temp/test
把容器目录下的test备份文件复制到宿主机上
把容器上的数据库备份文件,恢复到数据库上
总结:
- 备份方式:
docker cp
,mongodump
- 恢复方式:
docker cp
,mongorestore
Mongoose
Redis
特点:
- 高性能,可持久化
- key-value结构,支持多种数据类型
- 支持事务,数据的原子性(要么不做/全做)
应用场景:
- 缓存(读写性能优异)
- 计数&消息系统(高并发,发布/订阅阻塞队列功能)
- 分布式会话session&分布式锁(秒杀)
Redis vs Mongo
- 存储方式不一样:key-value vs Document
- 使用方式&可靠性不一样: MongoDB SQL & ACID支持
- 应用场景不一样: 高性能缓存 vs 海量数据分析
安装方式:
- 官方源码安装
- docker安装