读书笔记《数据密集型应用系统设计》- 高可靠性、高可展性、可维护性 & 数据模型与查询语言

简介: 《数据密集型应用系统设计》是一本很好介绍数据密集类系统设计原理的纲要性书籍,笔者再次阅读下,记录一些读书笔记,也写一些自己的思考穿插其中,以做备忘。

第一章、高可靠性、高可展性、可维护性

笔者按:我们总是讲述系统的设计,其实大部分在可维护性上缺乏建设,导致后期系统难以维护,又不得不重新造轮子,把前人的推翻。在高可靠性上由于直接关系生而死,一般来还是做了一定的冗余建设,在扩展性上大部分由于中间件的建设及分布式理论的成熟基本没有太大的问题,就是在性价比上可以掰扯掰扯。

大部分的数据类系统设计如此,有 数据库、缓存、全文,再加一个消息队列推出消息。其实在数据库内部也是如此,有磁盘、有cache、有CDC可以订阅log,现在不少数据库也支持全文的检索,包括local的全文以及global的。

1.1 可靠性:容忍硬件、软件失败、认为错误

【硬件故障、软件故障、人为失误】

1.2 扩展性:评测负载与性能、百分位数、吞吐量

  • 如果系统以某种速度增长,我们该怎么办?
  • 什么是负载? 不同系统有不同的定义。
  • 讲述了一个以Feeds流的例子,是写放大,还是读放大? 有一些用户被关注的人有数亿,其采取写放大不显示,最后采取混合模式。大户是读放大。
  • 描述性能? SLA
  • 离线批处理更加关心 吞吐量,在线关注的是 响应时间。
  • 平均xx 往往不能衡量 真是的情况,一般采取99分为等来度量。 直接影响到体检,一般采取99.9%的时间是多少?
  • 如果解决可扩展性问题?
  • 自动检测,手工拟合
  • 未来分布式系统会成为标配
  • 对于早期创业的产品,功能快速迭代比性能的扩展性更加重要

1.3、可维护性:可运维、简单与可演化性

大部分人并不喜欢维护老的系统;但软件的生命周期里面大部分处于维护状态;

可运维性、简单性、可演化性;

  • 可运维性:良好的操作性经常可以化解软件的局限,不规范的操作最终会击垮软件。
  • 简单性:一个复杂的软件最终是一个大泥潭。降低复杂性,可以大大提高软件的可维护性。
  • 可演化性:一成不变的的系统需求基本没有。

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

笔者按:笔者在16~19年,在阿里带了3年多的HBase多模系统,后续演化为LIndorm多模,由于之前一直是范式论,在接触NoSQL后,第一的思维转变就是反范式。而今,数据库种类也日益丰富,各有侧重;从趋势看在NoSQL、NewSQL等各种边界也在融合。

1.1、关系型、文档型、图类型

  1. 关系从Edgar Codd于1970年提出,一直发展至今。进入21世纪,NoSQL兴起;
  2. NoSQL:【扩展性、开源软件、特定查询,自由的Scheme】;
  3. 对象关系不匹配:ORM  => JSON可能更加合适; JSON减少了应用程序代码和存储层之间的阻抗失配;
  4. 使用ID的好处是ID对于人类没有任何意义,所以永远都不需要更改;
  5. 关系型数据库与文档数据库也在渐渐融合;
  6. 一些其他的 全文检索、针对对撞机设计的存储查询(数白PB)、GenBank基因库软件、时序的OpenTSDB;

关系型 - 数据库&数仓

文档类型(以JSON为主)

图 - 数据库

开始时间

1970

21世纪

关系一般

关系少,ID查询较多

关系较多,图核心在于描述关系

应用场景

ERP系统

互联网

社交

SQL

JOSN

Cypher 、SPARQL和

代表数据库

MySQL

MongoDB

Neo4j

灵活性

比较强制,不灵活,加字段需要新加一列

Scheme比较灵活

比较灵活

设计模式

多对一、多对多关系,范式设计

反范式(先设计业务,再设计API)

反范式

可扩展性

一般

扩展性较好

一般

模型

写时强校验

读时校验

不是数据库强执行

读时校验

不是数据库强执行

查询局部性

相同数据放在一起,一般读一次IO或者数次IO

会分散IO

