Re: [問題] dictionary 使用問題

看板C_Sharp (C#)作者 (信)時間11年前 (2014/04/01 03:06), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《eplis (Eplis)》之銘言: : 這個問題比較像是如何設計。 : 系統會陸續收到很多筆資料(一天約兩千萬筆),我想判斷這些資料是否有重複。 : 通常只需要和當天資料比較,也就是說今天資料不需要和兩天前的比。 : 原先我是使用 dictionary儲存,收到資料就 add 進 dictionary, : 再使用 containskey 方法來做為重複判斷。 : 目前問題出在當系統運作幾天後,這個dictionary內的資料量會變得很大 : 而不需要被比較的資料仍舊存在(如上面所說,要判斷重複僅須和資料的+-1天相比) : 我想到用 remove(dictionary.keys.first)方式,但是新進的資料就會被放在 first : 一旦下一次 remove時就會刪到較新的資料 設計兩層的結構 dictionary<string, dictionary<key, value>> data = new .... DateTime dateNow = DateTime.Now; string sDate = dateNow.toString("yyyyMMdd"); data[sDate].add(newKey, newValue); sDate = dateNow.addDay(-1).toString("yyyyMMdd"); if(data.containskey(sDate)) data.remove(sDate); 以日期作索引,換日時有資料變動就可以自動移除舊資料 map的結構,資料蒐尋很快(透過key),但add, remove的成本也高 所以減少資料不斷需要add, remove的次數可以提高效能 另外如果會同時從不同來源收到多筆資料,記得寫個queue做緩衝 題外話: 也可以考慮用現成的memcache,例如redis(NOSQL,且具備分散式記憶體伺服器的功能) 可以設定資料保存期限 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.240.239.100 ※ 文章網址: http://www.ptt.cc/bbs/C_Sharp/M.1396292788.A.9DA.html
文章代碼(AID): #1JERoqdQ (C_Sharp)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1JERoqdQ (C_Sharp)