1. 设计方法1.1. 数据设计和数据建模是一对容易混淆的概念1.2. 数据设计看作在建造一座城市1.2.1. 涉及决定建筑物的位置、连接城市不同部分的道路以及交通流量的规划1.3. 数据建模更像是在设计单个建筑物1.3.1. 涉及决定房间的布局、房间如何连接以及每个房间的用途2. 联机事务处理与联机分析处理2.1. OLTP2.1.1. 联机事务处理2.1.2. 是一种信息系统或应用程序用于在实时环境中处理在线的创建、读取、更新和删除(CRUD)事务2.1.3. 旨在支持高并发性这意味着可以同时处理大量事务2.1.4. 通常使用关系模型​并进行了低延迟优化这意味着可以非常快地处理事务2.1.5. 例子包括销售点应用程序、电子商务网站和在线银行解决方案2.1.6. 使用各种数据库管理系统(DBMS)来存储和管理数据例如Microsoft SQL Server和Oracle2.1.7. 可以将联机事务处理视为实现运营数据的技术2.2. OLAP2.2.1. 联机分析处理2.2.2. 用于数据分析和报告以支持商业智能和制定决策2.2.3. 优化了快速查询性能允许终端用户通过报告和仪表盘对数据进行多维切片和数据挖掘速度比使用OLTP系统快得多2.2.4. “一次写入多次读取”​2.2.5. 多个OLTP数据库被用作数据源这些数据源被导入数据仓库中然后再导入OLAP数据2.2.6. 一个OLAP数据库通常由一个或多个OLAP立方体OLAP cube组成2.2.7. OLAP数据库和数据仓库是相关但不相同的概念通常一起使2.2.7.1. 提供了一种分析数据仓库(DW)中存储的数据的方式这种方式比在包含大量数据的数据仓库上执行传统SQL查询更灵活且交互性更强2.2.8. 将联机分析处理/表格和数据仓库视为实现分析数据的技术2.3. OLAP立方体2.3.1. OLAP立方体是数据预先整合的地方即数据已经在某些维度进行了汇总和分组终端用户可以从多个维度和细节层次快速访问它而无须等待长时间运行的查询完成2.3.2. 创建OLAP立方体通常涉及使用多维模型该模型使用星型模式或雪花型模式来表示数据2.3.3. 多维模型和表格数据模型通常被视为语义层或模型这意味着它们在数据仓库的架构上提供了一个抽象层3. 运营数据和分析数据3.1. 两种类型的数据对于有效的业务管理都是必不可少的它们相互补充为组织的运营和绩效提供了完整视图3.2. 运营数据3.2.1. 用于管理日常运营和流程的*实时数据3.2.2. 由联机事务处理系统捕获、存储和处理。可以使用它来获取业务当前状态的“快照”​以确保运营平稳、高效地运行。运营数据量通常很大有助于快速决策3.2.3. 用于实时监控和控制业务流程3.3. 分析数据3.3.1. 来源于对操作数据的收集和转换3.3.2. 由联机分析处理/表格系统和数据仓库维护和使用的数据的*历史视图3.3.3. 分析数据通常提供比运营数据时间范围更长的数据视图通常数据量较小并且通常是经过整合和汇总的3.3.4. 数据通常以批处理的方式被摄取并且需要比运营数据更多的处理时间3.3.5. 用于获取见解并为较长时期内的决策提供信息4. 对称多处理和大规模并行处理4.1. 早期的关系数据库使用了对称多处理(SMP)设计即计算机处理由共享磁盘和内存的多个处理器完成所有处理器都位于同一台服务器中4.2. 随着20世纪90年代数据仓库的兴起并且数据库开始摄入大量数据性能问题变得日益突出4.3. 在MPP设计中数据库有多台服务器组成每台服务器都有多个处理器并且每个处理器都有自己的内存和磁盘4.3.1. 允许通过添加更多服务器来“横向扩展”(scale out)而不是“纵向扩展”4.4. 大规模并行处理服务器将数据库中的部分数据分配到每个服务器的磁盘上而对称多处理数据库则将所有数据保存在一个磁盘上4.5. 大规模并行处理中查询被发送到一个控制节点也称为名称节点​该节点将每个查询拆分成多个子查询并将这些子查询发送到各台服务器称为计算节点或工作节点​4.6. SMP和MPP数据库最初是作为本地解决方案出现的这些解决方案至今仍然很普遍但现在在云中也有许多等效的解决方案5. Lambda架构5.1. Lambda架构是一种数据处理架构旨在通过同时使用批处理和实时流处理方法来处理海量数据其核心思想是通过批处理获取全面且准确的历史数据视图并在延迟、吞吐量、扩展性和容错性之间取得平衡同时利用实时流处理提供在线数据的实时视图5.2. 通过将传统的批处理系统与流式消费工具相结合弥合了“单一事实来源”和现在备受追捧的“我要立即获得”实时解决方案之间的沟壑从而满足两种需求5.3. 如果需要构建一个能够同时处理批处理和实时数据并提供单一统一视图的分布式系统Lambda架构是一个值得考虑的选择5.3.1. 如推荐引擎和欺诈检测系统5.3.2. 如果需要支持有状态处理或处理大量实时数据建议考虑其他架构5.4. 关键原则5.4.1. 双数据模型5.4.1.1. 一个模型用于批处理批处理层​另一个模型用于实时处理流处理层​5.4.1.2. 使得系统能够同时处理批数据和实时数据并以可扩展和容错的方式执行这两种类型的数据处理5.4.2. 统一视图5.4.2.1. 使用单一的统一视图称为展示层/表示层向最终用户呈现批处理和实时处理的结果5.4.3. 解耦处理层5.4.3.1. 将批处理和实时处理层解耦因此它们可以独立扩展并且可以单独开发和维护从而提供了灵活性并简化了开发过程5.5. 缺点5.5.1. 复杂性5.5.1.1. 包含双数据模型和单一的统一视图5.5.1.2. 相比其他架构Lambda架构的实现和维护可能更加复杂5.5.2. 实时处理能力有限5.5.2.1. 设计目的在于同时进行批处理和实时处理但在处理大量实时数据时效率可能比不上专门为实时处理而设计的Kappa架构5.5.3. 对有状态处理的支持有限5.5.3.1. 设计的目的是用于无状态处理可能不太适合需要在多个事件之间维护状态的应用6. Kappa架构6.1. Kappa架构专门设计用于处理实时数据6.2. Kappa架构是构建分布式系统的绝佳选择特别是那些需要实时处理大量数据、具备可扩展性、容错性和低延迟的系统6.3. 关键原则6.3.1. 实时处理6.3.1.1. 被设计用于实时处理这意味着事件会在收到时立即被处理而不是稍后进行批处理6.3.1.2. 减少了延迟并使系统能够快速响应不断变化的条件6.3.2. 单一事件流6.3.2.1. 使用单一事件流来存储流经系统的所有数据6.3.2.2. 数据可以轻松分布在多个节点上因此这种设计使得系统易于扩展且具有容错性6.3.3. 无状态处理6.3.3.1. 所有处理都是无状态的6.3.3.2. 意味着每个事件都是独立处理的不依赖于之前事件的状态6.3.3.3. 使得系统更容易扩展因为无须在多个节点之间维护状态6.4. 缺点6.4.1. 复杂性6.4.1.1. 涉及单一事件流和无状态处理这可能比其他架构更复杂实现和维护起来也更困难6.4.2. 有限的批处理6.4.2.1. 旨在实时处理数据不太适合对历史数据进行批量处理6.4.3. 对即席查询的支持有限6.4.3.1. 旨在实时处理数据因此可能不太适合需要处理大量历史数据的即席查询7. 混合持久化和多种数据存储7.1. 混合持久化是指在单个应用程序或系统中根据数据的使用方式使用多种数据存储技术来存储不同类型的数据7.2. 不同类型的数据最好存储在不同的数据存储中7.3. 混合持久化就是为特定的用例选择最合适的工具7.4. 多语言编程指的是在一个应用程序使用混合编程语言来利用不同编程语言在解决不同问题时的优势7.5. 多种数据存储是指一个组织或企业内使用多种数据存储7.5.1. 每种数据存储都针对特定类型的数据或用例进行了优化7.5.2. 允许组织为不同的项目或业务部门使用不同的数据存储而不是在整个组织中采用一刀切的数据存储7.6. 设计方法可以为每种类型的数据使用最合适的工具7.7. 设计方法增加了复杂性的代价因为每种数据存储解决方案都意味着需要学习一项新技术但其带来的好处将是值得的