gpt4 book ai didi

ruby-on-rails - 在 Rails 应用程序中记录搜索结果

转载 作者:行者123 更新时间:2023-12-04 03:50:12 24 4
gpt4 key购买 nike

我们对记录和计算某个项目在搜索或列表页面中出现的次数很感兴趣。每天有 5 万独立访客,我们预计我们每天可以产生 3-4 百万的“印象”,这不是一个非常高的数量,但我们希望能够很好地构建。

我们不需要实时读取这些数据,但希望能够生成每日总计和分析趋势等。类似于业务分析工具。

我们计划在页面呈现后使用 Ajax post 执行此操作 - 这将允许我们计算结果,即使这些结果已缓存。我们可以在每个页面的单个帖子中执行此操作,以发送以逗号分隔的 id 列表及其在页面上的位置。

我希望有某种关于此的设计模式/精华/博客文章可以帮助我避免可能出现的常见初学者错误。我也没有太多记录或阅读日志的经验。

我目前的策略 - 做一些事情来将事件写入日志文件,并在后台作业在一天结束时汇总结果并将结果放回 mysql。

最佳答案

好的,我为您提供三种方法:

1) 队列

在您的 AJAX 处理程序中,尽可能编写最简单的方法(使用 Rack 中间件或 Rails Metal)将查询参数推送到队列。然后,轮询队列并收集消息。

来自机架中间件的队列推送速度快得令人眼花缭乱。我们在流量非常大的站点上使用它来记录类似数据。

下面是一个机架中间件示例(从我们的应用程序中提取,可以在 <2 毫秒左右的时间内处理请求:

class TrackingMiddleware
CACHE_BUSTER = {"Cache-Control" => "no-cache, no-store, max-age=0, must-revalidate", "Pragma" => "no-cache", "Expires" => "Fri, 29 Aug 1997 02:14:00 EST"}

IMAGE_RESPONSE_HEADERS = CACHE_BUSTER.merge("Content-Type" => "image/gif").freeze
IMAGE_RESPONSE_BODY = [File.open(Rails.root + "public/images/tracker.gif").read].freeze

def initialize(app)
@app = app
end

def call(env)
if env["PATH_INFO"] =~ %r{^/track.gif}
request = Rack::Request.new(env)
YOUR_QUEUE.push([Time.now, request.GET.symbolize_keys])
[200, IMAGE_RESPONSE_BODY, IMAGE_RESPONSE_HEADERS]
else
@app.call(env)
end
end
end

对于我推荐的队列 starling ,除了美好的时光,我什么都没有。

在解析端,我会使用 super-poller toolkit ,但我会说,我写了它。

2) 日志

将所有参数作为查询参数传递到静态文件 (/1x1.gif?foo=1&bar=2&baz=3)。这不会撞到 rails 堆栈,而且速度快得令人眼花缭乱。

当您需要数据时,只需解析日志文件即可!

这是最好的规模化家庭酿造方法。

3) 谷歌分析

Google 会为您处理负载,为什么还要处理?您会惊讶于 Google 分析的出色表现,在您自制任何东西之前,请检查一下!

这将无限扩展,因为谷歌购买服务器的速度比你快。


我可以为此提示很久,但我现在必须走了。希望这对您有所帮助!

关于ruby-on-rails - 在 Rails 应用程序中记录搜索结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1596020/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com