下面是这本书序言中的大部分内容,本人的英文水平有限,有理解不到位的地方还请大家指教,这算是自己对这本书的读书笔记和总结。
数据是当今系统设计中许多挑战的中心,一些难以解决的问题如系统的可扩展性,一致性,可靠性,有效性和可维护性等需要弄清楚。 另外,我们已经有了各式各样的工具,包括关系型数据库,NoSQL数据库,流处理或批处理以及消息队列,哪一个是你应用程序的最佳选择? 你又如何理解这些流行术语?
在这本实用又全面的指南中,作者Martin Kleppmann通过分析数据处理和存储的各种技术的优缺点,帮助你了解这个多样化的领域。在软件开发中,世界是变化的,但其基本原则保持不变。软件工程师和架构师更应该学习如何在实践中应用这些想法,以及在现代应用中如何充分利用大数据。
概括起来,本书有以下五个方面的特色:
作者在开篇就告诉了读者写此书的目的:
技术是推动社会发展的强大力量。 数据,软件和信息可以用来做坏事:巩固不公平的权力结构,破坏人权,保护既得利益。 但是,它们也可以用来做好事:让外界听到底层民众的声音,为每个人创造机会,避免灾难。 这本书正是致力于指引人们人朝着正确的方向前进。
如果你近年来从事软件工程领域的技术开发工作,尤其从事于服务端/后端的开发工作,你的耳朵可能会被大量的有关数据处理和存储的热门术语所充斥:NoSQL! 大数据! 全网域(Web-scale)!分片(Sharding)! 最终一致性(Eventual consistency)! ACID(原子性、一致性、隔离性、持久性)! CAP(一致性、可用性、分区容错性) 理论! 云计算服务(Cloud services)! MapReduce!Real-time!
在过去的十年中我们看到了很多数据库,分布式系统以及在其上构建的应用程序的有趣的发展趋势。这些发展背后有着有不同的推动力:
数据密集型应用正在利用这些技术拓展着无限可能。现在很多应用都是数据密集型的,而不是计算密集型的。因为对这些应用来说,CPU的计算能力不再是瓶颈,更大的挑战来自于数据的数量、复杂度和更新的速度。
帮助数据密集型应用存储和处理数据的工具和技术已经迅速适应这些变化。在新的数据库系统(“NoSQL”)引起业界广泛关注的同时,消息队列,缓存,搜索索引,批处理和流处理框架以及相关技术也同等重要,很多应用综合使用很多种技术。
随处可见的流行语意味着我们热衷于尝试新鲜事物,这是一件好事。 但是,作为软件工程师和架构师,如果我们想要构建出色的应用程序,我们就需要对这些新鲜技术有更加深入精确的理解以及能权衡这些技术的优劣, 为此,我们必须深入挖掘这些新鲜技术背后的细节。
幸运的是,万变不离其宗,在技术快速发展的背后,无论您使用哪个版本的特定工具,都有持久的原则。 如果你了解这些原则,您就能知道每个工具适用的地方,以及如何充分利用它还有如何避免错误。这是本书的目的。
本书的目标是帮助您了解数据处理和存储的日新月异的多样化技术。这不是某个特定工具的专属教程,也不是一本充满干枯理论的教科书。相反,我们将会介绍许多数据系统的成功案例:那些运行在生产环境中的支撑起很多流行应用的且每天能够满足伸缩性,性能和可靠性需求的技术。
我们将深入到这些系统的内部,梳理他们的关键算法,讨论他们的原则以及他们面临不同目标时作出的权衡取舍。在这个过程中,我们将尝试寻找探索数据系统的有效方法 - 不仅仅局限于知道它们是如何工作的,还有它们为什么用这种方式工作,以及我们需要问些什么问题。
阅读本书后,您将能够恰当地按需选择合适的技术,并了解如何综合使用多种技术去构建一个健壮的应用程序体系架构。幸运的是很少需要你从头开始构建自己的数据库存储引擎,其实也没有这个必要。然而,你必须能直观的明白你的系统内部正在做什么,这样你就可以推断他们的行为,做出合理有效的设计决策,并且能追踪到可能出现的问题。
如果你开发的应用有着存储或处理数据的服务端/后端,并且你的应用使用互联网(例如,Web应用程序,手机app或连接到互联网的传感器),那么这本书适合你。
本书适用于喜欢编程的软件工程师,软件架构师和技术经理。如果您需要对你所开发的系统架构做出决策,例如,如果你需要选择哪些能工具解决给定问题并弄清楚如何最好地应用他们,这也是相当适用的。但即使没有这样的需求,这本书也能帮助你更好地了解他们的优劣。
您应该具有一些开发过Web应用或网络服务的相关经验,并且您应该熟悉关系型数据库和SQL。最好熟悉一些非关系型数据库和其他与数据相关的工具,但不是必须。大致了解常见的网络协议如TCP和HTTP对于本书也是有帮助的。本书与你使用的编程语言或平台无关。
如果你符合下面列出的任何一种情况,这就是一本很有价值的书:
有时,我们在讨论可扩展的数据系统时,有些人会作出“你不是谷歌或亚马逊”这样的评论。"停止担心规模,只使用关系型数据库“这个陈述中有这样的道理:为不需要的规模构建系统是浪费精力,这也有可能会把你锁在僵化的设计中。 实际上,这是一种过早优化的形式「过早优化是万恶之源」。但是选择合适的工具也很重要,每个技术都有各自不同的优点和缺点。 我们将会看到关系型数据库固然很重要但他不是对数据处理技术的盖棺定论。
本书没有打算给出关于如何安装或如何使用专用软件包或API的详细说明,因为这些内容已经有很多文档了。 相反,我们会讨论对数据系统至关重要的各种原则和权衡,我们也会探索不同的产品所做出的不同的设计决策。
在本书的电子版中,我们包含了在线资源的全文链接。所有链接都在出版时都进行了验证,但不幸的是,由于网络自身的性质,有些链接存在频繁中断的现象,如果您遇到这种情况或者您阅读的是本书的印刷本,你可以借助搜索引擎查找这些参考资料。对于学术论文,您可以在Google学术搜索中搜索相关标题以查找开放取阅(open-access)式的PDF文件。 或者,您可以在https://github.com/ept/ddia-references找到所有的参考资料,我们会在这里维护最新的链接。
我们主要关注数据系统的架构以及它们被集成到数据密集型应用中的方式。由于篇幅的原因这本书不涉及部署,操作,安全,管理等领域 - 这些都是复杂而重要的话题以致于在本书中用一些片面的粗略的注解都不足以给与他们正确的评价,他们中的任一个亦能单独出一本书。
本书中描述的许多技术属于大数据领域。 然而,“大数据”这个术语被过度使用且定义很模糊。 本书使用更为明确的术语,如单节点VS分布式系统,在线/交互式VS离线/批处理系统。
本书偏向于自由和开源软件(FOSS),因为阅读,修改和执行源代码是一种理解事情是如何工作的有效方式。使用开放平台还可以降低供应商锁定的风险。 然而,在适当的情况下,我们也讨论所有权软件(闭源软件,软件即服务,或仅在文献中描述但不公开发布的公司内部软件)。
本书分为三部分:
我们在本书中讨论的大部分内容已经在其他地方以某种形式被提及了----会议报告,研究论文,博客文章,代码,bug追踪器,邮件列表。 这本书总结了来自许多不同来源的最重要的想法,其中包括了这本书所有的原始文献的出处。如果你想更深入地探索每一个知识细节,那么每章末尾的参考资料都是很好的资源,他们中的大多数可以在线免费获取。
作者:鱼果
本文地址:
欢迎转载,请在明显位置给出出处及链接。
如对本文有疑问, 点击进行留言回复!!
去 HBase,Kylin on Parquet 性能表现如何?
如何找到Hive提交的SQL相对应的Yarn程序的applicationId
如何在 HBase Shell 命令行正常查看十六进制编码的中文?哈哈~
网友评论