今天内容有大量的存储系统和数据库,不要搞混
单机存储
单机存储 = 单个计算机节点上的存储软件系统,一般不涉及网络交互
两个典型的单机存储系统 -> 本地文件系统、key-value存储
-
本地文件系统
-
key-value存储
分布式存储
分布式存储 = 在单机存储基础上实现了分布式协议,设计大量网络交互
两个经典的分布式存储系统 -> 分布式文件系统、分布式对象存储
所以分布式存储要更关注网络交互的有效性和网络交互的性能。
-
分布式文件系统
-
分布式对象存储
单机数据库
单机数据库 = 单个计算机节点上的数据库系统
事务在单机内执行,也可能通过网络交互实现分布式事务
单机关系型数据库
单机非关系型数据库
关系型数据库一般直接使用SQL交互,而非关系型数据库交互方式各不相同
非关系型数据库的数据结构千奇百怪,没有关系约束后,schema相对灵活
不管是否关系型数据库,大家都在支持SQL(子集)和“事务”
-
Elastic search
- 面向【文档】存储
- 文档可序列化成JSON,支持嵌套
- 存在【index】,index = 文档的集合
- 存储和构建索引能力依赖Lucene引擎
- 实现了大量搜索数据结构&算法
- 支持RESTFUL API、也支持弱SQL交互
-
mongoDB
- 面向【文档】存储
- 文档可序列化成JSON/BSON,支持嵌套
- 存在【collection】,collection = 文档的集合
- 存储和构建索引能力依赖wiredTiger引擎
- 4.0后开始支持事务(多文档、跨分片多文档等)
- 常用client/SDK交互,可通过插件转译支持SQL
-
Redis
- 数据结构丰富(hash表、set、zset、list)
- C语言实现,超高性能
- 主要基于内存,但支持AOF/RDB持久化
- 常用redis-cli/多语言SDK交互
最后还讲了分布式数据库解决的问题 ↓
- 解决了容量问题(分布式池化技术)
- 解决了弹性问题
- 解决了性价比问题
个人总结
今天学习的各种不同的存储系统和数据库系统的实现,以及分布式的技术,包括为什么使用分布式和分布式的优点,对数据库的选择上有了进一步理解。