热门标签 | 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。
基于设计的模型,实现各种索引,保障系统的性能。
网络传输层面,设计各种数据编码,平衡易用性和性能的矛盾。

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

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

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


推荐阅读
  • 计算机网络四
    大三上结束之际,从网上找来一些关于计算机网络的知识作为总结,本文四篇笔记全部转自猪头任(博客地址:http:www.cnbl ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 在这一期的SendMessage函数应用中,我将向大家介绍如何利用消息函数来扩展树型列表(TreeView)控件的功能相信对于树型列表控件大家十分的熟悉, ... [详细]
  • 本文目录一览:1、数据库有哪几种2、数据库软件 ... [详细]
  • 根据时间更改网站背景的脚本。热!
    我在网上找到了它,并以自己的方式对其进行了自定义;作者的功劳就在那里。实际上,这是一个用于更改背景颜色的脚本,并且在我看来& ... [详细]
  • 文章目录1.解释一下GBDT算法的过程1.1Boosting思想1.2GBDT原来是这么回事2.梯度提升和梯度下降的区别和联系是什么?3.GBDT的优点和局限性有哪 ... [详细]
  • 从分布式数据库选型的第一件事谈起
    本文很长,谨慎阅读现在在我们的面前摆着太多的分布式数据库可以让我们选择,那么如果我想先让 ... [详细]
  • 对mysql的总结与反思_一次DB故障引起的反思和MySQL Operator选型
    前言在一次数据库故障后,我们发现业务库会根据业务的等级会划分多个MySQL实例,许多业务库会同时属于一个MySQL实例,当一个库引发问题后 ... [详细]
  • ForesightNews整理了ETHDenver2023日程及其周边活动供读者参考。 整理: ... [详细]
  • vue组件component的注册与使用详解_vue.js
    组件是Vue是一个可以重复使用的Vue实例, 它拥有独一无二的组件名称,它可以扩展HTML元素,以组件名称的方式作为自定义的HTML标签,这篇文章主要介绍了vue组件compone ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 2018深入java目标计划及学习内容
    本文介绍了作者在2018年的深入java目标计划,包括学习计划和工作中要用到的内容。作者计划学习的内容包括kafka、zookeeper、hbase、hdoop、spark、elasticsearch、solr、spring cloud、mysql、mybatis等。其中,作者对jvm的学习有一定了解,并计划通读《jvm》一书。此外,作者还提到了《HotSpot实战》和《高性能MySQL》等书籍。 ... [详细]
  • Jquery 跨域问题
    为什么80%的码农都做不了架构师?JQuery1.2后getJSON方法支持跨域读取json数据,原理是利用一个叫做jsonp的概念。当然 ... [详细]
  • 什么是大数据lambda架构
    一、什么是Lambda架构Lambda架构由Storm的作者[NathanMarz]提出,根据维基百科的定义,Lambda架构的设计是为了在处理大规模数 ... [详细]
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社区 版权所有