「文档数据库迁移」从MongoDB迁移到Apache CouchDB

简介: 「文档数据库迁移」从MongoDB迁移到Apache CouchDB

「文档数据库迁移」从MongoDB迁移到Apache CouchDB

首席架构师 2020-01-18 08:36




本文将指导您完成使用简单的python脚本将数据从MongoDB迁移到Apache CouchDB的步骤。由于多种原因,包括源数据库和目标数据库之间的基本架构和设计差异,将数据从一个数据库迁移到另一个数据库可能会遇到挑战。MongoDB和CouchDB都是文档数据库,它们存储一组类似JSON的独立文档。本文假定您对这两个数据库有基本的了解,并且熟悉如何在这两个数据库中存储数据。下表提供了两个数据库之间的高级比较。要获得更深入的了解,您可以访问官方文档,网址为docs.mongodb.com和couchdb.apache.org。




迁移环境

本文支持所有环境,无论您的数据库托管在容器,VM还是裸机系统中。下图显示了此迁移示例中涉及的组件。




  • 源数据库:一个三节点的MongoDB版本3.4.1集群。它具有多个数据库,集合和文档,需要迁移。数据库和相关文件存储在网络文件系统(NFS)共享上。
  • 目标数据库:三个节点的CouchDB 2.2版集群。它仅具有在新的CouchDB安装期间创建的默认数据库。新数据库将在迁移过程中即时创建。本文假定您已经在环境中完成了CouchDB的安装。
  • 迁移系统:这是一个运行最新的Ubuntu OS,pymongo版本3.4.0,python 3.x,python请求(HTTP库)二进制文件的系统。这用作执行python迁移脚本的迁移系统。该系统能够与MongoDB和CouchDB端点通信。

迁移方式:

以下步骤定义了此示例中遵循的迁移方法。

  1. 使用pymongo MongoClient启动与MongoDB服务端点的客户端会话。
  2. 查询和查看MongoDB中的数据库列表。
  3. 查询MongoDB中的每个数据库,并创建数据库中存在的所有集合的列表。
  4. 遍历每个集合并一次复制一个文档以进行迁移。
  5. 使用服务URL和标头信息建立CouchDB REST API连接。
  6. 使用与MongoDB中相同的数据库名称连接到CouchDB数据库。如果您是第一次连接数据库,则在CouchDB中将不可用。因此,该脚本将创建一个新的数据库,然后插入在步骤4中复制的第一个文档。该脚本将继续所有集合和数据库的文档迁移。

本文介绍的迁移方法适用于较小的数据库

迁移之前

在开始迁移之前,您需要了解这两个数据库之间的关键区别。MongoDB将文档存储在集合中,而CouchDB将文档直接存储在数据库中(请参阅本文开头显示的比较表中的“对象存储”)。记住上述差异,此示例在迁移过程中在CouchDB中创建新数据库时将集合名称附加到数据库名称中。参见下面的示例,

MongoDB: Database = SalesDB, Collection = Atlanta Database = SalesDB, Collection = Ohio CouchDB: Database = SalesDB-Atlanta Database = SalesDB-Ohio


在CouchDB数据库中追加集合名称仅出于理智的目的,而不是迁移所必需的。您可以选择使用与MongoDB中相同的数据库名称来创建CouchDB数据库,只要这些名称是唯一的即可。

不支持:此迁移示例不支持包含带有附件的文档的数据库。

让我们迁移

您应该在要运行迁移脚本的迁移系统上安装以下依赖项。

pymongo version 3.4.0python 3.x

接下来,将下面列出的python脚本(mongo2couch.py)复制到迁移系统,并使用以下命令运行迁移脚本。确保根据您的环境用适当的值替换MongoDB和CouchDB端点。

$ python mongo2couch.py -c 'http://admin:password@testcouchdb:5984' -m 'mongodb://localhost:27017'

档案:mongo2couch.py

https://gist.github.com/Kailashcj/d91ed66e2885db968fecf5de2c9b056d


运行脚本后,它将测试与CouchDB和MongoDB端点的连接。建立成功的连接后,它将读取MongoDB中存在的所有数据库。接下来,它将遍历除“ admin”和“ local”数据库之外的每个数据库中的集合,因为它们是MongoDB的特殊内部数据库。该脚本将读取每个集合中存在的文档,并将其复制到CouchDB数据库。首次插入文档时,它将在CouchDB中创建适当的数据库。该脚本将报告执行期间的所有错误。默认情况下,所有报告“不可JSON可序列化”错误的文档都会被跳过。如果您的环境中有这些错误,可以参考README.md来解决。最后,脚本将生成一个迁移摘要,如下所示。




您可以登录到CouchDB Web管理仪表板,以验证新数据库的创建以及这些数据库中已迁移的文档。

摘要

我希望这篇文章易于理解,并能帮助您成功地将文档迁移到CouchDB数据库。祝好运。

