Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 长期运行的统计过程-关于语言选择的思考?_Java_Php_Python_Statistics_Long Running Processes - Fatal编程技术网

Java 长期运行的统计过程-关于语言选择的思考?

Java 长期运行的统计过程-关于语言选择的思考?,java,php,python,statistics,long-running-processes,Java,Php,Python,Statistics,Long Running Processes,我正在管理一个网站。有必要汇总与我们的桌面产品相关的各种使用统计数据 我最初用PHP解决的问题是,我已经有一堆类来处理数据了。所有这些都在使用5.3的dev box上运行良好 长话短说,5.1内存管理似乎糟糕得多,为了让长期汇总脚本在固定的内存空间中运行,我不得不做很多傻事。我们的服务器人员现在不愿意升级PHP。我已经将我的开发服务器移回了5.1,所以我不再遇到这个问题 为了挖掘MySQL数据库以汇总不同时段和分辨率的统计数据,将来可能会运行一个始终这样做的进程,而不是按cron时间表,您建议选

我正在管理一个网站。有必要汇总与我们的桌面产品相关的各种使用统计数据

我最初用PHP解决的问题是,我已经有一堆类来处理数据了。所有这些都在使用5.3的dev box上运行良好

长话短说,5.1内存管理似乎糟糕得多,为了让长期汇总脚本在固定的内存空间中运行,我不得不做很多傻事。我们的服务器人员现在不愿意升级PHP。我已经将我的开发服务器移回了5.1,所以我不再遇到这个问题

为了挖掘MySQL数据库以汇总不同时段和分辨率的统计数据,将来可能会运行一个始终这样做的进程,而不是按cron时间表,您建议选择什么语言?我在看Python,我或多或少了解它,Java不太了解它,或者用PHP坚持到底,我非常了解它

编辑:评论人的设计澄清

分辨率:当前汇总脚本的工作方式是,我有一些用于定义分辨率和存储桶的类。我有年、月、周、日——给定一个存储桶编号,每个类给出一个开始和结束时间戳,定义该存储桶的时间范围——这是基于任意的历元日期。系统维护完整的记录,即自上次运行以来,系统将完成每个分辨率的汇总数据集(当前)

SQL Strat:基本统计数据位于许多不同的模式和表中。大多数情况下,我对每个汇总的统计数据进行单独查询,然后填写一条记录进行插入。您的建议是嵌套子查询,例如:

插入到汇总的统计数据someval,someval,someval。。。值从someschema中选择SUMsomestat,从someschema2中选择AVGsomestat2

这些子查询将生成临时表,对吗?我的经验是,这在过去是缓慢的。这是更好的方法吗

编辑2:添加一些问题的内联回答


在5.1 php中,语言是一个瓶颈——我被告知我选择了错误的语言,尽管脚本在5.3上运行良好。您提到了python,我正在为这个任务检查它。需要明确的是,我所做的是提供一个管理工具,用于统计桌面产品的使用情况。实际上,日志是由EJB服务器写入mysql表的。我在web端进行apache日志文件分析,以及更多自定义web报告,但此项目是独立的。到目前为止,我采用的方法是聚合表。我不确定这些消息队列产品能为我做些什么,我来看看


更进一步—数据用于绘制服务和客户级别随时间变化的活动图表,以便管理层了解产品的使用方式。您可以选择一个时间段4月1日至4月10日,并根据所选的时间段,检索某个功能在不同粒度小时、天、月等下的总使用分钟数图表。它本质上是对用法的事后分析。这种需求似乎趋向于实时,但是看看最后一个小时的使用情况

如果您主要运行SQL命令,为什么不在命令行上使用MySQL等呢?您可以创建一个简单的表,列出聚合数据,然后运行类似mysql-u[user]-p[pass] 或者,如果最简单的话,将工作分成更小的块,并将它们作为PHP文件顺序运行


如果您真的需要它是一个连续的长时间运行的过程,那么像python或java这样的编程语言会更好,因为您可以创建一个循环并使其无限期地运行。PHP不适合做这种事情。将任何PHP类转换为Java都是非常容易的。

我曾经在一个项目中做过类似的事情,因此我对性能有实际的经验。您将很难击败INSERT的性能。。。选择不插入…值选择。。。。请看

