0

我对 Ruby on Rails 很陌生,并且一直在使用 Michael Hartl 的 Ruby on Rails 教程来学习它。

我现在正在开发自己的项目,该项目允许用户登录网站,提供个人生物特征信息并上传他们选择的 csv 文件(锻炼数据)以使用锻炼信息填充数据库。

我向其他更有经验的朋友寻求帮助,他们的建议是创建一个临时表并使用该临时表填充其他表(我目前有八个不同的表用于锻炼测量)。

我对在线暂存表的使用进行了大量研究,但找不到关于如何有效使用暂存表将 csv 文件导入多个模型的可靠答案。

根据我对暂存表的理解,每次我(用户)完成将 csv 文件上传并导入数据库时​​,我都应该重置暂存表,但在网上找不到任何关于这是否正确的做法。

这是使用临时表的正确方法吗?我能想到的唯一其他选择是在每次用户上传文件时创建和删除临时表,但这似乎成本太高而无法正确。

谢谢!

4

1 回答 1

0

“临时表”只是一个中间表,其字段类型与预期的 CSV 格式相同。当用户上传 CSV 文件时,您可以逐行读取 CSV并填充此表。拥有登台服务器的优势在于,在填充实际域表之前对数据进行的任何昂贵处理都可以在后台完成。下面描述了两种方法:

  1. 将数据集保存到临时表后触发后台处理。

    数据上传到登台服务器后,您可以触发后台作业来处理数据并在后端异步填充模型。我会sidekiq为此目的推荐图书馆。Ruby 工具箱中提供了许多其他替代方案

  2. 定时任务

    使用这种方法,您有一个函数可以定期检查临时表,然后将迄今为止填充的数据填充到相关目标表中。一个合适的 ruby​​ 库是whenevergem。

您不需要一次性处理 staging 表,当然不建议在操作后删除 staging 表。如果有人在删除临时表时尝试将数据上传到临时表,会发生什么情况。客户端服务器系统的设计方式应使其可以同时供多个用户使用。一个好的策略是一次懒惰地处理暂存表中的数据 - 并且可以在处理后删除这些行。

此外,对于更简单的用例(单个保存 - 处理 - 丢弃序列),您可以简单地将 CSV 保存在磁盘上并通过上述策略在后台处理它,从而消除对临时表的需要。如果您计划填充多个数据存储(可能跨越地理边界)和/或通过多个同时处理数据的工作人员执行处理,则暂存表特别有用。

于 2014-08-05T18:43:17.107 回答