首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高性能印象跟踪

高性能印象跟踪
EN

Stack Overflow用户
提问于 2012-07-13 22:03:46
回答 2查看 1.4K关注 0票数 4

基本上,我想要跟踪的一些指标中的一部分是某些对象在我们的营销平台上获得的印象量。如果您想象我们显示了大量的对象,那么我们希望每次服务对象时都要跟踪。

每个对象都通过一个网关/接口返回给客户端。因此,如果您想象一个请求是为了一个具有某些搜索条件的页面而出现的,那么搜索请求将被代理到我们的Solr索引中。

然后我们得到10个结果。

这10项成果中的每一项都应视为一种印象。

我很难找到一个令人难以置信的快速和准确的实现。

对你该怎么做有什么建议吗?你可以投入任意数量的技术。我们目前使用,Gearman,PHP,Ruby,Solr,Redis,Mysql,APC和Memcache。

最终,所有的印象最终都应该保留到mysql身上,我可以每小时做一次。但是,我不知道如何在不影响实际搜索请求的加载时间的情况下,快速地存储内存中的印象。

想法(我刚添加了备选案文4和5)

  1. 一旦结果返回给客户端,客户机就会在我们的平台上请求一个base64编码的URI,其中包含所有服务对象的ID。然后将这个对象传递给gearman,然后gearman将计数保存到redis。每小时一次,redis被刷新,对于mysql中的每个对象,计数是递增的。
  2. 在从Solr返回结果之后,循环遍历,并直接保存到Redis。(还没有标出这个指标的速度)。每小时重复一次对mysql的刷新。
  3. 一旦从Solr返回项目,将单个作业中的所有ID发送给gearman,然后gearman将提交给Redis。
  4. new idea,因为返回的项目最多将在20个左右,我可以设置一个头和ID返回的base64标头。这些ID(在标题中)可以被nginx删除,并且使用自定义的LUA模块,我可以从nginx直接将ID写到Redis。不过这可能有点过火了。不过,这样做的好处是,我可以告诉nginx在将响应对象写入redis时立即返回它。
  5. new idea使用fastcgi_finish_request()将请求刷新回nginx,然后将结果插入到Redis中。
  6. 还有其他建议吗?

编辑以回答问题:

这些数据的可靠性并不重要。只要这是个最好的猜测。我不想看到有30%的人印象不佳。但我会允许10%的宽容-/+精英。

EN

回答 2

Stack Overflow用户

发布于 2012-07-14 15:43:22

我认为你最好的两种选择是:

  1. 在提取dis时,我使用增量命令redis来增加计数器。使用Id作为键,并在Redis中增加它。Redis可以轻松地处理每秒数十万次的增量,所以这样做应该足够快,而不会产生任何明显的客户端影响。如果PHP语言绑定支持每个请求,甚至可以对其进行管道处理。我想是的。
  2. 使用redis作为普通缓存。在此选项中,您只需使用Redis列表,并对包含由eg分隔的ID的字符串进行重新推送。逗号。你可以用一天中的时间作为关键。然后,您可以有一个单独的进程,通过抓住前一个小时,并按摩它,无论您想要进入MySQL。我希望你把一个过期的密钥,你可以让他们清理一段时间后,或只是删除的密钥与后处理过程。

如果您有很高的redis流量,或者只想卸载它并获得它的备份,您也可以使用一个读取从进行导出到MySQL。如果这样做,可以将主redis实例设置为不刷新到磁盘,从而提高写入性能。

有关更广泛地使用redis的特性用于这类跟踪的其他选项,请参见这个答案,您还可以避免MySQL部分,并从redis中提取数据,从而使整个系统更简单。

票数 2
EN

Stack Overflow用户

发布于 2012-07-14 02:08:30

我会做一些类似于#2的事情,并将数据传递给最快的队列,以更新Redis计数器。我对Gearman不太熟悉,但我敢打赌这件事很慢。如果您的Redis客户端支持异步写入,我会使用它,或者将它放在一个单独线程上的队列中。您不想放慢响应速度,等待更新计数器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11478966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档