在Rails中存储时间序列的最佳方式

时间:2011-06-04 22:11:30

标签: ruby-on-rails ruby-on-rails-3

我的数据库中有一个存储事件总数的表,如:

event1_count
event2_count
event3_count

我想从这些简单的聚合转换到更多的时间序列,因此用户可以看到这些事件实际发生在哪些日子(例如Stack Overflow如何显示每日信誉增益)。

在我的系统的其他地方,我已经通过创建一个单独的表来为每个每日值创建一个记录 - 然后,为了收集时间序列,您最终得到一个巨大的数据库表,并且需要查询10s或100s记录。它有效,但我不相信这是最好的方式。

存储这些个人事件及其日期的最佳方式是什么,以便我可以为我的任何用户制作每日情节?

3 个答案:

答案 0 :(得分:0)

在构建这样的表时,真正的关键是拥有有效的索引。使用EXAMINE语句或您选择的数据库中的等效语句测试您的查询。

如果要构建汇总表,可以查询,构建表示查询的视图,或者将日常结果定期滚动到新表中。通常,汇总表是最好的方式,因为它们可以快速查询。

答案 1 :(得分:0)

实现此目的的最佳方法是使用Redis。如果您之前没有使用Redis,我建议您开始使用。你会惊讶地发现它有多快:)。我这样做的方式是使用Redis提供的Hash数据结构。只需将每个用户分配给他的Hash(为每个用户创建一个唯一的密钥,如"user:23:counters")。在这个Hash中,你可以将每日时间戳存储为"05/06/2011"作为字段,并在每次事件发生时增加其计数器或者你想用它做什么!

答案 2 :(得分:0)

一个好的开始将是这个线程。它有一个简单的初学者级解决方案。 Time Series Starter。如果你对rails模型没问题:这是一种可行的方式。对于称为"不规则"时间序列。所以这是一个事件在这里和那里,但不是在一个固定的间隔。就像在门打开时发送数据的传感器一样。

另一件事,就是我在这个帖子中寻找的是常规时间序列db:值是间隔的。比如60 /分钟,即每秒1次,例如温度传感器。这一切都归结为数据集与"桶和#34;正如你怀疑的那样:一个时间序列表变长,索引在一个点上吮吸等等。这是一个"桶"接近using postgres arrays这是一个可行的想法。

它没有完成"即插即用"据我研究网络。

相关问题