[问题] 如何缩短判断的时间

楼主: phoenixlife (键盘小底迪)   2015-03-18 00:02:45
目前手上有700多万笔资料
每一笔都有时间点(时:分:秒)
然后我想把每一笔资料作归类
每5秒为一个区隔
例如: 00:00:04的资料会被归类到 00:00:00的bucket(用TreeMap实作)
小弟我的作法是先建立好所有时段bucket
每读一笔资料 就会去判断是在哪个时段bucket (从00:00:00 一直加5秒 至24:00:00结束)
但这样很慢
有更快的作法吗
谢谢
作者: LPH66 (-6.2598534e+18f)   2015-03-18 00:06:00
时分秒标签要分类很累, 不如全部换成秒来算
作者: mars90226 (火星人)   2015-03-18 00:15:00
用楼上作法搭配精巧的算数应该可以用array来做
楼主: phoenixlife (键盘小底迪)   2015-03-18 00:20:00
感觉全部用秒数算好像会快一点 试试看 thx
作者: csieflyman (风之骄子)   2015-03-18 12:44:00
你的精确度到秒 一天也才86400秒 而且还每5秒分bucket700万笔资料不会重复吗? 怎会是用TreeMap? 应该是multimap吧 你的key value是什么?
楼主: phoenixlife (键盘小底迪)   2015-03-18 13:29:00
我的calue值可以用array 去存在那个时段的资料valuekey是时段
作者: csieflyman (风之骄子)   2015-03-18 13:47:00
用 guava collection library 依照资料特性及你读写的需求选择 ListMultimap 或 SetMultimap 的实作 如果资料彼此独立 可试试开多个 thread 写入 此时要使用 Multimaps.synchronizedSetMultimap(com.google.common.collect.SetMultimap<K, V>) 达到 thread safe一开始建立 multimap 物件时 要给预估的容量 假设资料平均分配 那就是 700万除以bucket数量 避免过多rehashing700万笔数目也不小 可开启JDK附的Jvisualvm工具看memory 使用状况 调大 heap size
楼主: phoenixlife (键盘小底迪)   2015-03-18 16:54:00
嗯嗯 谢谢各位大大的建议

Links booklink

Contact Us: admin [ a t ] ucptt.com