首页 > 解决方案 > AWS Lambda nodejs长时间运行的过程

问题描述

我正在做一个项目(无服务器、Lambda、Nodejs、MongoDB、SQS),我需要制作价格图表,有一个 API/api/products?country=countryCode可以返回有关产品和价格的数据(请参阅下面的响应示例),价格可以是每个国家/地区都不同,例如,荷兰的价格可以是 12.99 美元,澳大利亚的价格可以是 13.99 欧元(所有其他属性不变)

我在 MongoDb 中有一个国家的集合,集合中大约有 225 个以上的国家。我有一个每天触发一次 lambda 函数的 cron 作业。对于每个国家/地区,我需要调用返回需要处理的产品数据(请参阅下面的示例响应)的 API。获取所有数据后,我同时插入产品和价格(产品是唯一的,价格计数 = 产品计数 * 国家计数 * 天数)。为了避免国家之间的价格差异,您需要一次插入数据。例如昨天Bladur之剑的价格是17.99美元,今天是18.99美元,我们已经更新了NL的价格,但AU正在处理中。

请帮我解决以下问题之一:

PS我认为我应该使用生产者/消费者来避免丢失国家数据,所以如果有人有第二个问题的解决方案,我会很高兴

MongoDB Product model
{
  id: String,
  title: String,
  ...
}
MongoDB Price model
{
  country: String,
  productId: String,
  price: Number
}

API 响应示例:

GET /api/products?country=NL
[
  {
    "id": "37071265-7f98-4e32-ae45-c23f83e7c7a2",
    "title": "Dusty Book",
    "country": "NL",
    "price": 1299,
    ...
  },
  {
    "id": "49701bcf-c076-4064-b331-0952aee21deb",
    "title": "Sword of Bladur",
    "country": "NL",
    "price": 1799,
    ...
  },
  ...
]
-----
GET /api/products?country=AU
[
  {
    "id": "37071265-7f98-4e32-ae45-c23f83e7c7a2",
    "title": "Dusty Book",
    "country": "AU",
    "price": 1549,
    ...
  },
  {
    "id": "49701bcf-c076-4064-b331-0952aee21deb",
    "title": "Sword of Bladur",
    "country": "AU",
    "price": 1799,
    ...
  },
  ...
]

标签: node.jsmongodbamazon-web-servicesserverlesstimeserieschart

解决方案


您是否考虑过使用Step Functions?您可以使用一个函数来获取国家/地区列表。其结果可以传递给一个map状态,该状态将为每个国家调用一个 lambda,获取所需的数据。一旦所有这些功能都完成了,它就可以调用另一个 lambda 来执行数据库中的最终更新。


推荐阅读