【问题标题】:What is an efficient way to save or cache data from an API?从 API 保存或缓存数据的有效方法是什么?
【发布时间】:2019-03-16 23:32:09
【问题描述】:

我正在构建一个 Web 应用程序(带有 SQL Server 数据库的 ColdFusion 网站),该应用程序需要显示驻留在外部源上并可通过 API 获得的数据。一些数据是“静态的”,一旦它存在,它就不会改变。但是,每天都会添加新数据。例如,假设数据代表“出货量”。昨天的货物已发货,其中包含的数据将不会改变。然而,今天将创造更多的出货量。我不想在每次需要历史数据时调用 API(比如说,对于按需报告),我想保存或缓存 API 响应中的相关数据,以便我可以更快地请求它。

我最初的想法是编写一个单独的 ColdFusion 脚本,每天向 API 发出请求,检索前几天的发货,解析响应中的数据并将其保存到 SQL Server 数据库。

有没有更有效的方法来做到这一点,也许直接从 SQL Server 数据库调用 API 来导入数据?

【问题讨论】:

  • 这个 API 是否被频繁调用以至于需要缓存?是否有很多处理导致此 API 变慢?数据请求是否可以在 SQL 服务器上处理并仅提供给 CF API?也许在 SQL 服务器上有一个包含您需要的数据的报表?然后直接查询那个表。
  • 对于临时缓存以提高性能并减少对 APi 的调用,您可以使用 memcached 或 redis 等。如果您在 AWS 上,我会在 ElasticCache 上使用 Memcached,它非常易于设置。
  • @Shawn,是的,现在他的 API 被频繁调用以支持面向 Web 的报告。 API 本身并不慢,但有时数据量很大,因此解析、处理和过滤数据会占用大量资源并花费大量时间。 SQL Server 数据库中尚不存在相关数据。我正在考虑复制那里的数据以使查询更容易。我正在寻找一种有效的方法来做到这一点。
  • @Redtopia 谢谢你,我将不得不在互联网上找到这个并了解更多信息。
  • 我生成了一个唯一的密钥,然后使用 CacheGet() 和 CachePut() 在定义的时间段内存储 API 响应。 (如果 CacheGet() = NULL,则执行新的 API 请求,并使用 CachePut() 缓存数据以临时存储它。)

标签: sql-server api coldfusion


【解决方案1】:

(评论太长)

我最初的想法是编写一个单独的 ColdFusion 脚本 每天向 API 发出请求,检索前几天的发货, 解析响应中的数据并将其保存到 SQL Server 数据库。

听起来是一种合理的方法。您只需要一个加载数据的计划任务即可。

【讨论】:

    【解决方案2】:

    您可以通过 .net 程序(如 c#)调用服务并使用 clr 程序。然后创建程序集 dll 并将其添加到 sql server。然后您将能够设置一个作业并安排它检索并将其保存到您的表中。

    【讨论】:

    • 如上所述,我可以使用 ColdFusion 完成所有这些工作(创建一个作业来调用 API,解析数据并将其插入 SQL Server)。我很好奇是否有更有效的方法来做到这一点 - 即直接在 SQL Server 中。
    • 听起来这就是答案所描述的 - 如何直接在 sql server 中执行类似的操作。 (没试过,不知道哪个更“高效”)。
    猜你喜欢
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    相关资源
    最近更新 更多