《数据密集型应用系统设计》总结

《数据密集型应用系统设计》总结
最新回答
鬼魅訞娆

2022-05-27 17:06:25

《数据密集型应用系统设计》总结

一、数据库基础

  • 特性:数据库系统需满足可靠性、可扩展性、可维护性。其中,向前兼容(向未来兼容)较为容易,而向后兼容(向过去兼容)则更为困难,需要处理老数据与新功能之间的兼容性问题。

  • 数据库模型

    文档模型:以文档为单位存储数据,适合存储半结构化数据。

    关系模型:基于表格和关系的数据模型,通过SQL进行查询。

    图模型:由顶点和边组成,适用于表示复杂的关系和网络结构。

  • 查询语言

    命令式:操作精准但繁琐,如JS DOM操作。

    声明式:简化了用户操作,底层容易优化,如SQL、HTML和CSS。

  • 存储类型

    文档型:存储文本数据。

    关系型:行式存储和列式存储。行式存储是数据库常用方式,而列式存储则有利于只查询几个字段的场景,以及分布式存储和查询。

    日志存储:与其他存储配合使用,可用于数据库记录、消息队列、流处理等。

  • 索引:利用B-tree结构建立索引,提高查询效率,但不可建立过多索引,以减少写入时长。

  • 数据库处理方式

    OLTP(联机事务处理):在多个节点上处理一个事务。

    OLAP(联机分析处理):在多个节点上处理一个分析任务,通常任务较大,处理时间较长,可离线处理。

二、分布式数据库

  • 数据复制模式

    主从复制:数据从一个主节点复制到多个从节点。

    多主模式:多个节点均可作为主节点进行读写。

    无主模式:节点之间通过共识算法进行数据复制。

  • 复制滞后问题:通常采用异步复制模式以提高性能,但会导致数据不同步问题,需通过算法和共识达到最终一致性。

  • 数据分区:将数据放到不同的节点上,分区方式包括键值分区、基于关键词哈希分区、根据二级索引分区等。需定期进行分区再平衡,以避免性能下降。

  • 请求路由:用于服务发现,可根据负载均衡策略将请求路由到合适的节点上。

  • 事务:分布式事务更为复杂,涉及网络。实现方式包括弱隔离级别(提高并发性能)和串行化(可能导致性能损耗)。

  • 分布式可能故障:网络、时钟、硬件、人为bug等都可能导致分布式障碍。

  • 分布式共识:包括一致性保证、可线性化、顺序保证等,全序广播保证消息的全序传递。

三、派生数据处理

  • 批处理:输入有界,以MapReduce为代表,通过并行的读写分区、执行作业、再聚合的方式处理数据。Spark对MapReduce进行了改进,减少了中间状态存储和IO写入,性能更好。

  • 流处理:输入无界,对无界数据流进行实时处理。数据库与流处理在功能上有所不同,流处理更适合实时处理无界数据流,而数据库更适合存储和查询有界数据集。

四、其他

  • 数据集成:将不同数据源、不同数据格式的数据集成在一起,如将日志存储、B-tree、列式存储聚合在一起输出给终端。

  • 端到端正确性:提供一个分布式框架并不能解决所有问题,有时需要将决定权交给应用,如写入冲突的处理、幂等性保证等。

  • 名词解释

    节点:分布式中每一台服务器的简称。

    HBase:建立在HDFS之上的分布式数据库。

    MapReduce:适用于离线数据处理和分布式计算。

    Spark:通用的大数据处理引擎,支持批处理和流处理。

    Flink:功能强大的分布式流处理框架,提供高吞吐量、低延迟和准确性。

    UNIX管道:允许多个程序组合在一起的统一接口。

    数据湖:以原始形式收集数据,之后再考虑模式设计。

    IDL:接口定义语言,如Thrift和Protocol Buffers。

    P99:大于等于99%的数据值,用于评估接口性能。

    Unicode和UTF-8:前者为字符集,后者为编码规则。

    Quorum机制:保证数据冗余和最终一致性的投票算法。

    墓碑:数据库中数据删除时的删除标记。

    二级索引:非主键字段创建的索引。

    ACID:事务提供的安全保证,包括原子性、一致性、隔离性、持久性。

    MVCC:多版本并发控制,用于实现并发控制。

    CAS:先比较再设置,用于解决并发冲突问题。

    CAP:分布式系统无法同时满足的一致性、可用性、分区容忍性。

    Fencing令牌:用于解决分布式系统中的竞态条件问题。

    拜占庭故障:分布式系统中存在欺骗性的节点或消息的故障。

    Exactly-Once:保证消息传递的一次性和顺序性。

总结

工程实践中,大部分时间都在处理边界条件。基于日志的派生数据是集成不同数据最有前途的方式,因其灵活且能应对复杂系统。在收集数据时,需确保合法性和道德性,避免滥用数据造成不良影响。