看按顶点点还是按边

1.2、数据查询语言

命令式查询语言,声明式查询语言。

命令式查询语言

声明式查询语言

含义

指定每一步怎么做

告诉系统,想要啥

代表

编程语言

SQL、CSS

优势

可以按照最高执行路径写,深入细节

简洁、容易使用、隐藏数据库细节

MapReduce是一种编程模型,不是命令式,也不是声明式,是介于两者之间的编程模型。

目录
相关文章
|
7月前
|
存储 NoSQL 关系型数据库
《数据密集型应用系统设计》 - 数据模型和查询语言
《数据密集型应用系统设计》 - 数据模型和查询语言
52 0
|
2月前
|
存储 监控 NoSQL
九大核心NoSQL数据库及使用场景详解
【10月更文挑战第6天】在当今大数据与云计算飞速发展的时代,NoSQL数据库以其灵活的数据模型、可扩展性和高性能,成为了众多应用场景下的首选。本文将为您详细介绍九大核心NoSQL数据库及其典型使用场景,帮助您在工作和学习中更好地选择和应用。
100 3
|
1月前
|
存储 数据建模 大数据
设计和构建健壮的数据系统26数据建模
【11月更文挑战第2天】数据建模是设计健壮数据系统的关键步骤,通过绘制数据系统的蓝图,帮助我们理解数据结构、关系及业务规则。常见的数据建模方法有实体-关系模型(E-R模型)和面向对象的数据建模。数据建模的步骤包括需求收集、概念建模、逻辑建模和物理建模。在整个过程中,需要不断验证和更新模型,确保其符合实际业务需求。
|
4月前
|
存储 监控 安全
大数据架构设计原则:构建高效、可扩展与安全的数据生态系统
【8月更文挑战第23天】大数据架构设计是一个复杂而系统的工程,需要综合考虑业务需求、技术选型、安全合规等多个方面。遵循上述设计原则,可以帮助企业构建出既高效又安全的大数据生态系统,为业务创新和决策支持提供强有力的支撑。随着技术的不断发展和业务需求的不断变化,持续优化和调整大数据架构也将成为一项持续的工作。
|
6月前
|
SQL 缓存 负载均衡
数据库设计优化:性能提升与扩展性的技术探讨
【6月更文挑战第28天】数据库设计优化聚焦性能与扩展性:SQL优化、索引策略、缓存利用及分库分表、集群技术,旨在平衡处理速度与系统稳定性。通过智能SQL、复合索引、查询缓存减少数据库压力,垂直/水平拆分与集群实现数据分布式处理,提升并发能力。
|
存储 SQL 缓存
读书笔记《数据密集型应用系统设计》- 数据存储与检索
《数据密集型应用系统设计》是一本很好的介绍数据密集类系统设计原理的纲要性书籍,笔者再次阅读下,记录一些读书笔记,也写一些自己的思考穿插其中,以做备忘。
175 0
|
存储 JSON NoSQL
「数据密集型系统搭建」原理篇|夯实基础,灵活设计
数据建模规范、常识、技巧很多,本章从万事开头难的数据建模开始,剖析下数据选择上有哪些常见设计规则,看看这些约束或经验背后蕴含着哪些出色的项目实践总结,在数据类型的选择上如何进行合理选择和取舍方案的。
489 0
「数据密集型系统搭建」原理篇|夯实基础,灵活设计
|
存储 缓存 固态存储
如何写出高性能代码(四)优化数据访问
同一份逻辑,不同人的实现的代码性能会出现数量级的差异; 同一份代码,你可能微调几个字符或者某行代码的顺序,就会有数倍的性能提升;同一份代码,也可能在不同处理器上运行也会有几倍的性能差异;十倍程序员不是只存在于传说中,可能在我们的周围也比比皆是。十倍体现在程序员的方法面面,而代码性能却是其中最直观的一面。
152 0
如何写出高性能代码(四)优化数据访问
|
存储 运维 监控
读书笔记之数据密集型应用的可维护性
前面两篇文章分别介绍了可靠性和可扩展性,本篇文章将介绍了第三个特性:可维护性。
|
存储 移动开发 运维
高可扩展性系统的设计(下)
高可扩展性系统的设计(下)
187 0
高可扩展性系统的设计(下)