我有一些数据值需要存储在我的rails应用程序中,并想知道是否有任何替代方法来创建数据库表来执行这个简单的任务。
后台:我正在为rails我的ruby编写一些分析和仪表板工具,我希望通过缓存永不改变的结果来加速仪表板。现在我拉了所有用户最近30天,并重新安排它们,这样我就可以看到每天新用户的数量。它工作得很好但需要相当长的时间,实际上我只需要计算最近一天并将其余的数组存储在其他地方。
存储此数组的最佳方法是什么?
创建数据库表似乎有点矫枉过正,我不确定全局变量是否正确答案。是否有最佳实践来保存这样的数据?
如果有人做了这样的事情,请让我知道你做了什么以及结果如何。
答案 0 :(得分:11)
Ruby有一个名为PStore的内置基于哈希的键值存储。这提供了基于文件的简单事务持久性。
答案 1 :(得分:1)
使用像sqlite这样的轻量级数据库应该不会觉得有点过分。或者,您可以使用像东京橱柜这样的密钥存储解决方案,甚至可以手动将数组存储在一个平面文件中,但我真的看不到使用sqlite有任何过度杀伤。
答案 2 :(得分:1)
如果你已经拥有一个数据库,那么创建一个单独的表来跟踪这种事情真的不是什么大问题。在进行报告时,创建与您所描述的完全相同的派生汇总表通常对您有利。您可以使用简单的SQL语句根据需要更新这些内容,并且不用担心您的临时存储会以某种方式消失。
话虽这么说,你试图生成的报告类型实际上是可以实时完成的,除了极其庞大的数据集。关键是要有索引来描述您正在尝试的确切分组操作。例如,如果您按日历日期分组,则可以创建“日期”字段并根据需要将其同步到“created_at”时间。此日期字段的索引将非常快速地执行GROUP BY created_date:
SELECT created_date AS on_date, COUNT(id) AS new_users FROM users GROUP BY created_date