我们使用机器学习技术将英文博客翻译为简体中文。您可以点击导航栏中的“中文(简体)”切换到英文版本。
将文档工作负载从 Oracle SODA 迁移到亚马逊文档数据库
在这篇文章中,我们向您展示了将 JSON 工作负载从本地数据库迁移到 亚马逊云科技 云的现代化路径。您可以将文档工作负载转移到
Amazon DocumentDB 是一个完全托管的原生 JSON 文档数据库,无需管理基础设施即可轻松且经济高效地运行几乎任何规模的关键文档工作负载。Amazon DocumentDB 通过提供内置安全最佳实践、持续备份以及与其他 亚马逊云科技 服务的本机集成,简化了您的架构。
当您从 Oracle 或 SQL Server 等商业关系数据库迁移时,可以选择另一个关系数据库作为迁移目标。这是向云端迁移的常见途径。许多关系数据库都支持 JSON 数据类型。这使得在同一个数据库中存储关系数据和 JSON 文档成为可能。但是,从长远来看,该解决方案可能会有缺点,例如性能下降、成本增加和复杂性增加。为了解决这些缺点,您可以使用专门构建的 JSON 数据库,例如 Amazon DocumentDB。
甲骨文 SODA 和亚马逊文档数据库
在此示例中,我们使用了从 Oracle 简单对象数据访问 (SODA) 到 Amazon DocumentDB 的现代化迁移。Oracle SODA 是一组 API,开发人员使用它们来管理 Oracle 数据库中的文档集合。我们将讨论 Oracle SODA 和亚马逊 DocumentDB 的相似之处并显示查询示例。我们还将展示如何使用
让我们首先比较 Oracle SODA 和亚马逊 DocumentDB 查询语法。许多 Oracle SODA 查询无需修改即可在亚马逊 DocumentDB 中运行。熟悉编写 Oracle SODA 查询的工程师已经熟悉编写亚马逊 DocumentDB 查询,这可能会令人惊讶。
为了演示 Oracle SODA 和亚马逊 DocumentDB 的能力,我们创建了一系列汽车文档。我们插入一个示例 JSON 文档来显示其结构和字段,稍后我们将使用它来构建示例查询。
让我们开始创建 Oracle SODA 集合并插入示例 JSON 文档。
- 连接到 Oracle 数据库
- 运行以下存储过程创建 SODA 集合并插入样品车 JSON 文档:
Amazon DocumentDB 是一个 NoSQL 数据库,在向其中插入文档之前,您无需创建集合。如果该集合不存在,则由亚马逊 DocumentDB 创建。您可以将前面示例中的 Oracle 存储过程编写为单个 Amazon DocumentDB 命令:
甲骨文 SODA 和亚马逊 DocumentD
我们插入的示例 JSON 文档包含以下字段:
品牌
、
型号
、
所有者
、字符串
特征
数组和
参数
对象数组(带有
名称
和
值
字段)。
Oracle SODA 和亚马逊 DocumentDB 查询语法有很多共同之处。你无需修改即可在亚马逊 DocumentDB 中运行许多 Oracle SODA 查询。让我们来看几个例子。
让我们从基本的 Oracle SODA 按示例查询 (QBE) 开始。为了使示例代码简短而不是遍历文档,我们只会计算它们。在第一个示例中,我们要计算所有符合以下条件的汽车:
-
店主是
约翰·史密斯 -
品牌是
SportForYou -
它的参数为 driveType,其值为 4WD -
它具有 G
PS功能
在 Oracle 中,我们使用以下代码:
迁移到 Amazon DocumentDB 时,您可以直接从之前的 Oracle SODA 查询中复制筛选条件,并将其作为 JSON 对象传递给亚马逊 DocumentDB 中的
查找
函数:
查询语法完全相同:查询结构、JSON 路径、
$in
操作。
还有更多这样的例子:像 $and、$or 、$no
r
和 $
not 这样的逻辑表达式 ;像
$
lt 、
$g
betweenh 这样的算术表达式;等等。
t
和 $
如果我们想计算 Oracle SODA 系列中有多少辆
车 TruckForYou Heavy H1
或
SportforYou Bolid 1
,我们将 使用以下代码:
前面的查询与亚马逊 DocumentDB 中的查询完全相同:
尽管大多数操作是相似的,但也有一些区别。例如,如果我们想 在 Oracle SODA 中获取所有与
Sport
匹配的赛车,我们会使用
$like, 如
以下代码片段所示:
在亚马逊 DocumentDB 中,
$lik
e 不存在;相反,前面的查询使用 $regex:
要了解有关 Oracle SODA 过滤器规范
甲骨文 SODA 和亚马逊 DocumentDB 分页支持
为了补充查询示例,让我们以分页支持示例作为总结。这是许多网站上使用的非常常见的功能。Oracle SODA 和亚马逊 DocumentDB 支持筛选、排序、跳过和限制操作。
在 Oracle SODA 中,JSON 查询会更改其语法,成为包含
$query 和 $
ord
erby 字段的嵌套 JSON 文档,如以下代码所示:
在 Amazon DocumentDB 中,
查找
函数保持不变,排序参数传递给
排序
函数:
将数据从 Oracle SODA 迁移到亚马逊文档数据库
要将文档工作负载从 Oracle 转移到亚马逊 DocumentDB,你可以使用 亚马逊云科技 DMS。亚马逊云科技 DMS 是一项托管迁移和复制服务,可帮助您将数据库和分析工作负载快速、安全地迁移到 亚马逊云科技,停机时间最短,数据丢失为零。亚马逊云科技 DMS 支持在许多数据库和分析引擎之间迁移。
在以下示例中,我们使用 亚马逊云科技 DMS 将我们的 Oracle SODA 汽车收藏中的数据复制到亚马逊 DocumentDB。在 亚马逊云科技 DMS 中创建复制任务时,您需要定义一组映射规则。这些规则指示 亚马逊云科技 DMS 应如何复制数据。
Oracle SODA 集合以表的形式实现,我们需要转换其中的两列,然后才能将其复制到 Amazon DocumentDB。这些列及其映射规则如下:
-
id varchar
— 需要 在亚马逊 DocumentDB 中使用 AWS D MS 重命名列转换将其重命名为_id -
json_document clob
— 需要使用 AWS DMS 更改 数据类型列转换将其更改为字符串数据类型
以下代码示例显示了汽车集合的完整 亚马逊云科技 DMS 映射规则:
您无需进行其他配置;亚马逊云科技 DMS 会自动将列转换为 JSON 字段。此外,以
json_ 开头的列被强制转换为嵌套 的 JS
ON 文档。亚马逊云科技 DMS 将这个强制的 JSON 文档放在字段中,该字段的名称是原始列名,但没有
j
son_ 前缀。
要说明这种行为,请参阅以下文档,亚马逊云科技 DMS 已将其迁移到亚马逊 DocumentDB。Oracle SODA 的来源集有
ID
和
json_
document 列。
id
列已迁移到
_id, 并且
json_doc ument 列被强制转换为嵌套文档
字段:
要了解有关如何使用 亚马逊云科技 DMS 将数据复制到 Amazon DocumentDB 的更多信息,请参阅:
在亚马逊 DocumentDB 中实现 ETL
您可以将 亚马逊云科技 Glue 用作完全托管的 Apache Spark 服务,为亚马逊 DocumentDB 实施复杂的 ETL 流程。
你可以使用
write_dynamic_frame 操作将 DynamicF
rame 写入亚马逊
DocumentDB ,就像
其他支持的连接类型一样:
有关更多信息,请参阅
在 ETL 流程中,您需要自定义将以逗号分隔的平面值 (CSV) 文件转换为嵌套的 JSON 文档。以 cars 为例,但有更多字段,假设我们有以下平面文件 CSV:
我们想将其转换为以下 JSON 文档:
您可以在
DynamicFrame
不需要开发人员创建架构。亚马逊云科技 Glue 将自动推断出新创建的
DynamicFram
e 的架构。
迁移到亚马逊 DocumentDB 的好处
在本节中,我们将讨论对 JSON 工作负载进行现代化改造并将其迁移到 Amazon DocumentDB 的三个主要好处。
第一个好处是性能和功能完整性。Amazon DocumentDB 的性能可以比使用 JSON 数据类型的关系数据库高出几个数量级。在最近的一个迁移项目中,我们的团队比较了 PostgreSQL JSON 数据类型和亚马逊 DocumentDB。尽管数据量是PostgreSQL的14倍,但亚马逊DocumentDB还是能够满足严格的服务级别协议要求。实际上,数据库性能是构建专用数据库(包括图形、时间序列和键值)以及如此受欢迎和成功的主要原因。此外,作为 JSON 原生数据库,Amazon DocumentDB 提供的 JSON 功能比关系数据库多得多。一个简单的例子是索引 JSON 数组字段或运行强大的 JSON 文档聚合管道。
迁移到亚马逊 DocumentDB 的第二个好处是,你可能已经熟悉了 Amazon DocumentDB 查询语法。在我们的迁移项目中,我们从 Oracle SODA 迁移,发现 JSON 路径、查询结构、数组表达式、逻辑表达式、文本运算或算术表达式之类的东西是相似的。许多查询无需更改即可在 Amazon DocumentDB 中运行。这意味着您可能已经在不知情的情况下熟悉了亚马逊 DocumentDB。这也意味着具有 Oracle SODA 经验的数据库工程师可以快速开始使用亚马逊 DocumentDB。
迁移到亚马逊 DocumentDB 的第三个好处是你可以访问现有的 MongoDB 生态系统。几乎每种编程语言都有许多框架、ETL 引擎和驱动程序,您可以在 Amazon DocumentDB 中使用。亚马逊 DocumentDB 支持 MongoDB 3.6、4.0 和 5.0 有线协议。但是,Amazon DocumentDB 和 MongoDB 之间有一些区别,有关更多信息,请参阅
结论
在这篇文章中,我们讨论了如何对 JSON 工作负载进行现代化改造并将其迁移到 Amazon DocumentDB。Amazon DocumentDB 的现代化可能比您想象的要简单,而且您、您的团队和项目可以从中受益的许多功能。
您可以
最后,有关亚马逊 DocumentDB 的更多信息,请访问
作者简介
Lukasz Budnik
是亚马逊 DMA 团队的首席软件开发工程师。Lukasz 与最大的亚马逊客户合作开展最具挑战性的云迁移和现代化计划。在空闲时间,卢卡斯喜欢学习新的人类语言。你好,朋友们!
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。