作者phoenixlife (键盘小底迪)
看板java
标题[问题] 如何缩短判断的时间
时间Wed Mar 18 00:02:45 2015
目前手上有700多万笔资料
每一笔都有时间点(时:分:秒)
然後我想把每一笔资料作归类
每5秒为一个区隔
例如: 00:00:04的资料会被归类到 00:00:00的bucket(用TreeMap实作)
小弟我的作法是先建立好所有时段bucket
每读一笔资料 就会去判断是在哪个时段bucket (从00:00:00 一直加5秒 至24:00:00结束)
但这样很慢
有更快的作法吗
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.243.64.213
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1426608169.A.82F.html
1F:推 LPH66: 时分秒标签要分类很累, 不如全部换成秒来算 03/18 00:06
2F:推 mars90226: 用楼上作法搭配精巧的算数应该可以用array来做 03/18 00:15
3F:→ phoenixlife: 感觉全部用秒数算好像会快一点 试试看 thx 03/18 00:20
4F:推 csieflyman: 你的精确度到秒 一天也才86400秒 而且还每5秒分bucket 03/18 12:44
5F:→ csieflyman: 700万笔资料不会重复吗? 怎会是用TreeMap? 应该是mul 03/18 12:44
6F:→ csieflyman: timap吧 你的key value是什麽? 03/18 12:44
7F:→ phoenixlife: 我的calue值可以用array 去存在那个时段的资料 03/18 13:29
8F:→ phoenixlife: value 03/18 13:29
9F:→ phoenixlife: key是时段 03/18 13:30
10F:推 csieflyman: 用 guava collection library 依照资料特性及你读写 03/18 13:47
11F:→ csieflyman: 的需求选择 ListMultimap 或 SetMultimap 的实作 如果 03/18 13:47
12F:→ csieflyman: 资料彼此独立 可试试开多个 thread 写入 此时要使用 M 03/18 13:47
13F:→ csieflyman: ultimaps.synchronizedSetMultimap(com.google.common 03/18 13:47
14F:→ csieflyman: .collect.SetMultimap<K, V>) 达到 thread safe 03/18 13:47
15F:推 csieflyman: 一开始建立 multimap 物件时 要给预估的容量 假设资 03/18 13:53
16F:→ csieflyman: 料平均分配 那就是 700万除以bucket数量 避免过多reha 03/18 13:53
17F:→ csieflyman: shing 03/18 13:53
18F:推 csieflyman: 700万笔数目也不小 可开启JDK附的Jvisualvm工具看memo 03/18 14:10
19F:→ csieflyman: ry 使用状况 调大 heap size 03/18 14:10
20F:→ phoenixlife: 嗯嗯 谢谢各位大大的建议 03/18 16:54