【发布时间】:2015-07-30 08:07:12
【问题描述】:
在我的 Java 项目中,我需要读取大约 160 万行的文件。
每一行代表用户在一天内完成的一项操作。如果我没记错的话,有 83 种不同的可能操作。
我需要按如下方式分析该文件并将找到的统计信息存储在csv 文件中:
一般来说:计算一个动作发生的频率(数字将高达大约 50 万)
但也应该有单独的文件:
每小时发生一次操作的频率如何? (csv 文件中有 24 行)
每个用户多久执行一次操作? (大约 20 个不同的用户 - 每个用户一个文件)
每个用户每小时执行一次操作的频率如何? (每个用户单独的文件,其中 24 行)
最重要的是,有 3 个不同的频道(HTML、手机、电话)可以发生这些事情(也保存在日志文件中),所以我需要为每个频道创建一个文件夹并执行上述操作每一个。
问题:
如何有效地存储/计数?运行时间不是什么大问题(它不应该运行一天,但它需要半小时没问题) 但是我怎么算呢?
我不能只为所有东西创建那么多计数器(数量会很大),而且int[] 在我看来不是很方便,因为我必须记住哪个操作具有哪个索引等。
有没有更好的解决方案?
我曾考虑使用本地数据库和SQL 脚本,但该程序需要在每台 PC 上运行,并且必须可以从命令行执行(不一定在 IDE 中)。我正在使用Intellij 14 进行开发。
【问题讨论】:
-
假设每个动作都有一个唯一的名称(或 ID),您应该将计数器存储在地图中而不是数组中,以避免“记住哪个动作具有哪个索引”的问题。
-
有趣的想法,你会如何实现它?该文件为我提供了操作名称(83 种可能性 - 例如,一种可能是“LOGIN”)、发生时间(HHMMSS)、频道(HTML/MOBILE/PHONE)和用户 ID
-
无论您在哪里运行它,除非您有某种服务器正在运行并连接到您要使用的每个客户端,否则您将无法使用 SQL 或 Java 属性...我不明白你想如何存储一些已经创建的东西?就像以某种方式对每个操作都有一个文件并且它很重要?
-
这可能有助于进一步解释该过程。每天早上,都会有一个来自公司的大日志文件,应该每天对过去一天的日志文件进行分析并存储在 csv 文件中。分析不会发生在我的工作电脑上,这就是为什么我希望它在其他人身上运行。虽然它总是在同一台电脑上,但我真的无法访问它。所以数据库(如果我必须使用一个)应该本地存储在项目文件或其他东西中,这样我就可以将它复制到“分析 PC”并在那里工作。
标签: java sql database csv count