存储&数据库产品剖析| 青训营笔记

279 阅读3分钟

这是我参与「第三届青训营-后端场」笔记创作活动的第五篇笔记

存储

单机存储

单机存储 = 单个计算机节点上的存储软件系统,一般不涉及网络交互。
例:Linux文件系统的两大结构:IndexNode(文件存储),Direct Entry(key-value)。

分布式存储

HDFS - 大数据时代的基石

  • 特点:
    • 支持海量数据存储
    • 高容错性
    • 弱POSIX语义
    • 使用普通X86服务,性价比高 什么是POSIX?POSIXPortable 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三足鼎立

  1. 关系型数据库一般直接使用SQL交互,而非关系型数据库交互方式各不相同
  2. 非关系型数据库的数据结构千奇百怪,没有关系约束后, schema相对灵活。
  3. 不管是否关系型数据库,大家都在尝试支持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交互。

分布式数据库

  • 单点容量有限,受硬件限制。
  • 储存节点池化,动态扩缩容。