亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

最新IP地址數據庫 二分逼近&二分查找 高效解析800萬大數據之區域分布

2019-11-17 01:33:40
字體:
來源:轉載
供稿:網友

最新ip地址數據庫 二分逼近&二分查找 高效解析800萬大數據之區域分布

最新IP地址數據庫 來自 QQzeng.com

利用二分逼近(bisection method) ,解析800多萬IP 只需幾十秒,比較高效!

原來的順序查找算法 效率比較低

 readonly string ipBinaryFilePath = "qqzengipdb.dat";        readonly byte[] dataBuffer, indexBuffer;        readonly uint[] index = new uint[256];        readonly int dataLength;        public IpLocation()        {            try            {                FileInfo file = new FileInfo(ipBinaryFilePath);                dataBuffer = new byte[file.Length];                using (var fin = new FileStream(file.FullName, FileMode.Open, Fileaccess.Read))                {                    fin.Read(dataBuffer, 0, dataBuffer.Length);                }                                var offset_len = BytesToLong(dataBuffer[0], dataBuffer[1], dataBuffer[2], dataBuffer[3]); //Big Endian                indexBuffer = new byte[offset_len];                Array.Copy(dataBuffer, 4, indexBuffer, 0, offset_len);                dataLength = (int)offset_len;                for (int loop = 0; loop < 256; loop++)                {                    //索引 四字節  LITTLE_ENDIAN                    index[loop] = BytesToLong(indexBuffer[loop * 4 + 3], indexBuffer[loop * 4 + 2], indexBuffer[loop * 4 + 1], indexBuffer[loop * 4]);                }            }            catch { }        }        public string[] Find(string ip)        {            var ips = ip.Split('.');            uint ip_PRefix = uint.Parse(ips[0]);            uint find_uint32 = BytesToLong(byte.Parse(ips[0]), byte.Parse(ips[1]), byte.Parse(ips[2]), byte.Parse(ips[3]));//BIG_ENDIAN                      // LITTLE_ENDIAN            int max_len = 0;                   int resultOffset =-1;            int resultLegth =-1;                        uint start = index[ip_prefix] * 8 + 1024;            if (ip_prefix != 255)            {                max_len = (int)index[ip_prefix + 1] * 8 + 1024;            }            else            {                max_len = (int)index[255] * 8 + 1024+1;            }               for (; start < max_len; start += 8)            {                // 前四位 結束ip   后三位 偏移  最后一位 內容長度                 uint endipNum = BytesToLong(indexBuffer[start + 0], indexBuffer[start + 1], indexBuffer[start + 2], indexBuffer[start + 3]);//BIG_ENDIAN                if (endipNum >= find_uint32)                {                    resultOffset =(int) BytesToLong((byte)0, indexBuffer[start + 6], indexBuffer[start + 5], indexBuffer[start + 4]);//LITTLE_ENDIAN                    resultLegth = 0xFF & indexBuffer[start + 7];// 長度                    break;                }                         }            if (resultOffset==-1||resultLegth==-1)            {                return new string[] {"N/A"};            }            var areaBytes = new byte[resultLegth];            Array.Copy(dataBuffer, dataLength + resultOffset - 1024, areaBytes, 0, resultLegth);            return Encoding.UTF8.GetString(areaBytes).Split(' ');        }             private static uint BytesToLong(byte a, byte b, byte c, byte d)        {                       return ((uint)a << 24) | ((uint)b << 16) | ((uint)c << 8) | (uint)d;        }        public static string long2IP(long longIP)        {            StringBuilder sb = new StringBuilder("");            sb.Append(longIP >> 24);            sb.Append(".");            //將高8位置0,然后右移16為            sb.Append((longIP & 0x00FFFFFF) >> 16);            sb.Append(".");            sb.Append((longIP & 0x0000FFFF) >> 8);            sb.Append(".");            sb.Append((longIP & 0x000000FF));            return sb.ToString();        }      }

改進版 采用二分逼近算法(類似二分查找,但又不同) 性能提升很大

  public string[] Find(string ip)        {            var ips = ip.Split('.');            uint ip_prefix = uint.Parse(ips[0]);            uint find_uint32 = BytesToLong(byte.Parse(ips[0]), byte.Parse(ips[1]), byte.Parse(ips[2]), byte.Parse(ips[3]));//BIG_ENDIAN            uint max_len = 0;            int resultOffset = -1;            int resultLegth = -1;            uint start = index[ip_prefix];            if (ip_prefix != 255)            {                max_len = index[ip_prefix + 1];            }            else            {                max_len = index[255];            }            uint num = max_len - start;            uint my_index = BinarySearch(start, max_len, find_uint32);            start = my_index * 8 + 1024;            resultOffset = (int)BytesToLong((byte)0, indexBuffer[start + 6], indexBuffer[start + 5], indexBuffer[start + 4]);//LITTLE_ENDIAN            resultLegth = 0xFF & indexBuffer[start + 7];// 長度            if (resultOffset == -1 || resultLegth == -1)            {                return new string[] { "N/A" };            }            var areaBytes = new byte[resultLegth];            Array.Copy(dataBuffer, dataLength + resultOffset - 1024, areaBytes, 0, resultLegth);            return Encoding.UTF8.GetString(areaBytes).Split(' ');        }        /// <summary>        /// 二分逼近        /// </summary>        public uint BinarySearch(uint low, uint high, uint k)        {            uint M = 0;            while (low <= high)            {                uint mid = (low + high) / 2;                uint endipNum = GetStartIp(mid);                if (endipNum >= k)                {                    M = mid; //mid有可能是解                    high = mid - 1;                }                else                    low = mid + 1;            }            return M;        }

有了上面高效算法 解析出來800多萬數據 也很快 再用一個簡單的ling 統計一下即可

  var cn_result= from r in list                        group r by r.cn into g                        select new { key = g.Key, cnt = g.Count() };

800多萬數據 統計組圖

微信公眾號:qqzeng-ip

IP地址數據庫:IP地址數據庫


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩在线另类| 欧美日韩国产综合视频在线观看中文| 91产国在线观看动作片喷水| 青青草国产精品一区二区| 欧美另类极品videosbest最新版本| 欧美午夜激情视频| 亚洲欧美成人网| 日韩在线视频中文字幕| 欧美老少配视频| 国产免费一区二区三区香蕉精| 欧美在线视频一区| 日日骚av一区| 欧美日韩国产综合新一区| 国产精品情侣自拍| 亚洲美女黄色片| 日韩在线观看免费高清| 欧美伊久线香蕉线新在线| 日韩精品福利网站| 91精品国产乱码久久久久久久久| 国产欧美一区二区白浆黑人| 51ⅴ精品国产91久久久久久| 91精品国产综合久久香蕉922| 欧美超级免费视 在线| 国产成人91久久精品| 精品久久久久久中文字幕一区奶水| 国产一区二区三区丝袜| 最近2019年好看中文字幕视频| 国产精品一区久久久| 亚洲成人a级网| 不卡av电影在线观看| 国产丝袜一区二区| 国产精品男女猛烈高潮激情| 国产一区二区在线免费| 91国自产精品中文字幕亚洲| 日韩欧中文字幕| 日韩av在线免费观看一区| 日本sm极度另类视频| 亚洲欧美激情一区| 国精产品一区一区三区有限在线| 欧美成人免费一级人片100| 欧美麻豆久久久久久中文| 欧日韩在线观看| 日韩专区在线观看| 亚洲伦理中文字幕| 亚洲精品自拍偷拍| 国产成人精品一区二区在线| 国模叶桐国产精品一区| 久久亚洲国产精品成人av秋霞| 欧美另类在线观看| 亚洲精品国产品国语在线| 欧美特级www| 91麻豆国产精品| 欧美激情亚洲视频| 亚洲第一精品自拍| 欧美一级片久久久久久久| 欧美电影在线免费观看网站| 亚洲国产欧美一区二区三区同亚洲| 18性欧美xxxⅹ性满足| 国产成人精品电影久久久| 91精品在线一区| 久久久亚洲福利精品午夜| 懂色av中文一区二区三区天美| 国产精品视频网站| 色777狠狠综合秋免鲁丝| 欧美精品在线视频观看| 国产精品久久久久久久9999| 91国语精品自产拍在线观看性色| 九九久久久久久久久激情| 九九久久久久久久久激情| 国产精品久久久久久久久免费看| 热久久免费国产视频| 欧美日韩精品在线观看| 亚洲欧美国产一本综合首页| 欧美午夜性色大片在线观看| 色偷偷噜噜噜亚洲男人的天堂| 日本免费一区二区三区视频观看| 51久久精品夜色国产麻豆| 欧美性极品xxxx娇小| 456亚洲影院| 亚洲激情第一页| 午夜精品一区二区三区在线视| 日韩中文视频免费在线观看| 亚洲欧美日韩爽爽影院| 少妇av一区二区三区| 岛国av一区二区在线在线观看| 亚洲欧美激情四射在线日| 国产精品精品一区二区三区午夜版| 久久在线免费视频| 97久久伊人激情网| 亚洲黄在线观看| 久久精品人人做人人爽| 米奇精品一区二区三区在线观看| 精品亚洲男同gayvideo网站| 欧美激情a在线| 日韩免费在线播放| 久久天天躁狠狠躁夜夜爽蜜月| 欧美肥老太性生活视频| 日韩中文在线不卡| 亚洲黄色www网站| 成人激情视频在线观看| 久久免费精品日本久久中文字幕| 欧美第一页在线| 色黄久久久久久| 日本午夜精品理论片a级appf发布| 国产成人小视频在线观看| 欧美一级电影在线| 国产精品视频网址| 久久久久久12| 日韩国产中文字幕| 亚洲一区二区少妇| 国产91在线高潮白浆在线观看| 国产成人精品一区二区三区| 亚洲精品少妇网址| 欧亚精品在线观看| 日韩在线中文字幕| 亚洲国产精品资源| 久久亚洲精品毛片| 7m第一福利500精品视频| 久久久久久久久久久国产| 51久久精品夜色国产麻豆| 久久99久久99精品免观看粉嫩| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲精品99久久久久中文字幕| 亚洲性日韩精品一区二区| 成人午夜在线影院| 91亚洲精品视频| 2018中文字幕一区二区三区| 日韩电影在线观看中文字幕| 青青久久aⅴ北条麻妃| 国产日本欧美一区| 日韩美女av在线免费观看| 亚洲缚视频在线观看| 日韩av综合网| 91精品国产九九九久久久亚洲| 午夜精品视频在线| 欧美激情极品视频| 国产精品pans私拍| 亚洲深夜福利在线| 国产黑人绿帽在线第一区| 精品中文字幕在线2019| 日韩av在线免费| 亚洲大胆人体视频| 欧美视频裸体精品| 91成人天堂久久成人| 欧美日韩综合视频网址| 4438全国亚洲精品在线观看视频| 亚洲在线视频观看| 国产精品视频专区| 久久夜色精品国产| 亚洲精品黄网在线观看| 国产日韩精品电影| 久久久国产精品视频| 97av在线影院| 国产精品综合久久久| www.午夜精品| 韩国国内大量揄拍精品视频| 最新亚洲国产精品| 亚洲精品视频网上网址在线观看| 国产成人亚洲综合青青| 欧美日韩美女视频| www国产91| 久久在线免费观看视频| 欧美激情a∨在线视频播放| 欧美激情网站在线观看|