这样做的好处是,如果您这样做,特别是如果您将汇总代码保留在MySQL过程中,那么您从外部所需要的只是一个cron作业,让DB在正确的时间执行正确的汇总,就像使用“MySQL CALL RollupProcedure”的shell脚本一样简单

通过这种方式,您可以保证自己没有内存分配错误,并且在MySQL数据库位于单独的机器上时具有良好的性能—不跨机器边界移动数据


编辑:每小时分辨率很好-只需运行每小时一次的cron作业…

解决此问题有很多不同的方法,这里提到了其中一些方法,但不清楚如何处理数据汇总后

如果你想利用这些数据在你的网站上提供类似digg的“X diggs”按钮, 或者摘要图或类似的东西,需要在某种持续的基础上提供,您实际上可以利用memcache来实现这一点,并让您的代码通过在适当的时间递增来保持特定统计数据的缓存键最新

您还可以在数据库中保留聚合表,这对于更复杂的报告来说非常有效。在这种情况下,根据您拥有的数据量和您的需求,您可能不需要一个小时表,然后只需要基于该基表创建视图来表示天、周等

如果您有大量的数据,并且需要聚合表,那么您应该考虑将统计数据收集和数据库查询本身卸载到诸如RabbitMQ或ActiveMQ之类的队列中。在队列的另一端放置一个使用者守护进程,它一直处于运行状态,根据需要更新数据库中的内容,可能还更新缓存

<> P>你可以考虑的是Web服务器的日志。我见过这样的例子,在对配置中的日志格式规则做了一些小的调整之后,我就能够从web服务器日志本身获得所需的大部分统计信息。您可以每隔一天滚动一次日志,然后开始脱机处理,并将结果记录在报告数据库中


我已经用我为处理Apache组合格式日志而发布的Python完成了所有这些工作,尽管我不认为语言是这里的限制因素或瓶颈。在某些情况下,Ruby、Perl、Java、Scala甚至awk都可以工作

一,。你为什么希望它长期运行?为什么周期性运行cron作业是不够的?2.我假设汇总脚本运行一个类似SQL的INSERT INTO RolledUpTable SELECT SUMTOYFROM RawTable GROUPBY Element_id或诸如此类的命令,但您似乎暗示汇总脚本将信息读入流程,对其进行处理,然后将其推入数据库。这听起来像是一个奇怪的设计选择。请澄清您的问题:添加了澄清。。。不过,有点产生了一个单独的问题-而且,它不一定需要长时间运行。我认为这可能是一种不错的方法,因为在使用该系统之后,人们已经对每小时分辨率的近实时数据感兴趣了。这可能是一个不合理的要求,但假设不是这样,cron作业似乎无法解决问题。请参阅设计说明-我添加了有关计算分辨率的说明,以保持一些理智的外观,即哪些记录与所有计算的时间段相匹配。在原始sql查询中,这样做是可行的。。。或者,有没有更好的方法来管理解决方案?对不起,我在这里有点傻,我不是SQL忍者。我可以看到存储过程的好处。但是,是否有跨多个表的数据的解决方案?或者你会推荐一个插入。。。为我们感兴趣的每个表选择语句?还有,时间分辨率-您是否在项目中使用了滚动时间段?比如,过去24小时,还是最后一周?我试着用固定的时间,比如周一到周一是一周。用户认为,选择上周一到上周三,并给出一个日分辨率,应该会给出确切的答案。对于存储过程来说似乎很难?在5.1 php的情况下,语言是一个瓶颈-我基本上被告知我选择了错误的语言,尽管脚本在5.3上运行良好。您提到了python,我正在为这个任务检查它。需要明确的是,我所做的是提供一个管理工具,用于统计桌面产品的使用情况。实际上,日志是由EJB服务器写入mysql表的。我在web端进行apache日志文件分析,以及更多自定义web报告,但此项目是独立的。到目前为止,我采用的方法是聚合表。我不确定这些MQ产品是做什么的,我会看一看。更进一步一点,这些数据被用来在服务和客户级别绘制随时间变化的活动图表,以便管理层了解产品的使用方式。您可以选择一个时间段4月1日至4月10日,并根据所选的时间段,检索某个功能在不同粒度小时、天、月等下的总使用分钟数图表。它本质上是对用法的事后分析。这种需求似乎趋向于实时,但看看最后一个小时的使用情况