设计一个廉价的日常大数据文件下载和数据库馈送作业



我目前正在从我的web应用程序中使用Heroku,并且我目前面临以下设计挑战:

每天我都要下载一次大型产品数据文件(如果是GZipped,则下载10到20个文件,最大可达10MB,否则最多可达50MB),并将其输入数据库,然后我会使用用户关键字查询我的应用程序的产品搜索功能。

注意:产品数据库可以在每次运行作业时擦除/清理,数据不需要保留。我甚至认为它可能应该被丢弃,以避免巨大的存储成本。。。

因此,我需要关于如何设计一个能够做到这一点的系统的建议,使用Heroku插件,并且仍然"负担得起"。我很感激你的建议:

  • 一种运行下载/数据库馈送作业的方法(运行时间相对较长的任务)

  • 数据库引擎本身,这将允许执行快速关键字查询web应用程序是否"快速">

您可以使用以下组件构建此系统:

  • Heroku Postgres插件(Postgres数据库)
  • Bonsai ElasticSearch插件(ElasticSearch搜索引擎)
  • Heroku Scheduler Addon(计划作业执行)
  • Ruby on Rails web应用程序
  • Tire ElasticSearch客户端库

您需要在Postgres数据库中添加表,以存储产品信息,这是权威的记录系统。您需要使用Tiregem将Rails ActiveRecord模型连接到ElasticSearch索引。您的web应用程序可以使用ActiveRecord模型和Tire-gem集成在您的ElasticSearch搜索引擎上运行产品搜索,并从Postgres数据库中提取所有详细信息。

您可以使用Rake纠正批处理作业,用产品目录的最新副本更新您的应用程序:

  1. 本地下载产品目录源文件
  2. 为产品架构中的每个表创建新的表副本
  3. 用新产品目录填充临时表
  4. 删除现有产品表,用最新产品的新表替换
  5. 重建新产品目录的ElasticSearch索引

此产品更新rake任务可以安排每天在非高峰时间运行(例如本地时区的凌晨3点)。

最新更新