我有一个多租户Rails应用程序,其中客户的数据与全局范围分开。现在我想让客户选择在一次下载中下载所有自己的数据。实现这一目标的最佳方法是什么?最好将所有内容输出到CSV文件中吗?
答案 0 :(得分:1)
将它放入1个csv文件可能会让你头疼。
如果您使用CSV,我同意Alex将其作为后台工作。
我将引导您完成两种方法(CSV和Feed),然后您可以选择适合您的方法。
通常,您要导出许多表。如果你把它全部放在一个CSV文件中,那么文件就会有些混乱。 相反,我会为每个表为每个客户设置一个夜间流程。 这些为每个表生成每个客户的CSV并进行分级。
最后,对于每个客户,我会将这些文件整合到一个压缩文件中,并准备交付(Web下载,FTP,电子邮件等)
缺点是缺乏实时性。
如果您需要实时(或者数据集很大),那么您必须考虑这将对您的生产数据库产生的影响。随着时间的推移,它可能会导致严重的性能下降。
获得此选项的一个选择是拥有只读复制数据库,您可以根据需要部署/使用。
不是每晚或每次请求创建这些不断增长的文件,而是可以在数据发生变化时处理数据。
例如,如果您的客户确实需要获取此数据,则可能是为了放入他们的数据库。我将不再下载CSV或excel并提供API。
当数据更改进入您的系统时,您会通知感兴趣的组件更改。这样他们就不必去DB来获取更改。 API可以有一个拾取位置,只要存在就会提供已更改的数据。
我们已经在大规模,高容量环境中使用这种机制并取得了巨大的成功。
我建议如果您要使用CSV路线,请查看长期阅读影响。您现在可能不需要进行更改,但您应该在计划中准备好项目和解决方案。
最后,我会将任务分解为很长时间运行的许多小任务。
答案 1 :(得分:0)
CSV是一种常用的格式。如何实现这一点有一个很好的轨道:http://railscasts.com/episodes/362-exporting-csv-and-excel
根据我的经验,我可以建议您将其作为后台计划流程实施,因为导出资源可能很昂贵并且需要很长时间才能完成。任务完成后,您可以通过电子邮件向用户发送下载链接,例如。