当前数据库存储主要分为 关系型数据库(SQL) 以及 非关系型数据库(NoSQL);
MySQL 作为典型的 关系型数据库;而 Redis 作为典型的 非关系型数据库。
结构化:
在建立 SQL数据库时,我们需要对数据的类型与数据的大小做定义,我们需要设置主键、非空等约束。最终给我们呈现的是一张具有规则的表格。
非结构化:
在 Redis、MongoDB、Neo4j 等非结构化数据库中,数据不以表等形式存储,而是以:
Redis:键值对;
MongoDB:json存储,文档类型;
Neo4j:图类型;
关联性:
SQL中表与表之间存在关联,通过外键的方式建立;
非关联性:
NoSQL中不存在关联性,而是通过 json嵌套的方式;
规范化:
SQL中存在一套非常规范的查询语句:
# 查询语句示例
select id,name,age from tb_user where id=1;
# DQL实际执行顺序
FROM表名
WHERE条件
GROUP BY分组
HAVING分组后条件
SELECT字段
ORDER BY排序
LIMIT分页
非规范化:
NoSQL中:
# Redis
get user:1# MongoDB
db.users.find({_id:1})# elasticsearch
GET http://localhost:9200/users/1
事务:
SQL中,通过事务控制命令对事务进行控制;控制的原因主要为了保证数据的完整性以及数据的一致性。即ACID特性:
原子性:(Atomicity)
事务是不可分割的最小操作单元,要么全部成功,要么全部失败;一致性:(Consistency)
事务完成时,必须是所有数据保持一致状态;隔离性:(Isolation)
多组事务存在并发,但是根据数据库系统提供的隔离机制,互不干扰;持久性:(Durability)
事务一旦提交或回滚,其对数据库中数据的更改是持久性的。
start transaction; # 控制事务命令
# 被控制的事务
...
commit; # 正确即提交
rollback; # 错误即回滚
无事务:
NoSQL中,不存在事务管理的说法,故无法满足 ACID (原子性、一致性、隔离性、持久性);所以说,若对数据库安全性有需求,则应该首选关系型数据库。
磁盘存储:
SQL中,大多数采用磁盘存储,所以对比 NoSQL的内存存储,肯定性能不如其;但是满足ACID的要求;
内存存储:
NoSQL中,大多数数据存储在内存中,如此性能比较高,但是内存会因为突然关机而数据消失,所以比如 Redis,会定期从内存中存入磁盘,以此支持数据持久化。
诞生于2009年,全称 Remote Dictionary Server,是基于内存的键值型NoSQL数据库。
特征:
未完待续 2023年3月10日晚间完成