1. DDIA-数据系统基础-笔记

1. DDIA-数据系统基础-笔记

💡 原文中文,约7500字,阅读约需18分钟。
📝

内容提要

本文讨论了数据系统基础的可靠性、可扩展性、可维护性、数据模型与查询语言、数据存储与检索、数据编码与演化等方面。介绍了经典的数据结构和索引结构,以及不同的数据存储和查询方式。同时还涉及了数据编码和数据交流的相关概念。

🔎

延伸解读

可靠性:从硬件故障到系统韧性

文章引用Jeff Dean的经典数据,展示了大规模集群中硬件故障的常态:每年约0.5次过热、1次PDU故障、20次机架故障等。这提醒架构师,可靠性设计必须基于故障必然发生的假设,而非追求硬件永不出错。除了硬件冗余,规范的上线流程、测试沙盒环境以及监控报警日志系统同样关键,它们共同构成系统韧性的基础。

可扩展性:推拉模型的权衡与混合策略

以Twitter时间线为例,文章对比了推模型(写时扇出)和拉模型(读时聚合)的优缺点。推模型写入压力随粉丝数放大,但读取简单;拉模型读取压力随关注数放大,但无无效写入。Twitter采用混合策略:普通用户推,大V拉,浏览时合并。这启示我们,可扩展性设计需基于实际压力数值和用户行为,灵活组合方案,而非追求单一模式。

数据模型:关系与文档的适用场景

文章梳理了从层次、网状到关系、文档模型的演变。关系模型用表表达数据,支持join,适合多对多关系;文档模型天然表达一对多,如简历,读取局部性好,但更新和引用嵌套较复杂。NoSQL标签最初只是营销手段,并非技术分类。实际系统中,模型选择影响实现方案,且单一模型难以覆盖所有场景,多模型数据库正成为趋势。

存储引擎:LSM-Tree与B-Tree的取舍

LSM-Tree(如LevelDB)利用顺序写和SSTable,写性能高,但压缩导致写放大,且不支持事务;B-Tree原地修改页,支持事务,但随机写和碎片化影响压缩。两者各有适用场景:LSM-Tree适合写密集和近期数据读取,B-Tree适合事务性负载。文章强调,数据结构随硬件演进,理解其原理有助于选型和优化。

❓

Q&A

数据系统的可靠性面临哪些挑战?

数据系统的可靠性面临硬件故障、网络问题等挑战,需要规范的上线流程和监控系统来保证。

可扩展性在数据系统设计中如何考虑?

可扩展性设计需考虑实际压力和用户行为,推拉模型各有优缺点,需根据具体场景选择合适方案。

关系模型和文档模型有什么区别?

关系模型使用多个表表示一对多关系,支持join,而文档模型天然表达一对多关系,读取方便但更新复杂。

SQL和NoSQL各自的优势是什么?

SQL适合复杂查询和数据一致性,而NoSQL在扩展性和高写入吞吐量方面表现更好,适合大数据场景。

OLTP和OLAP的主要区别是什么?

OLTP主要用于实时交易处理,数据量小且随机访问,而OLAP用于批量数据分析,处理大量记录并进行汇总。

数据编码格式的选择对性能有什么影响?

数据编码格式影响序列化和反序列化的效率,文本格式可读性好但体积大,二进制格式如Thrift/Protobuf性能更高。

🏷️

标签

➡️

继续阅读