号码过滤,超大访问量情况下如何处理?
情况是有一个号码池(存放号码的集合估计10万个左右),用户提交号码时判断该号码是否在池里,在就过滤,我是把过滤池的号码村在了hashtable,然后判断用户提交的号码是否在hashtable里面,这样处理小数据还可以,但用户访问过率时系统会很慢,
求更快的方法,希望能给出具体代码,用完成端口或线程.....
------解决方案--------------------号码池最好找下规律进行分离,分成多个池
------解决方案--------------------如果只是 判断号码 是否存在 不必要用hashtable数组即可
如果是要根据 userID 来取号码 才使用hashtable
不管那种
楼主可以 将 号码 按段分解 使用多个hashtable(第一种情况用数组即可)
比如 130 133 135 139 在你的号码中是存在的 先去查这个段记录是否存在,
再往下找后面的段 , 具体分组看情况
------解决方案--------------------不管那种
楼主可以 将 号码 按段分解 使用多个hashtable(第一种情况用数组即可)
比如 130 133 135 139 在你的号码中是存在的 先去查这个段记录是否存在,
再往下找后面的段 , 具体分组看情况
还是,hertcloud(·£孙子兵法£·) 的办法试试
------解决方案--------------------慢的原因一般来说是内存占用太大了,你可以考虑用Xml来存储这些号码,然后用占内存很小的XmlReader来分析这个Xml,这样可能会效率会提高很多.(以前有过这种类似做法).
------解决方案--------------------个人意见:
找一下号码的规律然后创建索引:如果你的号码不是类似GUID的毫无规律的东西,就一定有规律,比如身份证号码可以按照地区,手机号可以按号段等等,按照这个创建索引。
放弃HashTable用数组:HashTable存对象,每一次都要装箱、拆箱,这个操作比较耗时,再者HashTable是Key-Value成对的,对于存储号码也没有意义。我估计你用HashTable是因为它有类似HasValue的属性。如果需要Key-Value模式的,可以考虑专为字符串设计的StringDictionary。不过你这个,我觉得数组更好些。
------解决方案--------------------但是数组肯定会比Hashtable快N多