DDIA - 第一次作业
这次读的书是DDIA, Designing Data-Intensive Application, 中文<设计数据密集型应用>, 我看的是翻译https://github.com/Vonng/ddia.
读书计划如下:
第一部分:数据系统基础 | ||||
---|---|---|---|---|
第1章 可靠、可扩展与可维护的应用系统 | 18 | 第1周 | 10.12 ~10.18 | |
第2章 数据模型与查询语言 | 33 | |||
第3章 数据存储与检索 | 64 | 第2周 | 10.19~10.25 | |
第4章 数据编码和演化 | 26 | 第3周 | 10.26~11.1 | |
第二部分:分布式数据系统 | ||||
第5章 数据复制 | 37 | 第4周 | 11.2 ~ 11.8 | |
第6章 数据分区 | 16 | 第5周 | 11.9 ~11.15 | |
第7章 事务 | 40 | 第6周 | 11.16~11.22 | |
第8章 分布式系统的挑战 | 34 | 第7周 | 11.23 ~ 11.29 | |
第9章 一致性与共识 | 47 | 第8周 | 11.30 ~ 12.6 | |
第三部分 派生数据 | 我个人觉得后面这几章读起来很晦涩,不知道是不是翻译的原因,到时候我们讨论下,看看要不要继续这三章 | |||
第10章 批处理系统 . | 37 | 第9周 | 12.7~12.13 | |
第11章 流处理系统 | 37 | 第10周 | 12.14 ~ 12.20 | |
第12章 数据系统的未来 | 49 | 第11周 | 12.21 ~12.27 |
第一章 可靠性, 可扩展性, 可维护性
可靠性
一般说到应用做到4个9, 就是指应用的可靠性达到99.99%可用, 即一年的时间中有99.99%是可用的, 不可用时间为365∗24∗(1−0.9999)=0.876小时, 折合52.6分钟.
系统宕机的原因一般分以下3种, 硬件错误, 软件错误, 人为错误.
可扩展性
指的是负载增加时, 可以应对. 一般来说就是业务增长的时候, 系统仍能支持.
一般来说扩展分为纵向扩展(提高单机性能)和横向扩展(增加服务器).
可维护性
指的是软件开发完之后的后续运维, 修复漏洞, 添加新功能等.
- 可操作性. 便于运维团队保持系统平稳运行.
- 简单性. 从系统中消除尽可能多的复杂度, 使新工程师也能轻松理解系统.
- 可演化性. 使工程师在未来能轻松对系统进行更改.
第二章 数据系统的各种类型
关系数据库与文档数据库
日常用的最多的数据库就是关系数据库, 如MySql, SqlServer, Oracle等. 后来由于关系数据库的性能问题, 出了NoSQL数据库, 原本是想取代关系数据库, 结果发现取代不了, 就把NoSQL解释为Not Only SQL
, 意为SQL的扩展. NoSQL的代表有MongoDB, RethinkDB, CouchDB, Espresso等.
为了表示一个多层次的关系, 关系数据库会把各层对象分别建一个表, 再用表的连接来表示对象的关系, 优点是关联查询比较灵活, 缺点是慢和复杂. NoSQL数据库会把关系以一个灵活的结构直接保存起来, 如一个JSON字符串, 优点是一次查询可拿到所有层次的数据, 缺点是关联查询麻烦, 适合不需要关联查询的数据.
现代的数据库倾向将两种特性结合起来, 关系数据库可以支持JSON和XML, 如SqlServer和MySql的新版都支持JSON的构建和查询; NoSql数据库可以支持类似关系的连接, 如RethinkDB在其查询语言中支持类似关系的连接,一些MongoDB驱动程序可以自动解析数据库引用(有效地执行客户端连接,尽管这可能比在数据库中执行的连接慢,需要额外的网络往返,并且优化更少)
.
声明式查询与命令式查询
声明式查询指明了返回的条件, 典型代表是SQL, 如
SELECT * from animals WHERE family='Sharks';
命令式查询指明了达到条件的每一个确定的步骤. 以C#代码举例, 一般来说for和foreach就是这样的.
result;
foreach(var animal in animals)
{
if(animal.family == "Sharks")
{
result.Add(animal);
}
}
声明式的优点是, 只提供需求, 具体实现由他人实现, 优化起来无感知. 如我们提供sql语句, 由数据库引擎提供具体的实现, 如何操作磁盘访问数据等. 我们可以在不修改sql的前提下, 享受数据库引擎升级带来的优化. 缺点是性能上相对不可控, 还是要去了解数据库引擎的具体实现, 才能做到高性能的sql语句.
命令式相对可控一些, 可以自己去优化具体操作的步骤, 达到高性能. 缺点是不同平台的兼容性会比较差, 且代码量显得较多.
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· 《HelloGitHub》第 108 期
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单
· C# 13 中的新增功能实操
· Supergateway:MCP服务器的远程调试与集成工具