Reborn's Blog

密集型系统设计

2022-10-30·System Design, Database

第一章

  • 可靠性:意味着即使发生故障,系统也能正常工作。容错技术可以对终端用户隐藏某些类型的故障。
  • 可伸缩性:意味着即使在负载增加的情况下也有保持性能的策略。在可伸缩的系统中可以添加处理容量技术保证系统在高负载下保持可靠。
  • 可维护性:良好的抽象可以帮助降低复杂度,使得系统易于修改和适应新的应用场景;良好的可操作性意味着对系统的健康状态具有良好的可见性,并拥有有效的管理手段。

第二章:数据模型与查询语言

关系模型与文档模型

关系数据库:用于事务处理(航空公司预订、库存管理信息记录在库)和批处理(客户发票、工资单和报告)

关系模型:数据被组织成关系,在SQL中称为表,其中每个关系都是元组的无序集合。关系模型的目标就是将实现细节隐藏在更简洁的接口后面。

NoSQL的诞生

  • 更好的可伸缩性:非常大的数据集或者非常高的写入吞吐量
  • 免费和开源软件
  • 关系模型不能很好支持特殊查询操作
  • 一种更具多动态性与表现力的数据模型

第三章:数据存储与检索

哈希索引

key-value类型,键值索引。需要加载内存,区间查询效率不高。

SSTables和LSM-Tree

对key-value对的顺序按键排序,这种排序字符串表,称为SSTable。

LSM-Tree:Log-Structured MergeTree,建立在早期的日志结构文件系统之上,因为基于合并和压缩排序文件原理的存储引擎通常被称为LSM存储引擎。

B-Trees

和SSTable一样保留了按键排序的key-value,但是不同的地方在于,B-tree将数据库分解为固定大小的块或者页(4KB或者更大),页是内部读/写的最小单元。

为了使数据库能从崩溃中恢复,常见B-tree的实现需要支持磁盘上的额外的数据结构:预写日志(write-ahead log,WAL),也称为重做日志。

B-tree的优点则是每个键都恰好唯一对应于索引中的某个位置,而日志结构的存储引擎可能在不同的段中具有相同键的多个副本。如果数据库希望提供强大的事务语义,B-tree显得更具有吸引力。

#System Design#Database