|
|
1
1
根据不需要列出项目所需的操作,您可能可以在控制器中执行该操作并为自己节省一次往返行程。你可以用一个后滤器来做,以使添加不受干扰。 仅当列出要记录的项目的所有操作都需要参数时,此操作才有效。这是因为页面缓存忽略带有参数的GET请求。 假设您只想在搜索操作中记录搜索数据。
否则,您就可以使用Ajax和一个onload远程函数。 至于处理,您可以使用cron作业运行的rake任务来收集统计信息,并可能更新项目以获得流行度评级。 无论哪种方式,您都希望阅读 Ruby Logging class .学习cron作业和rake任务也不会有什么伤害。 |
|
|
2
3
好的,我有三种方法: 1)队列 在Ajax处理程序中,编写最简单的方法(使用机架中间件或Rails金属)将查询参数推送到队列中。然后,轮询队列并收集消息。 来自机架中间件的队列推送速度惊人。我们在一个流量非常大的站点上使用它来记录类似的数据。 下面是一个机架中间件示例(从我们的应用程序中提取,可以在大约2毫秒内处理请求:
我建议排队 starling 我只享受过美好的时光。 在解析结束时,我将使用 super-poller toolkit 但是我会说,我写的。 2)日志 将所有参数作为查询参数传递给静态文件(/1x1.gif?foo=1&bar=2&baz=3)。 这不会撞到轨道堆栈,而且速度会非常快。 当您需要数据时,只需解析日志文件! 这是最好的家庭自制方法。 3)谷歌分析 当谷歌为你做这件事的时候,为什么还要处理这件事呢?你会惊讶于谷歌分析有多好,在你自制任何东西之前,看看它吧! 这将无限扩大,因为谷歌购买服务器的速度比你快。 我可以大喊大叫很久,但我现在必须走了。希望这有帮助! |
|
|
3
1
这就是我最终所做的——这已经足够我们现在使用了,并且通过一些简单的基准测试,我对它感觉良好。在我们向客户展示结果之前,我们将观察它在生产中的表现。 组成部分:
这是从站点布局中的Ajax调用调用调用的…
然后我做了一个rake任务,将这些以逗号分隔的ID行导入到数据库中。这将在第二天运行:
需要注意的一点是,logger变量是在controller操作中声明的,而不是在environment.rb中声明的,正如您通常对logger所做的那样。我把它作为基准——10000次写大约需要20秒。平均每次写入约2毫秒。使用envirnment.rb中的文件名,大约需要14秒。我们做了这个权衡,这样我们就可以动态地确定文件名——一种在午夜切换文件的简单方法。 我们现在主要关心的是——我们不知道每天要计算多少不同的项目——也就是说,我们不知道尾巴有多长。这将决定每天向数据库添加多少行。我们预计,我们需要限制每日报告的保存时间,并在这一点上进一步提高结果的作用。 |