相关文章
|
NoSQL MongoDB 数据库
数据库数据恢复—MongoDB数据库数据恢复案例
MongoDB数据库数据恢复环境: 一台操作系统为Windows Server的虚拟机上部署MongoDB数据库。 MongoDB数据库故障: 工作人员在MongoDB服务仍然开启的情况下将MongoDB数据库文件拷贝到其他分区,数据复制完成后将MongoDB数据库原先所在的分区进行了格式化操作。 结果发现拷贝过去的数据无法使用。管理员又将数据拷贝回原始分区,MongoDB服务仍然无法使用,报错“Windows无法启动MongoDB服务(位于 本地计算机 上)错误1067:进程意外终止。”
|
12月前
|
缓存 NoSQL Linux
在CentOS 7系统中彻底移除MongoDB数据库的步骤
以上步骤完成后,MongoDB应该会从您的CentOS 7系统中被彻底移除。在执行上述操作前,请确保已经备份好所有重要数据以防丢失。这些步骤操作需要一些基本的Linux系统管理知识,若您对某一步骤不是非常清楚,请先进行必要的学习或咨询专业人士。在执行系统级操作时,推荐在实施前创建系统快照或备份,以便在出现问题时能够恢复到原先的状态。
1261 79
|
12月前
|
存储 NoSQL MongoDB
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
435 8
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
|
11月前
|
运维 NoSQL 容灾
告别运维噩梦:手把手教你将自建 MongoDB 平滑迁移至云数据库
程序员为何逃离自建MongoDB?扩容困难、运维复杂、高可用性差成痛点。阿里云MongoDB提供分钟级扩容、自动诊断与高可用保障,助力企业高效运维、降本增效,实现数据库“无感运维”。
|
9月前
|
人工智能 数据处理 API
阿里云、Ververica、Confluent 与 LinkedIn 携手推进流式创新,共筑基于 Apache Flink Agents 的智能体 AI 未来
Apache Flink Agents 是由阿里云、Ververica、Confluent 与 LinkedIn 联合推出的开源子项目,旨在基于 Flink 构建可扩展、事件驱动的生产级 AI 智能体框架,实现数据与智能的实时融合。
1482 6
阿里云、Ververica、Confluent 与 LinkedIn 携手推进流式创新,共筑基于 Apache Flink Agents 的智能体 AI 未来
|
存储 Cloud Native 数据处理
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
本文整理自阿里云资深技术专家、Apache Flink PMC 成员梅源在 Flink Forward Asia 新加坡 2025上的分享,深入解析 Flink 状态管理系统的发展历程,从核心设计到 Flink 2.0 存算分离架构,并展望未来基于流批一体的通用增量计算方向。
672 0
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
|
11月前
|
SQL 人工智能 数据挖掘
Apache Flink:从实时数据分析到实时AI
Apache Flink 是实时数据处理领域的核心技术,历经十年发展,已从学术项目成长为实时计算的事实标准。它在现代数据架构中发挥着关键作用,支持实时数据分析、湖仓集成及实时 AI 应用。随着 Flink 2.0 的发布,其在流式湖仓、AI 驱动决策等方面展现出强大潜力,正推动企业迈向智能化、实时化的新阶段。
1208 9
Apache Flink:从实时数据分析到实时AI
|
11月前
|
SQL 人工智能 API
Apache Flink 2.1.0: 面向实时 Data + AI 全面升级,开启智能流处理新纪元
Apache Flink 2.1.0 正式发布,标志着实时数据处理引擎向统一 Data + AI 平台迈进。新版本强化了实时 AI 能力,支持通过 Flink SQL 和 Table API 创建及调用 AI 模型,新增 Model DDL、ML_PREDICT 表值函数等功能,实现端到端的实时 AI 工作流。同时增强了 Flink SQL 的流处理能力,引入 Process Table Functions(PTFs)、Variant 数据类型,优化流式 Join 及状态管理,显著提升作业稳定性与资源利用率。
941 0
|
10月前
|
人工智能 运维 Java
Flink Agents:基于Apache Flink的事件驱动AI智能体框架
本文基于Apache Flink PMC成员宋辛童在Community Over Code Asia 2025的演讲,深入解析Flink Agents项目的技术背景、架构设计与应用场景。该项目聚焦事件驱动型AI智能体,结合Flink的实时处理能力,推动AI在工业场景中的工程化落地,涵盖智能运维、直播分析等典型应用,展现其在AI发展第四层次——智能体AI中的重要意义。
3242 27
Flink Agents:基于Apache Flink的事件驱动AI智能体框架
|
存储 人工智能 大数据
The Past, Present and Future of Apache Flink
本文整理自阿里云开源大数据负责人王峰(莫问)在 Flink Forward Asia 2024 上海站主论坛开场的分享,今年正值 Flink 开源项目诞生的第 10 周年,借此时机,王峰回顾了 Flink 在过去 10 年的发展历程以及 Flink社区当前最新的技术成果,最后展望下一个十年 Flink 路向何方。
1293 33
The Past, Present and Future of Apache Flink

推荐镜像

更多