优化内存中DataTable搜索速度,IP区域汇总

     前段时间遇到一个IP的问题,IP库有大约50w的数据,每天登陆网页的人数大约有5000,想做出一个柱状图,显示这5000人的城市分布情况,肯定不能将这5000人去读取5000次数据库,那么只能将这个IP库50w的数据放在程序的内存中,但是不做优化,直接去50w数据中筛选,无疑消耗是可怕的,经过几日测试,现将一个比较好的解决方案提供:

  ①:查询时候排序,然后根据二分法去读取内存中的(非数据库的)数据集

  ②:将数据集放在一个哈希表中,加速单个的查询速度

  ③:有人说可以再sql中写自定义函数处理,这个本人没尝试过,其他人有好的方案也可以提供

 

 读取出来放大哈希表的代码就不贴了,仅贴上二分法的吧,仅供参考:

①:二分法处理这个数据集

   static int Dichotomy(Dictionary<int, Int64[]> arr, Int64 v)
        {
            int low = 0;
            int high = arr.Count - 1;
            int mid;

            while (low <= high)
            {
                if (low == high)
                {
                    return low;
                }
                mid = (low + high) / 2;
                if (v < arr[mid][0])//查询的值小于中值,查询区间就是low到新的上限
                {

                    high = mid - 1;//上限的索引值
                }
                else if (v > arr[mid][0])//查询的值大于中值,查询区间就是新的下限到high
                {
                    low = mid + 1;//下限的索引值
                }
                else
                {
                    return mid;
                }
            }
            return high;
        }


      以上纯属个人观点,转载请注明出处

 
                                   --------------AK:2012-10-24

 

 

posted @ 2012-10-24 11:31  老Key  阅读(1168)  评论(2编辑  收藏  举报