是否可以创建每天将SQL数据库写入MongoDB的管道?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否可以创建每天将SQL数据库写入MongoDB的管道?相关的知识,希望对你有一定的参考价值。

TL:DR我想将BigQuery的功能与我的MERN-stack应用程序结合起来。最好(a)使用nodejs-biquery直接通过BigQuery编写Node / Express API,或者(b)创建将我的(整个)BigQuery数据库写到MongoDB的日常工作,然后使用mongoose编写使用MongoDB的Node / Express API?

我需要确定将创建BigQuery数据库的数据ETL工作流程与react / node Web应用程序相结合的最佳方法。数据ETL使用Airflow创建一个工作流,该工作流(a)将每日数据备份到GCS中,(b)将数据写入BigQuery数据库,并且(c)运行一堆SQL在BigQuery中创建其他表。在我看来,我仅有的两个选择是:

  1. 每天进行一次从BigQuery数据库到MongoDB的写/转换/转移/迁移(无论正确的动词是什么)。我已经有一个使用mongoose编写的Node / express API,已连接到MongoDB集群,这种方法将允许我保留该API。
  2. 使用nodejs-biquery库创建直接连接到BigQuery的节点API。我的应用程序将从MERN堆栈(BQ)ERN堆栈更改。我必须重新编写node / express API才能使用BigQuery,但不再需要MongoDB(也不必每天将数据从BigQuery传输到Mongo)。但是,如果我要查找单个条目,则BigQuery可能是一个非常慢的数据库,因为它不打算用作Mongo或SQL数据库(它没有索引,一行检索查询的运行速度比全表扫描慢)。我的大多数API调用都是从数据库中获取很少的数据。

我不确定哪种方法最好。我不知道对于一个Web应用程序有2个数据库是否是一个坏习惯。我不知道是否可以进行(1)从一个数据库到另一个数据库的每日传输,而且我不知道如果直接将其与我的API一起使用,BigQuery将有多慢。我认为将(1)添加到我的数据工程工作流中是否很容易,这是首选,但是我不确定。

答案

我要和(1)一起去。编写一个python脚本来查询BigQuery中的表,进行转换并将集合写入Mongo并不需要太多工作。有一些事情要处理(增量更改等),但是比编写一个全新的节点/ bigquery API要容易得多。

另一答案

FWIW,前世,我在一个拥有4个不同数据库后端的Web电子商务网站上工作。 (Mongo,mysql,Redis,ElasticSearch),所以一个以上的问题根本不是问题,但是您需要考虑将其中一个作为记录数据库,如果两者之间不匹配,则是IE,一个是真理的源头,另一个是怀疑。在我的示例中,Redis和ElasticSearch几乎是短暂的-将它们吹走,然后从不复杂的mysql和mongo来源重新创建它们。现在,mySql和Mongo在同一时间有点奇怪,而且我们正在缓慢迁移。这意味着各种记录类型正在从MySql过渡到mongo。这个过程看起来像:-ORM层同时写入mysql和mongo,读取仍来自MySql。-定期比较数据。-几个月过去了,没有异常情况,对MySql的写操作已关闭,读取操作已移至Mongo。

最终目标不再是MySql,所有都是Mongo。我切掉了这个切线,因为似乎您可以做类似的事情-在您使用的任何DB抽象层(ORM,DAO,其他我不了解的其他东西等)上写入两个DB,最终将读取移动为适合他们需要去的地方。如果需要大量写入操作,则可以在该抽象层进行缓冲,直到达到选择的阈值,然后再发送。

话虽这么说,根据您的数据复杂性,每夜ETL作业也是完全可行的,但是您确实会遇到管理和监视该额外流程的额外复杂性。另一个潜在的缺点是数据总是过时的。

以上是关于是否可以创建每天将SQL数据库写入MongoDB的管道?的主要内容,如果未能解决你的问题,请参考以下文章

每天将服务器负载写入日志文件

SQLite - 每天将 .csv 数据导入数据库

Mongodb:在 RAM 中保存经常写入的集合

mongodb优缺点分析

每天将 Postgresql 数据库从小型 SSD 自动备份到多个硬盘

mongodb千万级写入怎么优化