我在我正在管理的网站的LAMP堆栈上。需要汇总使用情况统计信息(与我们的桌面产品相关的各种事物)。
我最初用 PHP 解决了这个问题(因为我已经有一堆类来处理数据)。在我使用 5.3 的开发盒上一切正常。
长话短说,5.1 的内存管理似乎更糟了,我不得不做很多傻事才能让长期汇总脚本在固定的内存空间中运行。我们的服务器人员此时不愿意升级 PHP。我已经将我的开发服务器移回 5.1,所以我不会再遇到这个问题。
为了挖掘 MySQL 数据库以汇总不同时期和分辨率的统计信息,可能会运行一个在未来一直执行此操作的进程(而不是按 cron 计划),您推荐哪种语言选择?我正在研究 Python(我或多或少地了解它)、Java(不太了解),或者使用 PHP(非常了解)。
编辑:评论者的设计说明
分辨率:汇总脚本目前的工作方式是我有一些用于定义分辨率和存储桶的类。我有年、月、周、日——给定一个“桶号”,每个类都给出一个定义该桶的时间范围的开始和结束时间戳——这是基于任意纪元日期。系统维护“完整”记录,即,它将完成自上次运行以来的每个分辨率的汇总数据集,目前。
SQL Strat:基本统计信息位于许多不同的模式和表中。大多数情况下,我对每个汇总的统计信息进行单独查询,然后填写一条记录以进行插入。您建议嵌套子查询,例如:
插入rolled_up_stats (someval, someval, someval, ...) VALUES (SELECT SUM(somestat) from someschema, SELECT AVG(somestat2) from someschema2)
那些子查询会生成临时表,对吧?我的经验是,这在过去就像糖蜜一样缓慢。这是更好的方法吗?
编辑 2:为问题添加一些内联响应
语言是 5.1 php 的瓶颈——我基本上被告知我选择了错误的语言(尽管脚本在 5.3 上运行良好)。你提到了python,我正在检查这个任务。明确地说,我正在做的是为桌面产品的使用情况统计提供一个管理工具(日志实际上是由 EJB 服务器写入 mysql 表的)。我做 apache 日志文件分析,以及更多的 web 端自定义 web 报告,但是这个项目是独立的。到目前为止,我采用的方法是聚合表。我不确定这些消息队列产品能为我做什么,我来看看。
更进一步——这些数据被用于绘制服务和客户级别的活动图表,以便管理层了解产品的使用情况。您可以选择一个时间段(4 月 1 日至 4 月 10 日),并根据所选时间段以不同的粒度(小时、天、月等)检索某个功能的总使用分钟数图表。它本质上是对使用情况的事后分析。然而,需求似乎倾向于实时(查看最后一小时的使用情况)