[问题] dictionary 使用问题

楼主: eplis (Eplis)   2014-03-18 13:29:20
这个问题比较像是如何设计。
系统会陆续收到很多笔资料(一天约两千万笔),我想判断这些资料是否有重复。
通常只需要和当天资料比较,也就是说今天资料不需要和两天前的比。
原先我是使用 dictionary储存,收到资料就 add 进 dictionary,
再使用 containskey 方法来做为重复判断。
目前问题出在当系统运作几天后,这个dictionary内的资料量会变得很大
而不需要被比较的资料仍旧存在(如上面所说,要判断重复仅须和资料的+-1天相比)
我想到用 remove(dictionary.keys.first)方式,但是新进的资料就会被放在 first
一旦下一次 remove时就会删到较新的资料
ex:
dic.add("1",1);
dic.add("2",2);
dic.add("3",3);
dic.remove(dic.keys.first);
dic.add("4",4);
印出结果..
4,4
2,2
3,3
下一次 remove 4,4就会被删除了
我有想到用sortedDictionary,但是他的速度慢很多,一个是 O(log n),一个是O(1)
想请问有没有更好的方式或建议?
作者: m339606 (mize)   2014-03-18 13:39:00
两千万....先进数据库如何?资料量大的话在程式码中处理会非常非常非常消耗资源
楼主: eplis (Eplis)   2014-03-18 15:35:00
如果说都先进数据库确实没有这个问题,只是每一笔都进数据库去比对是否有重复,会不会制造大量I/O,反而比较慢?这方面我比较没经验..
作者: emn178 (小残)   2014-03-18 18:23:00
改用MemoryCache ?
作者: m339606 (mize)   2014-03-18 19:00:00
进数据库好处是可以分散资源(数据库独立),后续处理容易至于大量IO的问题要看实际运作,可以Cache后定时进数据库从文内判断的话资料会无限制的不断进来1天两千万,10天呢?100天呢?到时候比对会是一个大灾难如果每天清空重新处理的话倒也还好,考虑+-1天比对的话...
作者: YahooTaiwan (超可爱南西我老婆)   2014-03-18 20:29:00
我觉得进数据库会造成更大的灾难欸 两千万笔...你有试过OrderedDictionary吗
作者: ssccg (23)   2014-03-18 21:03:00
+-1天比对,不能每天清掉-2天的资料吗
作者: g66932007 (孤单的人)   2014-03-18 21:33:00
还没看过table里有两千万笔的资料.....
作者: YahooTaiwan (超可爱南西我老婆)   2014-03-18 22:13:00
请问你remove的条件只有"时间 > 一天"吗
作者: m339606 (mize)   2014-03-18 22:26:00
两千万笔资料进不进数据库都会有大问题,好处是可以分散不进数据库就需要谨慎考虑资料安全性,例如出错当机存在内存给你一个方向就是三个DictionaryA、B、C 每天固定时间从A复制到B、B复制到C,一天分配一个让一天的资料固定占用一个Dictionary,+-一天比对就解决了天啊三个就6千万...权衡一下要用哪种吧,混合也是种方法

Links booklink

Contact Us: admin [ a t ] ucptt.com