【发布时间】:2013-07-24 11:07:22
【问题描述】:
是否有可能/是否有工具/最佳实践等将数据从关系数据库迁移到 NoSQL 格式。
我有一个 JEE6 应用程序使用 Hibernate ORM 来持久保存到 MySQL,但现在我们希望迁移到 NoSQL 解决方案,但需要随身携带现有数据
谢谢 W
【问题讨论】:
标签: database jakarta-ee nosql relational-database java-ee-6
是否有可能/是否有工具/最佳实践等将数据从关系数据库迁移到 NoSQL 格式。
我有一个 JEE6 应用程序使用 Hibernate ORM 来持久保存到 MySQL,但现在我们希望迁移到 NoSQL 解决方案,但需要随身携带现有数据
谢谢 W
【问题讨论】:
标签: database jakarta-ee nosql relational-database java-ee-6
有一些工具可以帮助迁移,但归根结底,MySQL 是一个关系型数据库,其结构与 noSQL 数据库完全不同。
最后,您几乎总是必须执行this article 中所述的这四个步骤(指的是 mongoDB,您没有指定,但它适用于任何一个):
1. 了解 MongoDB。下载它,阅读教程,尝试一些玩具项目。
2.考虑如何在其文档存储中表示您的模型。
3. 将数据从数据库迁移到 MongoDB,可能只需针对数据库编写一堆
SELECT * FROM语句,然后 然后使用以下语言将数据加载到您的 MongoDB 模型中 你的选择。4. 重写您的应用程序代码以通过 insert() 或 find() 等语句查询 MongoDB。
【讨论】:
为了简化一些事情,Oracle 数据库将完全掌握数据库中存储的内容。 Oracle 或任何 RDBMS 将通过维护存储在表中的数据块之间的关系来做到这一点。
另一方面,基于文档的数据库主要存储数据在系统中的使用方式。它使用键值对来实现这一点,键在其中扮演某些关键变量。
这将取决于被迁移系统的复杂性、卷、要提供的功能等。虽然有多种方法可以从 RDBMS 迁移到基于 json 的数据库,但标准方法将涉及在现有数据库上构建视图SQL DB 和分阶段迁移。
当然,这种迁移的基本过程是首先从架构重新设计开始。在 Mongo JSON 或 BSON 等文档结构中,大多数父子关系可以容纳到单个结构(或文档)中。例如,Person_ID、Car_Ownership_ID 可以结合起来生成一个 json 文档,其中列出了汽车的所有所有者。
合理的架构设计过程将考虑某些目标,同时对 RDBMS 中的完全规范化的数据库进行非规范化。作为一个很好的第二步,大多数 JOIN 需要组合成交织的集合,以便于访问,但某些外部连接除外。
一旦 Schema 准备就绪,就可以使用 ETL 过程或替代脚本来提取、转换和加载带有 RDBMS 中数据副本的新原理图。
【讨论】:
将数据迁移到 NoSQL。在我看来,MongoDB 是一个不错的选择。有一个工具,Tapdata Replicator,可以将 MySQL、Oracle、SQLServer 复制到 MongoDB。 它允许您设置源数据库和目标数据库,然后将数据从源映射到目标。您可以在 MongoDB 中设置新的数据模型,无需任何代码。 例如,源数据库 MySQL 中有 20 张表,您可以在 MongoDB 中设计数据模式,集成到 3 或 5 个集合中。此外,您可以选择 1:1 克隆。
【讨论】:
一些对新访问者有用的信息和链接: 很有可能从 RDBMS 迁移到 NoSQL,但我建议阅读 NoSQL 的数据库设计。你正在处理完全不同的动物。这不是您从一个 RDBMS 到另一个 RDBMS 的典型 ETL/1:1 迁移。基本上是为高效的读/写和扩展而设计的(因此考虑 CPU、查询的内存使用,而不是像标准化 SQL 世界那样最小化磁盘空间)。通过选择正确的分区键进行扩展设计。根据数据访问要求,您的数据模型很可能会非常非规范化甚至在多个集合中复制副本。一旦您的设计完成,您就可以使用 Java SDK 为您选择的 NoSQL DB 编写此迁移。以下是一些帮助您入门的链接:
https://docs.microsoft.com/en-us/azure/cosmos-db/modeling-data https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-modeling-nosql.html
【讨论】:
我参加了 Mongo 大学 https://university.mongodb.com/ 的 M110JS“面向 Node.js 开发人员的 MongoDB”课程,并且可以全心全意地推荐它(它也是免费的)。
它确实涵盖了(我认为只用了一周的时间)SQL 和 NOSQL 之间的差异,例如何时不使用外键而是嵌入文档、存在重复风险等以及如何处理。
它只是每隔一段时间才开始,所以这只是一个长期的方法。
【讨论】: