【问题标题】:What is the most efficient way to store analytics beacons?存储分析信标的最有效方法是什么?
【发布时间】:2011-05-24 02:18:41
【问题描述】:
类似于谷歌分析如何从跟踪事件的 javascript 发送信标,收集信标数据并在最快的时间内返回给客户端的最有效方法是什么?
例如,如果我有一个服务器到服务器的信标调用,我想在客户端服务器上尽可能快地进行该调用。
PHP 到一个平面文件?
PHP到本地队列?
记录到队列并始终与远程队列保持连接的Java服务器?
自定义 C++ 服务器?
这将是每秒 1000 个请求的数量级。
【问题讨论】:
标签:
java
php
c++
architecture
google-analytics
【解决方案1】:
这有两个方面。
1) 客户端的信标调用应尽快完成。这意味着传入的 HTTP 请求应该响应 200 OK 并尽快退出,因此它可能不应该自己进行实际的数据写入。它应该将其交给后台的另一个进程,或者通过后台 shell 执行,或者通过使用像 Gearman 这样的队列/作业机制。
2) 数据写入本身,如果在远离客户注意力的后台线程中完成,则有更多的时间奢侈。每秒 1000 次写入对于现代硬件调整良好的数据库来说应该没问题,该数据库具有不会在同一时刻被过多选择的行锁定。不过,对于即时数据存储的key-value store,这可能是一个很好的使用场景。然后一个单独的分析/报告过程可以离线查询键值存储以获取所有存储的数据,对其进行处理,并最终将其复制到数据库中。