数据湖和多语言持久性有何不同?

use*_*605 3 database-design data

我刚刚遇到了一种叫做多语言持久性的新技术。然而,它听起来很像一个数据湖。那么,这两种东西有什么不同呢?

Vér*_*ace 11

2006 年,Neal Ford*在一篇博客文章中首次使用“多语言”(意思是“说或使用几种不同的语言”)这个词,他在博客文章中创造了“多语言编程”一词,他强调现在,它是不足以成为(例如)C 和 C 的专家 - 称职的软件工程师必须能够在显着> 1 种语言之间移动。

有趣的是,他还提到 JVM(和/或 .NET)是一种通用机器(它们是),并且可以使用不同的 JVM 语言来完成不同的任务,然后将字节码组合成一个可执行文件——我们现在看到了例如(我的兴趣)在Clojure和 Java 中 - 您拥有 Clojure 的功能方面,您可以将其与庞大的 Java 生态圈(例如,考虑大量的库)相结合,从而获得两全其美。ScalaKotlin是也可以实现这一点的其他示例。

Martin Fowler将这种平台多样性的概念扩展到数据库中。2011 年,他创造了(在他所谓的“bliki” ——博客/维基)术语“多语言持久性”。他的观点是,系统中的不同功能可以由不同的数据库提供最佳服务 - 如下图所示:

在此处输入图片说明

随着当前远离软件单体和微服务的趋势,其中系统的每个区域都是不同的程序,可能/可能存在于不同的容器和/或服务器中,自从通用数据交换以来,这种模型变得越来越相关JSONRESTful Web 服务的语言意味着不同数据库系统之间的阻抗不匹配得到缓解,并且不像以前那么重要。

现在,对于数据湖,维基上提供了一个很好的定义(以及优秀的文章 BTW - 值得一读):

数据湖是以自然/原始格式存储的数据的系统或存储库,通常是对象 blob 或文件。数据湖通常是所有企业数据的单一存储,包括源系统数据的原始副本和用于报告、可视化、高级分析和机器学习等任务的转换数据。数据湖可以包括来自关系数据库(行和列)的结构化数据、半结构化数据(CSV、日志、XML、JSON)、非结构化数据(电子邮件、文档、PDF)和二进制数据(图像、音频、视频)。

所以,多语言持久化和数据湖之间的关系是明确的,但它们绝对不是一回事!

在我看来,可以将数据湖视为多语言持久性的实例(与对象是类的实例大致相同)。多语言持久性是一个概念,数据湖是该概念在行动中的具体化。

不出所料,传统供应商正在通过尝试将这些数据库功能整合到他们自己的产品中来反击这一趋势——例如,Oracle 已将JSON 文档存储纳入其旗舰产品(来自此处):

Oracle 作为文档存储

Oracle Database 18c 完全支持使用 JSON 数据模型的无模式应用程序开发。这允许采用混合开发方法:NoSQL 文档存储的所有模式灵活性和快速应用程序开发,结合​​ Oracle Database 18c 中的所有企业就绪特性。

它还有一个单独的键值存储- 从这里开始

Oracle NoSQL 数据库是针对具有以下特征的应用程序的解决方案:

Produce and consume data at high volume and velocity
Require instantaneous response time to match user expectations
Developed with continuously evolving data models
Scale on–demand based on the dynamic workloads
Run Code Online (Sandbox Code Playgroud)

Oracle 的旗舰数据库和他们的 NoSQL 是独立的产品,这是毫无价值的。有趣的是,PostgreSQL似乎正在采用最“全面”的多语言持久性方法。在他们的数据库中,您可以拥有一个键值存储、JSON 文档,当然还有普通的关系表,并且可以在这些不同的存储类型之间和内部执行 SQL。

令人惊讶的是,PostgreSQL 作为文档存储的性能大约是。根据此基准测试,使用 JSON 文档比 MongoDB 好 2.5 倍。诚然,EnterpriseDB 可能被视为有偏见,因为他们是 PostgreSQL 专家,但他们将基准放在 GitHub 上供任何人测试,我一直无法找到 MongoDB 的反驳。

最后,只是一句警告 - 虽然您可能能够做到,但这不一定是一个好主意!我会把最后的话留给 2ndQuadrant(PostgreSQL 专家):

PostgreSQL 有 json 支持——但你不应该在你正在做的大部分事情中使用它。这也适用于 hstore 和新的 jsonb 类型。这些类型在需要时是有用的工具,但在 PostgreSQL 中对数据建模时不应成为您的首选,因为它会使查询和操作变得更加困难。

有一件事是肯定的,数据库世界将继续发展,并在未来很长一段时间内让我们所有人都从事工作!:-)

ps +1 一个有趣的问题,欢迎来到论坛!

* 有趣的是,他称自己为“meme-wrangler”——我喜欢,有点古怪