定期从 Sql 服务器提取数据并将其转换为 MongoDB

Extract & transform data from Sql Server to MongoDB periodically

我有一个 Sql 服务器数据库,用于存储来自许多不同来源(作者)的数据。

我需要为用户提供一些聚合数据,但是在 Sql 服务器中,这些数据存储在几个不同的 tables 中,查询它太慢了( 5 tables在每个 table 中加入几百万行,一对多)。

我目前认为最好的方法是提取数据,对其进行转换并将其存储在单独的数据库中(假设 MongoDB,因为它将仅用于读取)。

我不需要实时数据,只是与 'master' 数据库相比不超过 24 小时。

但是实现这一目标的最佳方法是什么?你能为它推荐任何工具(最好是免费的)还是编写你自己的软件并定期安排到 运行 更好?

我建议在这里尊重 NIH 原则,阅读和转换数据是一个很好理解的练习。有几种免费的 ETL 工具可用,它们具有不同的方法和重点。 Pentaho (ex Kettle) and Talend are UI based examples. There are other ETL frameworks like Rhino ETL 只是给你一组工具来用代码编写你的转换。您更喜欢哪一个取决于您的知识,当然,也取决于您的偏好。如果您不是开发人员,我建议您使用一种基于 UI 的工具。我在一些较小的数据仓库场景中使用过 Pentaho ETL,它可以通过操作系统工具进行调度(cron on linux,task scheduler on windows)。更复杂的场景可以使用 Pentaho PDI 存储库服务器,它允许集中存储和调度您的作业和转换。它具有多种数据库类型的连接器,包括 MS SQL Server。我自己没有使用过 Talend,但我听说过关于它的好消息,它也应该在您的列表中。

坚持使用标准工具的主要优势在于,一旦您的需求增长,您就已经拥有了处理它们的工具。您可以使用执行复杂 select 并将结果插入目标数据库的小脚本来解决当前问题。但经验表明,这些需求很少会长期保持不变,一旦您不得不合并额外的数据库,甚至可能是文本文件中的一些信息,您的脚本的可维护性就会越来越差,直到您最终屈服并在标准工具集中重做您的工作专为工作而设计。