java - 避免在 Java 中使用大量计数器

标签 java sql database csv count

在我的 Java 项目中,我需要读取一个大约有 160 万行的文件。

每一行代表用户在一天内完成的一项操作。如果我没记错的话,有 83 种不同的可能操作。

我需要按如下方式分析该文件并将找到的统计信息存储在 csv 文件中: 通常:计算一个 Action 发生的频率(数字会高达大约 50 万)

但也应该有单独的文件:

  • 一个 Action 每小时发生的频率是多少? (csv 文件中的 24 行)

  • 每位用户执行一次操作的频率如何? (大约 20 个不同的用户 - 每个用户一个文件)

  • 每个用户每小时执行一次操作的频率是多少? (每个用户单独的文件,其中 24 行)

最重要的是,有 3 个不同的 channel (HTML、手机、电话)可能会发生这些事情(也保存在日志文件中),所以我需要为每个 channel 创建一个文件夹,并为每个 channel 做上面提到的事情每一个。

问题:

我怎样才能有效地存储/计算这个?运行时间不是什么大问题(它不应该运行一天但它需要半小时没问题) 但我该如何计算呢?

我不能只为每件事都创建那么多计数器(数量会很大),而且 int[] 在我看来在这里不是很方便,因为我必须记住哪个 Action 有哪个索引等

有没有更好的解决方案?

我考虑过使用本地数据库和 SQL 脚本,但该程序需要在每台 PC 上运行,并且必须可以从命令行执行(不一定在 IDE 中)。我正在使用 Intellij 14 进行开发。

最佳答案

嵌入式数据库,如H2 .

任何包装都意味着您必须自己做所有事情。

为了提高速度,您可以在多个级别上设置计数字段,也许作为单独的表。带有用于检查的时间戳。

优点是可以灵活的做报表。轻松备份。

当一切正常时,可以稍后进行自定义重构。

关于java - 避免在 Java 中使用大量计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31718344/

相关文章:

PHP实时动态计算mysql结果之和

java - 类似于 Spring 的 Jersey 的 @ModelAttribute

java - AndEngine GenericPool 带有计时器,从池中添加 Sprite

sql - 如何删除子查询返回的所有记录?

mysql - 如何让 Magento 更快地保存产品?

php - 统计表中分层数据的所有子节点

mysql - 如何获取不在表 “ids” 中的 “service_gos” (Laravel)

database - 什么技术可以帮助我快速搜索、过滤和分组广泛数据集中的任何列?

java - 在 SQL 插入之前转义 charArray 的最快方法

java - 解包数据 firestore 查询返回的数组类型