我目前正在开发类似于analitics的应用程序,我有 Angularjs app ,它与 Spring REST Client App 进行通信,用户从中创建令牌(trackingID)并使用生成的带有此id的脚本放在他的网站上,通过另一个 Spring REST跟踪应用收集有关访问者操作的信息,用于跟踪应用我用mongodb收集访客操作/访客信息用于快速插入,但用于休息客户端应用程序 mysql,包含用户/帐户详细信息。 我的问题是如何将mongo数据从跟踪应用程序迁移到mysql可能是为了获得连接的可能性,以便使用angularjs客户端应用程序中的任何类型的过滤器轻松,快速地分析数据,手动创建任何定期从上一点传输数据的工作人员显示从mongo到mysql的状态,或者是否可以为此传输设置任何现有工具?
答案 0 :(得分:15)
没有官方图书馆可以做到这一点。
但您可以使用mongoDB中的mongoexport
功能将其导出为CSV格式,并mysqlimport
将其导入MySQL。
以下是文档MySQL import和MongoDB Export的链接。
还有一种方法可以尝试用您喜欢的语言编写程序并从MongoDB读取并写入MySQL
答案 1 :(得分:8)
MySQL 5.7有一个新的JSON数据类型,非常方便。
您可以在MySQL上创建一个表来按原样接收JSON消息,然后使用SQL查询它或进行后处理以将数据加载到一组结构化的数据库表中。
答案 2 :(得分:2)
我意识到这个问题已经有几年了 - 但最近我有很多人询问 tool I developed (https://virtual.blue/apps/json-converter) 是否可以完全按照 OP 的要求(将 MongoDB 转换为SQL)所以我猜它仍然是人们想要的东西。继续阅读以了解为什么我对此并不感到惊讶。
该工具是否可以帮助您的简短回答是:也许。如果您现有的数据关系不是太复杂,并且您的数据库不是很大,那么可能值得一试。
但是,我认为尝试解释这种转换的问题可能会有所帮助,因为到目前为止我看到的所有答案都是“尝试工具 X”或“首先转换为格式 Y”然后您可以使用实用程序 Z 将其放入 MySQL”。即,没有考虑这样做后您得到的结果是否在数据关系和完整性方面有意义。
例如,您可以将整个数据库转储粘贴在单个 SQL 表的单个字段中(空间限制可能会在现实中阻止这种情况,但希望您明白我的意思)。那么你的数据库将是“以 MySQL 格式”,但它对任何人都绝对没有用。
关键是,您真正想要的是一个完全定义的数据库模型,正确封装所有内在数据关系。 (众所周知的“Database normalization”。)如果您的转换过程弄错了这些关系,那么您的模型已损坏,并且您尝试运行的任何查询都可能返回无意义。不幸的是,没有什么神奇的工具可以“知道”在 MySQL 中表示数据的最佳方式,闭上眼睛把它塞进一堆随机工具中不太可能奇迹般地得到你想要的东西。
这就是“NoSQL”哲学(时尚)的根本问题所在。他们向人们兜售“非关系数据”的虚假概念。当我听到这个消息时,我的第一个想法是,“它是如何工作的?当然所有数据都是关系数据?”从表面上看,我们正在稳步获得越来越多的证据,证明我的直觉是正确的。 (“NoSQL?为什么要停在那里?我选择'NoDatabase'。它根本不返回任何结果,但它确实很快!”)
疯狂的 NoSQL 将几个重要的基本工程原理抛诸脑后。我们大喊“不要硬编码!”,“DRY!” (不要重复你自己)因为这些行为给系统注入了不灵活性。传统智慧在建议“创建一个包含所有数据关系的完整描述模型”时提出了完全相同的灵活性论点。然后您可以对其执行任意查询并期望得到有意义的结果。 “是的,但有一大堆我们永远不需要运行的查询,”NoSQL 的支持者说。但是,我们肯定从我们“永远不需要做”的事情上吸取了教训吗? (“我自由地硬编码,因为我知道我永远不想改变我的代码。”嗯......)
关于速度的争论在很大程度上没有实际意义。假设事实证明您经常执行复杂的 9 表连接,性能出乎意料地缓慢。所以创建一个索引。缓存它。交换一些磁盘空间以提高速度。 NoSQL 的理念是用数据完整性换取速度,这完全没有意义。
当您生成快速查找索引(缓存/表/地图/任何内容)时,您真正在做的是在模型上创建视图。如果您的模型发生变化,您可以轻松更新您的视图。从模型到视图很容易 - 这是一对多的操作,而且您正处于熵的右侧。
然而,当您使用 MongoDB 时,您实际上决定创建视图而无需费心描述您的基本模型。现在您发现有些查询是您想要运行的,但不能运行 - 因此您想转移到 SQL 并实际正确建模数据也就不足为奇了。问题是您现在想要从视图转到模型。现在你站在熵的错误一边。您的视图是模型基本关系的有损表示。你不能指望一个工具来“翻译”你的数据库,因为你要求它插入最初没有定义的新关系。这些是机器无法猜测的真实世界关系。该工具无法知道想要什么关系。
简而言之,您可以可靠地做到这一点的唯一方法就是弄脏您的手。一个完全了解您正在建模的系统的聪明人需要坐下来仔细地提出(可能是大量的)代码,以有效地挑选数据并解决所有未充分表示的数据关系。如果您的数据很复杂,那将会很头疼,而且没有办法作弊。
如果您的数据仍然相对简单,那么我建议您尽快进行转换,以免变得困难。在这种情况下,我的工具 (https://virtual.blue/apps/json-converter) 可能会有所帮助。
(他们真的应该在想出这些胡说八道之前问问物理学家......!)
答案 3 :(得分:0)
您可以下载Studio 3T for Mongo的试用版,然后直接将数据库导出到SQL(或JSON)