这是我参与「第三届青训营-后端场」笔记创作活动的第五篇笔记
存储
单机存储
单机存储 = 单个计算机节点上的存储软件系统,一般不涉及网络交互。
例:Linux文件系统的两大结构:IndexNode(文件存储),Direct Entry(key-value)。
分布式存储
HDFS - 大数据时代的基石
- 特点:
- 支持海量数据存储
- 高容错性
- 弱POSIX语义
- 使用普通X86服务,性价比高 什么是POSIX?POSIX:Portable Operating System Interface Unix(可移植操作系统接口)。
举一个例子:完成同一功能,不同内核提供的系统调用(也就是一个函数)是不同的,例如创建进程,linux下是fork函数,windows下是creatprocess函数。好,我现在在linux下写一个程序,用到fork函数,那么这个程序该怎么往windows上移植?我需要把源代码里的fork通通改成creatprocess,然后重新编译...
posix标准的出现就是为了解决这个问题。linux和windows都要实现基本的posix标准,linux把fork函数封装成posix_fork(随便说的),windows把creatprocess函数也封装成posix_fork,都声明在unistd.h里。这样,程序员编写普通应用时候,只用包含unistd.h,调用posix_fork函数,程序就在源代码级别可移植了
Ceph - 开源分布式存储系统中的万金油
- Ceph的核心特点∶
- 一套系统支持对象接口、块接口、文件接口,但是一切皆对象。
- 数据写入采用主备复制模型。
- 数据分布模型采用CRUSH算法。
数据库
单机数据库
单机关系型数据库
Oracle, MySQL, PostgreSQL
-
关系型数据库的通用组件︰
- Query Engine ——负责解析query,生成查询计划。
- Txn Manager——负责事务并发管理。
- Lock Manager ——负责锁相关的策略。
- Storage Engine ——负责组织内存/磁盘数据结构。
- Replication——负责主备同步。
-
关键内存数据结构:
- B-Tree
- B+-Tree
- LRU List
- ...
-
关键磁盘数据结构:
- WriteAheadLog (RedoLog)
- Page
单机非关系型数据库
MongoDB、Redis、Elasticsearch三足鼎立
- 关系型数据库一般直接使用SQL交互,而非关系型数据库交互方式各不相同。
- 非关系型数据库的数据结构千奇百怪,没有关系约束后, schema相对灵活。
- 不管是否关系型数据库,大家都在尝试支持SQL(子集)和“事务”。
- ElasticSearch
- 面向「文档」存储。
- 文档可序列化成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交互。
分布式数据库
- 单点容量有限,受硬件限制。
- 储存节点池化,动态扩缩容。