[問題] 如何縮短判斷的時間

作者: 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