架构设计系列(五):数据存储

一、概述

  在技术选择中,数据存储方案的选择极其重要。为自己的项目选择适合的数据存储是一项复杂的任务。不同的数据库的诞生是为了解决现实存在的业务场景,市面上的数据库产品众多,这样子也会导致在做技术选型的时候产生决策疲劳。
下图是关于云服务中不同数据库的详细列表:
在这里插入图片描述

二、支撑现代数据库的八种关键数据结构

  在数据存储的中,不同数据类型(如数值、字符串、地理坐标等)需要差异化处理机制。系统负载特征(写入密集型或读取密集型)也是关键考量因素,根据不同的实际应用场景,数据库采用的存储策略也不同,可以选择内存索引或磁盘存储策略。
在这里插入图片描述
  以下是当前主流的索引数据结构实现方案:

  • 跳表 (Skiplist)
    典型内存索引结构
    Redis等内存数据库标准实现方案
  • 哈希索引 (Hash Index)
    键值映射结构的底层实现范式
    支持高效点查询操作
  • 排序字符串表 (SSTable)
    基于磁盘的不可变映射存储结构
    采用预写日志(WAL)保证数据持久化
  • LSM树 (Log-Structured Merge-Tree)
    跳表与SSTable的复合架构
    通过层级合并实现高吞吐写入
  • B树族系 (B-tree Family)
    经典磁盘存储解决方案
    提供稳定的读写性能基线
  • 倒排索引 (Inverted Index)
    文档检索系统核心构件
    Lucene搜索引擎标准实现方案
  • 后缀树 (Suffix Tree)
    支持模式匹配的字符串索引
    生物信息学领域应用广泛
  • R树 (R-tree)
    多维空间索引技术
    地理空间检索(如K近邻查询)专用结构

三、sql语句在数据库中是如何执行的

  下图是sql在数据库中执行的流程:
在这里插入图片描述

  • sql通过网络层协议(eg:tcp)发送到数据库服务
  • 当数据库服务接收到sql语句以后将会在 命令分析器进行对的语法分析,其解析过程分为三个过程:
    • 词法解析:将sql 语句解析为token,主要是识别sql 语法中的关键字,判断是否有拼写及其他错误的用法。
    • 语法分析:分析语句的语法生成对应的抽象语法树(AST),其主要功能是识别语句是否合法,例如 form 后面是否 带表明,或者 是否以select。。等开头等。
  • 命令解析完成以后 根据其生成的语法数,数据库将对sql语句进行查询优化,生成对应的执行计划
  • 在做完一系列的解析以后,执行器会根据执行计划去调用对应存储引擎的执行方法操作数据库。
  • Access methods 提供获取数据的所需的逻辑处理,并从存储引擎中检索数据。
  • Access methods在数据检索时会先判断命令是否为查询语句,如果是则调用缓存管理器处理,缓存管理器会在缓存或数据文件中查找数据。
  • 如果是UPDATE or INSERT等语句,则开始调用事务管理器,开启事务。
  • 在事务开启期间,数据的操作处于上锁状态,事务管理器复杂锁的管理,这也是为了确保数据的ACID。

四、 CAP定理

  在计算机科学中CAP是一个著名的定律,对于该定律我想不同开发者有不同的理解。
在这里插入图片描述
分布式系统无法同时满足一致性(C)、可用性(A)和分区容错性(P)。

  • Consistency(一致性):所有节点访问同一份最新数据
  • Availability(可用性):每个请求都能获得非错误响应
  • Partition tolerance(分区容错性):网络分区下系统仍能运行

三选二原则在实际中很常用,但是简单化的描述会带来误解。

  • 定理核心约束
    • 分布式系统无法同时满足一致性(C)、可用性(A)和分区容错性(P)
    • 网络分区(Partition)的必然性:
      • 物理网络故障(链路中断、交换机故障)
      • 逻辑分区(高延迟、丢包)
  • 系统设计权衡分析
    • CP系统(一致性+分区容错性)

      • 强一致性(Linearizability)
      • 分区时拒绝写入(Unavailable)
      • 实际应用:
        • ZooKeeper:ZAB协议(ZooKeeper Atomic Broadcast)
        • etcd:Raft共识算法
        • HBase:基于HDFS的强一致性存储
      • 实际业务场景:
        • 金融交易系统
        • 分布式锁服务
        • 配置管理中心
    • AP系统(可用性+分区容错性)

      • 最终一致性(Eventual Consistency)
      • 分区时继续服务(Available)
      • 实际应用:
        • Cassandra:Gossip协议+Quorum机制
        • DynamoDB:向量时钟(Vector Clock)冲突解决
        • Riak:CRDTs(无冲突复制数据类型)
      • 实际业务场景:
        • 社交网络
        • 内容分发网络(CDN)
        • 实时推荐系统
    • CA系统(一致性+可用性)

      • 仅适用于单数据中心(非分布式)
      • 无法容忍网络分区
      • 实际应用
        • 单机数据库(如MySQL单实例)
        • 传统关系型数据库(无分布式扩展)
      • 实际业务场景:
        • 小型应用系统
        • 非关键业务存储
    • CAP与分布式协议

协议类型CAP倾向典型实现
共识协议CPPaxos/Raft/ZAB
Gossip协议APCassandra/Dynamo
2PC/3PCCP传统分布式事务
Quorum机制APDynamo风格系统

五、内存和存储的类型

在这里插入图片描述

六、sql语句可视化

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Resean0223

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值