我有几个脚本生成&收集大量数据,我将需要为我的数据库播种,并在将来为其添加大量数据。将大量关系数据作为种子数据导入轨道数据库并在生产过程中间歇性导入的最佳方法是什么?
我还没有确定我的脚本的输出格式,但数据的结构很大程度上反映了我的rails模型,并且包含了我希望导入保留的has_many关联。
我google了一下,看到了ar-extensions和seed_fu以及使用灯具的想法。
使用ar-extensions,所有示例似乎都是明确的csv导入(可能来自表转储,这似乎是它的主要用例),没有提及处理关联或避免重复更新。在我的情况下,我的脚本中没有id,外键或连接表,所以这似乎对我不起作用,除非我已经准备好自己处理这种复杂性。
使用seed_fu,看起来它可以处理数据创建的关系方面,但仍然需要我指定id(你怎么知道哪些在生产中可用?)并将代码与数据混合。
Fixtures也有同样的id问题,虽然它现在需要命名对象(我可能最终只使用名字的数字),我不知道如何避免意外重复记录。
或者我最好先将数据放入本地sqlite数据库然后再使用直接表转储技术?
答案 0 :(得分:2)
我以前用CSV文件做过这个。我有一个cron作业,它收集数据并将其放入可访问的CSV文件中。然后我有一个rake任务(也在cron中,但在另一个盒子上)查找CSV,如果有,则调用模型方法从CSV行创建对象。
模型的csv_create_or_update
方法采用CSV行。此技术可以回避id问题,还允许对进入的数据运行(或不运行)验证。
答案 1 :(得分:1)
最近我收到了一个需要一些导入数据的rails应用程序,它都是在rake任务中处理的。所有数据都以csv格式的文件形式出现,并根据需要按类/模型等进行处理。这对于我刚接触系统来说相对较好,因为很容易看出数据的去向以及数据的应用方式。在导入数据时,您可以检查ID冲突/冲突并相应地处理它们。