分布式存储

1. 分布式存储基础

1.1 数据分片(Sharding)

哈希分片

  • 对 key 计算哈希值,取模得到分片

  • 优点:分布均匀

  • 缺点:扩缩容需要数据迁移

/**
 * 简单哈希分片
 */
public class HashSharding {
    private int shardCount;

    public HashSharding(int shardCount) {
        this.shardCount = shardCount;
    }

    public int getShard(String key) {
        int hash = key.hashCode();
        // 处理负数哈希值
        return Math.abs(hash % shardCount);
    }
}

// 问题:扩容时几乎所有数据需要迁移
// 3 节点 -> 4 节点:约 75% 数据需要迁移

范围分片

  • 按 key 的范围分片

  • 优点:支持范围查询

  • 缺点:可能数据倾斜

1.2 一致性哈希详解 ⭐⭐⭐⭐⭐

基本原理

一致性哈希实现

虚拟节点

带权重的一致性哈希

1.3 数据副本

副本策略

副本一致性

模式
特点
应用

主从复制

写主节点,读从节点

MySQL, Redis

多主复制

多个节点可写

Cassandra

无主复制

Quorum 机制

DynamoDB

1.4 Quorum 机制 ⭐⭐⭐⭐

2. LSM Tree 深入分析 ⭐⭐⭐⭐⭐

2.1 LSM Tree 原理

2.2 写入流程

2.3 读取流程

2.4 Compaction 策略

2.5 LSM Tree 优化

3. Cassandra 详解 ⭐⭐⭐⭐

3.1 架构特点

  • 完全去中心化,无单点故障

  • P2P 架构,节点对等

  • AP 系统:最终一致性

3.2 数据模型

3.3 写入路径详解

3.4 读取路径详解

3.5 核心机制

4. HBase 详解 ⭐⭐⭐⭐

4.1 架构设计

4.2 Region 管理

4.3 Region 负载均衡

4.4 热点问题与 Row Key 设计

5. Dynamo 设计原理 ⭐⭐⭐⭐

5.1 Dynamo 概述

5.2 核心技术

5.3 版本控制与冲突解决

5.4 Sloppy Quorum

6. 面试要点总结

6.1 分布式存储核心

知识点
重要程度
考察频率

一致性哈希

⭐⭐⭐⭐⭐

非常高

LSM Tree

⭐⭐⭐⭐⭐

Quorum 机制

⭐⭐⭐⭐

数据分片

⭐⭐⭐⭐

副本策略

⭐⭐⭐⭐

6.2 关键记忆点

7. 常见面试题

7.1 一致性哈希

Q1:一致性哈希如何解决数据倾斜?

Q2:一致性哈希节点下线时如何处理?

7.2 LSM Tree

Q3:LSM Tree 为什么写性能好?

Q4:LSM Tree 读取为什么可能慢?

Q5:比较 B+ Tree 和 LSM Tree?

7.3 存储系统

Q6:Cassandra 和 HBase 的区别?

Q7:如何设计一个支持高并发写入的 KV 存储?

Last updated