热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《数据密集型应用》读书笔记

花了大概半个月的时间,将《设计数据密集型应用》看了一遍,不愧是豆瓣10.0的好书。作者在一本书里面,讲解了MySQL,Redis,Solr,Mongodb,Elasticsearc

花了大概半个月的时间,将《设计数据密集型应用》看了一遍,不愧是豆瓣10.0的好书。

作者在一本书里面,讲解了MySQL, Redis, Solr, Mongodb, Elasticsearch, Kafka, Hive, Hbase, Spark, Flink, Mapreduce, Neo4j, Titan, InfiniteGraph等几乎所有数据存储,数据处理的组件。在一本书里面,囊括几乎所有类型的数据库,队列,NoSQL, 批处理,流式处理组件, 颇有“指点江山,激昂文字,粪土当年万户侯”的感觉。

本书讲解了从文档数据模型到关系数据模型到图数据模型的变迁及面临的问题; 讲解了分布式系统的核心问题; 介绍了批处理到流式处理能够应付的业务场景。当然由于本书囊括的技术点过于宏大,没法一一介绍各个组件的详细特性及功能点,更多地是站在一个宏观的层面介绍各个组件的特性及能够覆盖的业务场景。

本书让我印象深刻的有如下几个点:

1 数据模型

本书介绍了文档型数据库,关系型数据库,图数据库。 文档型数据库的schemaless, 典型的就是Mongodb和Elasticsearch; 关系型数据库不必说了,应用最广泛的MySQL; 图数据库用得比较少,Neo4j算是典型了。 通过从文档到图,从无关联到处处关联。让Mongodb, Elasticsearch, MySQL, Neo4j在我的知识体系中不再是孤立的点,而是有内在联系的知识链条。

2 shell版的数据库

作者通过一个基于shell实现的数据库,讲解索引。 从Hash索引到树索引, 从B tree到 LSM tree。Hash索引无法解决区间查询的问题, 二叉树面对硬盘索引读取性能问题, B Tree的写入性能问题... 估计读完本书后,我一度陷入困惑,应该是希望更深入探索索引细节的想法和原定计划的冲突。

3 shell版的mapreduce

作者通过组合cat, awk, sort, uniq, head 几个简单的命令分析日志,让后讲解mapreduce。 这个切入点相当经典, 比mapreduce的word-count有意思多了。

4 分布式系统的一致性

作者讲解了分布式系统存在的问题,主要是一致性问题。 然后引出选举算法的核心: 共识。相当精辟。 可惜分布式算法的细节我一向敬而远之,觉得这个坑有点深,不急着入坑。

闪光点太多了,也许了解了一些系统的细节后,再看本书,收获会更有所不同。

作者的脉络很清晰:

一个系统必须要面对如下的3个问题: 可靠性,可扩展性,可维护性。 然后基于这3个核心点,讲解数据密集型应用是如何实现这3个目标的。

从数据模型层面,抽象一个统一的存取方式,比如SQL。
基于设计的模型,实现各种索引,保障系统的性能。
网络传输层面,设计各种数据编码,平衡易用性和性能的矛盾。

当单个节点无法满足业务并发的需求时,通过副本扩展系统。 这里一致性的问题就已然出现了。
当单个节点无法满足业务存储的需求时,通过分片扩展系统,解决存储瓶颈,无论是容量还是性能瓶颈。
通过事务机制保证原子性,解决数据不一致的问题。
列举了分布式系统的种种麻烦及解决问题的算法。

最后介绍了衍生数据,讲解批处理和流式处理。

作者相当于给数据处理组件画了一幅全景图。如此多的数据组件,开发系统做架构选型也将是个极大的考验。好在能理解各个组件的异同,学习能够触类旁通,举一反三也是不错的。


推荐阅读
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • 修复一个 Bug 竟耗时两天?真的有那么复杂吗?
    修复一个 Bug 竟然耗费了两天时间?这背后究竟隐藏着怎样的复杂性?本文将深入探讨这个看似简单的 Bug 为何会如此棘手,从代码层面剖析问题根源,并分享解决过程中遇到的技术挑战和心得。 ... [详细]
  • RocketMQ在秒杀时的应用
    目录一、RocketMQ是什么二、broker和nameserver2.1Broker2.2NameServer三、MQ在秒杀场景下的应用3.1利用MQ进行异步操作3. ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • 在当今的软件开发领域,分布式技术已成为程序员不可或缺的核心技能之一,尤其在面试中更是考察的重点。无论是小微企业还是大型企业,掌握分布式技术对于提升工作效率和解决实际问题都至关重要。本周的Java架构师实战训练营中,我们深入探讨了Kafka这一高效的分布式消息系统,它不仅支持发布订阅模式,还能在高并发场景下保持高性能和高可靠性。通过实际案例和代码演练,学员们对Kafka的应用有了更加深刻的理解。 ... [详细]
  • 本文介绍了如何在 Windows 系统上利用 Docker 构建一个包含 NGINX、PHP、MySQL、Redis 和 Elasticsearch 的集成开发环境。通过详细的步骤说明,帮助开发者快速搭建和配置这一复杂的技术栈,提升开发效率和环境一致性。 ... [详细]
  • MongoDB高可用架构:深入解析Replica Set机制
    MongoDB的高可用架构主要依赖于其Replica Set机制。Replica Set通过多个mongod节点的协同工作,实现了数据的冗余存储和故障自动切换,确保了系统的高可用性和数据的一致性。本文将深入解析Replica Set的工作原理及其在实际应用中的配置和优化方法,帮助读者更好地理解和实施MongoDB的高可用架构。 ... [详细]
author-avatar
生如葳蕤_306
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有