我有一个非常大的文件(10^8 行),其中事件计数如下,
A 10
B 11
C 23
A 11
我需要累积每个事件的计数,以便我的地图包含
A 21
B 11
C 23
我目前的做法:
读取行数,维护一张地图,并更新地图中的计数如下
updateCount(Map<String, Long> countMap, String key,
Long c) {
if (countMap.containsKey(key)) {
Long val = countMap.get(key);
countMap.put(key, val + c);
} else {
countMap.put(key, c);
}
}
目前这是代码中最慢的部分(大约需要 25 毫秒)。请注意,地图基于 MapDB,但我怀疑更新速度会因此而变慢(是吗?)
这是地图的 mapdb 配置,
DBMaker.newFileDB(dbFile).freeSpaceReclaimQ(3)
.mmapFileEnablePartial()
.transactionDisable()
.cacheLRUEnable()
.closeOnJvmShutdown();
有没有办法加快这个速度?
编辑:
唯一键的数量与维基百科中的页面顺序相同。数据实际上是来自这里的页面流量数据。