寻找类似于缓存的东西

时间:2012-07-27 22:11:03

标签: mysql ruby-on-rails

我有一个查询需要大约一分钟才能完成,因为它处理大量数据,但我也希望将结果放在网站上。显而易见的结论是缓存它(对吗?)但随着时间的推移数据会发生变化,我需要一种方法来自动重新制作缓存页面,可能每24小时一次。

有人能指出我该怎么做吗?

编辑:我想制作一个“十大”类型的东西,因此它不会显示问题页面,而是显示查询运行所需的时间。

3 个答案:

答案 0 :(得分:0)

稍微超越查询。如果您的目标是允许用户查看大量数据,那么就可以按照他们的意愿获取数据,而不是使用会破坏UI的怪物查询。结果不仅看起来更好,而且更快,更快。

我对这种模式的个人伎俩是DataTables。它是一个允许您使用Ajaxed查询(内置)的网格,以便在用户想要查看的时间将查询中的数据作为“块”。它可以通过对代码的一些简单添加进行排序,分页,过滤,限制甚至搜索。它甚至有一个插件可以将结果导出到excel,pdf等。

Datatables拥有的其他人所没有的最大的东西是一个名为“流水线”的概念,它允许你获得一个显示的金额(比如20)加上额外的前锋和/或后退金额。这使您仍然可以进行可管理的查询,但每次用户点击“下一页”时都不必访问数据库

我有一个处理数百万条记录的应用程序。对所有数据的一个查询是不可能的......它只需要太长时间。然而,一次抓25个闪电般快速,不需要任何技巧。一旦数据表启动了,我只是对我的查询进行了性能调整,在需要的地方做了一些索引,并且瞧瞧.....很棒,响应迅速的应用程序。

这是一个简单的例子:

<table id="example"></table>

$('#example').dataTable( {
    "bProcessing": true,
    "bServerSide": true,
    "sAjaxSource": "/processing/file.php"
} );

答案 1 :(得分:0)

使用允许在一段时间后自动过期的缓存存储。

Memcached做到了,Redis我猜!

答案 2 :(得分:0)

使用24小时TTL(到期)缓存查询结果可能会正常工作。使用片段缓存,假设这是页面的一部分。

您可以按照说明设置memcached或redis来存储缓存。您可以做的另一件事是设置一个每24小时(或根据需要)加热缓存的作业,以便不幸的用户不必为您生成缓存。

如果根据状态或数据库中的更改知道缓存何时过期,则可以根据该缓存使缓存失效。很多时候,我使用创建的at或更新的字段作为缓存键的一部分来协助这个过程。

羡慕实验室和新遗物在缩放导轨截屏中有一些好东西。 http://railslab.newrelic.com/scaling-rails,有点过时,但原则仍然相同。

另外,请检查缓存导轨指南。 http://guides.rubyonrails.org/caching_with_rails.html

最后,确保索引设置正确,请在此处使用thinkbots:http://robots.thoughtbot.com/post/163627511/a-grand-piano-for-your-violin

键入我的手机,以便为打字错误道歉。