【问题标题】:Pull data from an API and store it in a database after processing从 API 中提取数据并在处理后将其存储在数据库中
【发布时间】:2020-12-16 13:37:37
【问题描述】:

我不希望我的应用程序依赖于 API,为此我想创建一个数据库,它会定期从 API 中提取数据、处理/优化它,然后将数据推送到数据库中。

应用程序应该只与数据库通信以获取所需的任何内容。

另一方面,API 和数据库有自己的通信通道,使两个进程互为独占。

应用程序“A”仅与数据库“B”通信。 'B' 与 API 'C' 通信,定期执行其任务集。 “A”和“C”不交互。

对这种方法有什么建议吗?对数据库的要求是必须是 NoSQL。

【问题讨论】:

  • 这种方法很好,因为您将显着降低对 API 的调用,并在本地处理数据。一个考虑因素是,如果在一段时间后不准确,提取的数据(在您的数据库中)会有多好?
  • 这个想法是每 x 小时更新一次数据库,并删除在应用程序上下文中“过期”的数据(在 x 小时之后)。取决于数据库的结构。
  • 是的,那么 tat 将解决 old data 问题。很好。
  • 谢谢!罗恩,我无法弄清楚在 B 和 C 之间执行这些任务(从 API 中提取数据、预处理、推送到数据库、从数据库中删除过期内容)的“位置”。你能提出一些建议吗?
  • 嗯,你可以使用多种编程语言来做到这一点,Python、PHP、C#,甚至是命令行工具、BASH 等脚本...... Perl .. 这取决于你 :)

标签: database api architecture nosql


【解决方案1】:

您可以编写一个包装器,其中包含为您自己使用而准备的 API 函数。之后,你可以根据字段将你写在 Wrapper 上的函数分开,并为每个字段设置一个 Service 结构。最后,您可以通过服务使用您将在 UI 中使用的功能。我还建议将接口用于包装器和服务结构。 由于我提到的结构,API 的任何更改或服务的更改都不会影响整个程序。 我希望它对你有用。

【讨论】:

  • 目前我正在使用这种方法,它工作正常。但是,我的应用程序仍然直接依赖于 API。目的是为数据库和 API 建立一条单独的通信线路,这样我就可以更好地控制我从 app -> 数据库发出的请求(而不是 API,我必须根据 API 对我的响应变量进行建模API 支持的内容)。在将数据推送到数据库之前“在哪里”进行预处理的问题也是一个问题。
【解决方案2】:

你的问题很不清楚。它是那些有无限答案的人之一。但是,从高层次来看,您已经回答了自己的问题。 A B C. 解决方案可以是例如:

微服务

B 通过 REST API 处理存储

C 运行cron 作业以从远程 API 获取并存储在 B

A 使用 B 的 REST API

前端后端

B 在某处拥有cron 方法并为A 公开了一个REST API

单体

在 A 上运行 cron 作业以存储在本地数据库中,然后随时从中检索。

【讨论】:

  • 谢谢。在 cron 作业之后以及将其存储到 B 之前,我需要对数据进行哪些预处理?您能否也强调一下这一点?它是 cron 作业本身的一部分吗?
  • 有数百万种方法可以做到这一点。这个问题太笼统了。
  • 针对原始答案和最后一条评论,我实际上对想法持开放态度。你有什么具体的想法,你认为这可能是解决这个问题的好方法,所有因素都结合在一起?如果您愿意,很高兴提供更多详细信息。不需要详细的工作流程,高级方法就足够了。
  • 使用调度功能设置 Firebase 以获取和存储数据。在 UI 中访问 firebase 数据并做你想做的事
  • 我确实考虑过 Google Cloud Platform,而 Cloud Functions 似乎是答案。您确定它允许向 API 端点发出请求并在推送到数据库之前对其进行修改吗?据我目前所了解的,它只允许应用程序和数据库之间的通信/存储。如果我错了,请纠正我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多