作者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/m.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