StackSense ← 回到地图
数据与 AI / DATA

Data Infra

数据基础设施关注数据从写入到查询全链路的工程问题:存储引擎如何权衡读写放大,列式格式如何让分析查询更快,流处理如何在乱序和故障下给出正确答案,湖仓表格式如何在对象存储上提供事务语义。掌握这一层,才能读懂现代 OLAP、实时数仓和 Lakehouse 的设计取舍。

数据基础设施关注数据从写入到查询全链路的工程问题:存储引擎如何权衡读写放大,列式格式如何让分析查询更快,流处理如何在乱序和故障下给出正确答案,湖仓表格式如何在对象存储上提供事务语义。掌握这一层,才能读懂现代 OLAP、实时数仓和 Lakehouse 的设计取舍。

学完后你应该能回答

存储引擎(LSM / B+ Tree)

  1. LSM-Tree 为什么写入快但读可能变慢?compaction 究竟在解决什么问题,它又引入了什么新的放大?
  2. 同样是索引结构,B+ Tree 和 LSM-Tree 在写放大、读放大、空间放大上各自的典型表现是什么?什么场景该选哪个?
  3. RocksDB 的 leveled / universal / FIFO compaction 各适合什么写入模式?三种放大怎么权衡?
  4. LSM 默认会配 bloom filter 的理由?什么情况下 bloom filter 反而拖慢读?
  5. RocksDB 的 LSM compaction 会放大写入,为什么它还能在 SSD 上跑得比 B-Tree 快?compaction_job.cc 里哪一段最能说明问题?
  6. Redis 为什么选择单线程 + IO 多路复用而不是多线程?ae.c 和 networking.c 里怎么做延迟 / 吞吐权衡?
  7. Redis cluster 的 hash slot 和一致性哈希相比,为什么选了定长 16384 slots?
  8. 近年出现的 FoundationDB / TigerBeetle 这类”确定性仿真”数据库,它们的存储引擎和 RocksDB 有何根本不同?

列存 & 查询执行

  1. Parquet 为什么要按 row group + column chunk + page 三级切分?Dictionary encoding 和 RLE 分别在什么数据分布下有效?
  2. Dremel 的 repetition level 和 definition level 解决了嵌套结构列存中的什么问题?为什么不能直接展开成扁平列?
  3. 向量化执行相比火山模型快在哪里?为什么 ClickHouse 能比 Spark SQL 快一个数量级?
  4. ORC 和 Parquet 在 footer / stripe / bloom filter 上的差异?为什么 Hive 倾向 ORC 而 Spark 生态倾向 Parquet?
  5. Arrow 作为内存列存,零拷贝传递相比 Parquet 解决了什么问题?Flight 协议在其中起什么作用?
  6. ClickHouse 的 MergeTree 是什么层次的”LSM”?primary index、skip index、part 三级结构各自的角色?
  1. Kafka 的 exactly-once 是怎么实现的?idempotent producer、事务、consumer 的 read_committed 各自负责哪一环?
  2. Flink Watermark 本质是什么?late event 出现时 window 的行为取决于哪几个旋钮(allowedLateness / sideOutput / trigger)?
  3. Kafka 的 ISR、leader 选举、unclean leader election 对一致性分别意味着什么?
  4. Kafka tiered storage 把冷数据放到 S3 之后,新的元数据和延迟问题怎么解?
  5. Flink aligned checkpoint vs unaligned checkpoint 分别解决什么问题?代价是什么?
  6. event time 和 processing time 混用会产生什么坑?迟到数据和补发如何设计?
  7. Flink 的 state backend(memory / rocksdb)在 checkpoint 大小和 recovery 时间上的权衡?

Lakehouse / 事务

  1. Iceberg 和 Delta Lake 是怎么在 S3 这种只有 PUT 的对象存储上做出事务的?snapshot、manifest、commit conflict 解决分别是怎么做的?
  2. 湖仓在 S3 上的”事务”到底是什么?Iceberg / Delta / Hudi 解决 commit 冲突的机制差别?
  3. Iceberg 的 metadata JSON + manifest list + manifest 三层结构怎么支持 time travel 和 partition evolution?
  4. Hudi 的 CoW vs MoR 表各适合什么读写比?和 Iceberg 的 MoR 在 merge 策略上有什么不同?

MVCC / Schema 演进 / CDC

  1. MVCC 下一次事务看到的快照是怎么确定的?vacuum / GC 为什么是 MVCC 系统逃不开的代价?
  2. CDC(Debezium 等)为什么要解 binlog / WAL?上游 schema 变更时下游怎么不崩?
  3. Avro / Protobuf / JSON 在 schema evolution(加字段、删字段、改类型)上的兼容性规则?
  4. Debezium 的 snapshot + incremental 模式和 “log-only” 模式各适合什么场景?
  5. dbt 这类”SQL 做 ETL”工具的核心价值在哪?和传统 Airflow + 手写 SQL 相比测试和 lineage 怎么做?

核心概念

Lab

资料

工具