第 12 章 数据系统的未来 数据系统的未来
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
如果一个事物的目的是为了另一个事物,那么它的最后目的就不可能是保存它的存在。因此,船长的最终目的并不在于保全他所托付的船只,因为船只的目的是为了其他东西,即航行。
(常被引用为:如果船长的最高目标是保住他的船,他就会让船永远停在港口)。
圣托马斯-阿奎那,《神学总论》(1265-1274 年)
到目前为止,本书主要是描述目前的情况。在最后一章,我们将把视角转向未来,讨论事情应该如何发展:我将提出一些想法和方法,我相信它们可以从根本上改善我们设计和构建应用程序的方式。
对未来的看法和猜测当然是主观的,因此在本章中,我将使用第一人称来写我的个人观点。欢迎大家提出不同意见,形成自己的观点,但我希望本章中的观点至少能成为富有成效的讨论的一个起点,并使那些经常混淆的概念变得更加清晰。
第 1 章概述了本书的目标:探索如何创建可靠、可扩展和可维护的应用程序和系统。这些主题贯穿了所有章节:例如,我们讨论了许多有助于提高可靠性的容错算法、有助于提高可扩展性的分区以及有助于提高可维护性的演进和抽象机制。在本章中,我们将汇集所有这些想法,并在此基础上展望未来。我们的目标是探索如何设计出比现在更好的应用程序--稳健、正确、可进化,并最终造福人类。
数据整合
本书反复强调的一个主题是,对于任何特定问题,都有多种解决方案,所有解决方案都有不同的优点、缺点和权衡。例如,在第 3 章讨论存储引擎时,我们看到了日志结构存储、B 树和面向列的存储。在第 5 章讨论复制时,我们看到了单领导、多领导和无领导方法。
如果你遇到诸如 "我想存储一些数据并在以后再次查找 "这样的问题,并没有唯一正确的解决方案,而是有许多不同的方法,每种方法都适用于不同的情况。软件实施通常必须选择一种特定的方法。要让一种代码路径健壮且性能良好已经很困难了,如果还想在一个软件中实现所有功能,那么几乎可以保证实现效果会很差。
因此,最合适的软件工具选择也取决于具体情况。每个软件,即使是所谓的 "通用 "数据库,都是为特定的使用模式而设计的。
面对琳琅满目的软件产品,首先要做的就是找出软件产品与适用环境之间的对应关系。可以理解的是,供应商不愿意告诉你他们的软件不适合哪些类型的工作负载,但希望前面几章的内容能让你掌握一些问题,以便读懂字里行间,更好地理解权衡。
然而,即使你完全理解工具和使用环境之间的映射关系,还有另一个挑战:在复杂的应用程序中,数据通常以多种不同的方式使用。 不可能有一款软件适用于所有不同的数据使用环境,因此你最终不可避免地要将几款不同的软件拼凑在一起,以提供应用程序的功能。
通过获取数据组合专业工具
例如,通常需要将 OLTP 数据库与全文搜索索引整合起来,以便处理任意关键词的查询。虽然有些数据库(如 PostgreSQL)包含全文索引功能,足以满足简单应用的需要[1],但更复杂的搜索设施需要专业的信息检索工具。相反,搜索索引通常不太适合作为一个持久的记录系统,因此许多应用程序需要结合两种不同的工具才能满足所有要求。
我们在"保持系统同步 "一文中提到了整合数据系统的问题。随着不同数据表示形式的增加,集成问题也变得更加棘手。除了数据库和搜索索引外,您可能还需要在分析系统(数据仓库或批处理和流处理系统)中保存数据副本;维护从原始数据中衍生出来的对象的缓存或去规范化版本;通过机器学习、分类、排名或推荐系统传递数据;或根据数据的变化发送通知。 ...