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

首頁(yè) > 語(yǔ)言 > PHP > 正文

php二分法在IP地址查詢中的應(yīng)用

2024-09-04 11:50:19
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

數(shù)據(jù)庫(kù)大概存儲(chǔ)幾十萬(wàn)條IP記錄,記錄集如下:


+----------+----------+------------+---------+---------+--------+--------+
| ip_begin | ip_end | country_id | prov_id | city_id | isp_id | netbar |
+----------+----------+------------+---------+---------+--------+--------+
| 0 | 16777215 | 2 | 0 | 0 | 0 | 0 |
| 16777216 | 33554431 | 2 | 0 | 0 | 0 | 0 |
| 33554432 | 50331647 | 2 | 0 | 0 | 0 | 0 |
| 50331648 | 67108863 | 3 | 0 | 0 | 0 | 0 |
| 67108864 | 67829759 | 3 | 0 | 0 | 0 | 0 |
+----------+----------+------------+---------+---------+--------+--------+
  這樣做查詢需要用到如下SQL:
<?php
$sql = 'SELECT * FROM i_m_ip WHERE ip_begin <= $client_ip AND ip_end >= $client_ip';
?>
  這樣的檢索顯然用不到索引,即使用到,MySQL查詢效率也不大可能達(dá)到每秒500次以上,我做了很多并發(fā)優(yōu)化,最終平均查詢效率也只有每秒200次左右,實(shí)在是頭痛。一開始我也有想到借鑒純真IP庫(kù)的檢索方法,但是我一直對(duì)算法有抵觸,也以為二分法很難,所以就沒(méi)有嘗試使用,直到最后沒(méi)有辦法了,才最終實(shí)現(xiàn)了二分法的IP地址檢索。
  從上表可以看到IP庫(kù)是從0到4294967295的一個(gè)連續(xù)數(shù)值,這個(gè)數(shù)值要是拆開存儲(chǔ),會(huì)有幾百G的數(shù)據(jù),所以沒(méi)辦法使用索引也沒(méi)辦法哈希。最終我使用PHP將這些東東轉(zhuǎn)為二進(jìn)制存儲(chǔ),拋棄了數(shù)據(jù)庫(kù)的檢索??梢钥吹絀P起止長(zhǎng)度為一個(gè)4字節(jié)的長(zhǎng)整型,后面的國(guó)家ID、省份ID等,可以使用2個(gè)字節(jié)的短整型來(lái)存儲(chǔ),總共一行數(shù)據(jù)就有18個(gè)字節(jié),總共31萬(wàn)條數(shù)據(jù),算起來(lái)也就5M的樣子。具體IP庫(kù)生成代碼如下:
<?php
/*
IP文件格式:
3741319168 3758096383 182 0 0 0 0
3758096384 3774873599 3 0 0 0 0
3774873600 4026531839 182 0 0 0 0
4026531840 4278190079 182 0 0 0 0
4294967040 4294967295 312 0 0 0 0
*/
set_time_limit(0);
$handle = fopen('./ip.txt', 'rb');
$fp = fopen("./ip.dat", 'ab');
if ($handle) {
while (!feof($handle)) {
$buffer = fgets($handle);
$buffer = trim($buffer);
$buffer = explode("/t", $buffer);
foreach ($buffer as $key => $value) {
$buffer[$key] = (float) trim($value);
}
$str = pack('L', $buffer[0]);
$str .= pack('L', $buffer[1]);
$str .= pack('S', $buffer[2]);
$str .= pack('S', $buffer[3]);
$str .= pack('S', $buffer[4]);
$str .= pack('S', $buffer[5]);
$str .= pack('S', $buffer[6]);
fwrite($fp, $str);
}
}
?>

  這樣IP就按照順序每18字節(jié)一個(gè)單位排列了,所以很容易就使用二分法來(lái)檢索出IP信息:
function getip($ip, $fp) {
fseek($fp, 0);
$begin = 0;
$end = filesize('./ip.dat');
$begin_ip = implode('', unpack('L', fread($fp, 4)));
fseek($fp, $end - 14);
$end_ip = implode('', unpack('L', fread($fp, 4)));
$begin_ip = sprintf('%u', $begin_ip);
$end_ip = sprintf('%u', $end_ip);

do {
if ($end - $begin <= 18) {
fseek($fp, $begin + 8);
$info = array();
$info[0] = implode('', unpack('S', fread($fp, 2)));
$info[1] = implode('', unpack('S', fread($fp, 2)));
$info[2] = implode('', unpack('S', fread($fp, 2)));
$info[3] = implode('', unpack('S', fread($fp, 2)));
$info[4] = implode('', unpack('S', fread($fp, 2)));
return $info;
}

$middle_seek = ceil((($end - $begin) / 18) / 2) * 18 + $begin;

fseek($fp, $middle_seek);
$middle_ip = implode('', unpack('L', fread($fp, 4)));
$middle_ip = sprintf('%u', $middle_ip);

if ($ip >= $middle_ip) {
$begin = $middle_seek;
} else {
$end = $middle_seek;
}
} while (true);
}

  以上$fp為打開ip.dat的文件句柄,由于是循環(huán)檢索,所以寫在函數(shù)外面,免得每次檢索都要打開一次文件,30W行數(shù)據(jù)二分法最多也只需要循環(huán)7次(2^7)左右即可找到準(zhǔn)確的IP信息。之后本來(lái)還想將ip.dat放在內(nèi)存中加快檢索速度,后來(lái)發(fā)現(xiàn),字符串定位函數(shù)的效率,根本和文件指針的偏移定位不是在一個(gè)數(shù)量級(jí)的,所以還是放棄使用內(nèi)存來(lái)存放IP庫(kù)。
  這個(gè)實(shí)現(xiàn),使IP檢索效率提高了近百倍,只是一個(gè)簡(jiǎn)單的二分法的應(yīng)用,從此算法在WEB應(yīng)用中不重要的觀念徹底打消了。其實(shí)要實(shí)現(xiàn)這個(gè),我還請(qǐng)教了金狐,我一開始是請(qǐng)他幫我生成一個(gè)純真格式的IP庫(kù),然后用Discuz的IP查詢函數(shù)來(lái)檢索,不過(guò)他不肯幫我,最后造就了我的這個(gè)實(shí)踐和學(xué)習(xí)。有時(shí)候,求人不如求己。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
亚洲精品乱码久久久久久动漫| 国产丝袜视频在线播放| 国产一级网站视频在线| 亚洲天堂免费| 亚洲视频在线免费播放| 五月婷婷六月激情| 日韩一级裸体免费视频| 国产一区二区三区亚洲| 精品国偷自产在线视频99| 欧美日韩少妇| 韩日视频一区| 国产老妇伦国产熟女老妇视频| 久久影视电视剧免费网站| 国产视频你懂的| 亚洲免费影视| 中文字幕视频免费在线观看| 蜜桃极品自拍av| 日韩电影网在线| 国产精品一区二区入口九绯色| 国产精品女主播视频| 日本一区二区三区精品| 国产精品主播一区二区| 99热在线免费播放| 国产乱子轮精品视频| 久久夜色精品国产亚洲aⅴ| 在线一区视频| 视频一区二区综合| 一级全黄少妇性色生活片| 日韩精品永久网址| 在线不卡中文字幕| 欧美一区 二区| 亚洲美女偷拍久久| 国产在线观看av| 亚洲中文字幕在线观看| 欧美激情一级二级三级在线视频| chinesemodel无套啪啪| 国产欧美一区二区三区精品观看| 伊人影院在线观看| 国模 一区 二区 三区| gogogo免费高清日本写真| 精品视频一区二区三区四区五区| 日韩伦理三区| 日韩中文在线不卡| 国产欧美一区二区精品仙草咪| 久久久久久美女精品| 麻豆av一区二区三区| 丝袜综合欧美| av成人男女| 乱馆动漫1~6集在线观看| 国产精品久久久久久吹潮| 成人女性文胸| 只有这里有精品| 欧美成人精品不卡视频在线观看| 亚洲精品天堂成人片av在线播放| 凹凸日日摸日日碰夜夜| 欧美主播一区二区三区| 一区二区成人| 99视频超级精品| 国产一区福利视频| 美日韩精品免费| 日韩极品在线观看| 91久久久久久白丝白浆欲热蜜臀| 亚洲免费精品| 国产一区二区视频免费在线观看| 神马久久久久久| 男人和女人做事情在线视频网站免费观看| 日韩理论视频| 欧美精三区欧美精三区| 国产mv免费观看入口亚洲| 日本丰满少妇做爰爽爽| 怡红院成人在线| 久久久亚洲综合网站| 亚洲第一论坛sis| 亚洲精品456在线播放狼人| 欧美91精品久久久久国产性生爱| 欧美成人a在线| 大色综合视频网站在线播放| 中文在线中文字幕| 欧美日韩色综合| 日韩一级免费在线观看| 中文字幕第三区| h片在线观看视频免费免费| 岛国电影中文在线| 视频区 图片区 小说区| 午夜电影一区二区三区| 欧美美最猛性xxxxxx| 国产美女无遮挡网站| 欧美亚洲国产一区二区三区va| 北条麻妃在线视频观看| 自拍亚洲色图| 亚洲国产精品第一页| 91国偷自产一区二区使用方法| 免费网站看v片在线a| 国产免费不卡| 精品一区二区6| 不卡视频在线看| 一本色道久久99精品综合| 久久高清视频免费| av电影一区二区三区| 毛片毛片毛片毛片毛片毛片毛片毛片毛片| 夜色福利资源站www国产在线视频| 中文字幕av一区| 婷婷丁香一区二区三区| 久久激情视频免费观看| 亚洲精品国产精华液| www.操操| 亚洲精品在线观看网站| caoporm在线视频| 欧美精品情趣视频| 国产亚洲精品bv在线观看| yw.尤物在线精品视频| 成人免费看的视频| 国产精品麻豆久久久| 日批视频免费在线观看| 久久99国产精品麻豆| 高清在线视频日韩欧美| 第三区美女视频在线| 男女啪啪999亚洲精品| 国产视频91在线| 波多野结衣xxxx| 成人网免费看| 99产精品成人啪免费网站| 亚洲成人资源在线| 国产精品原创| 精产国品一区二区三区| 屁屁影院ccyy国产第一页| 亚洲国产精品欧美一二99| 二区三区不卡不卡视频| 亚洲国产精品嫩草影院| 神马久久精品| 国产欧美视频一区二区三区| 老司机性视频| 一级免费在线观看| 五月激情丁香婷婷| 国产欧美久久久久久| 日韩成人动漫| 91精品啪在线观看国产手机| 欧美大胆人体bbbb| 亚洲自拍欧美色图| 亚洲欧美中日韩| 香蕉视频xxxx| a毛片在线观看| 国产精品无码在线播放| 久热精品视频在线播放| 日韩欧美在线观看一区二区| 日本黄色网址大全| 深夜福利久久| 亚洲一级av毛片| 亚洲精品视频在线| 伦伦影院午夜日韩欧美限制| 激情av综合网| 四虎网站在线观看| 黄色毛片网站| 亚洲一区二区日本| 日韩视频免费观看高清| 日本超碰在线观看| 国产在线一二区| 日韩精品一区二区三区高清免费| 在线观看免费黄视频| 亚洲天堂成人在线| 精品一区二区三区免费看| 性一交一乱一伧国产女士spa| 一区二区三区免费播放| 精品magnet| 视频精品一区二区| 国产精品入口夜色视频大尺度| 国产精品区一区二| 天天想你在线观看完整版电影免费| 国产视频不卡一区| 一区二区三区在线观看网站| av资源站久久亚洲| 中文文字幕一区二区三三| 91丨porny丨最新| 国产一区二区av在线| 青青草激情视频| 亚洲一区二区自偷自拍| 日韩欧美国产三级电影视频| 国产香蕉精品视频| 国产91亚洲精品久久久| www.爱色av.com| 一区二区三区回区在观看免费视频| 日韩在线视频免费| 99thz桃花论族在线播放| 91在线你懂得| 久久精品人人做人人爽97| 91香蕉国产在线观看| www.黄在线观看| 一区二区三区四区国产| 免费国产成人av| 日韩中文字幕亚洲| 国产一级生活片| 国产乱码精品一区二三赶尸艳谈| 国产成人亚洲综合青青| 男人天堂av片| 中文字幕一区二区三区手机版| www视频在线免费观看| 四虎成人精品永久免费av九九| 欧美一区欧美二区| 欧美一区二区三区在线观看视频| 欧美大人香蕉在线| 99国产精品视频免费观看一公开| 欧美区国产区| 一级aaaa毛片| 国产福利一区二区三区在线播放| 9999热视频在线观看| 国产精品揄拍一区二区| 99久久久久国产精品| 一区二区三区四区在线视频| 中文字幕亚洲无线码在线一区| 国产精品伦一区二区三区视频| 亚洲精品乱码久久| 日韩视频精品在线观看| 国产午夜久久久| eeuss草民免费| 一本久道久久综合| 777a∨成人精品桃花网| 久久综合久色欧美综合狠狠| 被弄出白浆喷水了视频| 成人在线免费视频观看| 菠萝蜜视频网址| 国产乱淫av片| 久久国产这里只有精品| 成人美女大片| 日韩久久精品一区| 日韩精品中文字幕一区二区三区| 中文字幕免费在线观看视频| 中文字幕桃花岛| 国内精品在线观看视频| 亚洲精品国产无套在线观| 美女被人操视频在线观看| 国产69精品久久久久9999人| 蜜臀精品一区二区三区在线观看| 久久精品人人爽人人爽| 欧美日韩在线免费播放| 成人h动漫精品一区| 超碰在线最新网址| 91porn在线| 曰批又黄又爽免费视频| 国产成人精品a视频一区| 一区二区在线免费视频| 中文字幕手机在线视频| 在线欧美日韩精品| 欧美色欧美亚洲另类二区精品| 台湾色综合娱乐中文网| 国产精品视频内| 中文字幕一区二区中文字幕| 久久精品国亚洲| 亚洲av无码国产精品久久不卡| 国产精品一二三区在线观看| 日韩av在线网址| 日韩欧美成人网| 国产一精品一aⅴ一免费| 91亚洲国产成人精品性色| 五月天婷婷在线播放| 亚洲老女人视频免费| 国产网红在线| 国产超碰精品在线观看| 国产精品黄页网站在线播放免费| www.xxx亚洲| 香蕉久久免费电影| 99re6热在线精品视频播放速度| 99精品国产一区二区三区不卡| 国产一区二区主播在线| 久久久久成人片免费观看蜜芽| 最新天堂网www| 一个人看的日本免费视频| 91久久久一线二线三线品牌| 在线观看日韩中文字幕| 国产精品久久久久久久7电影| 亚洲黄色影片| 亚洲欧洲在线一区| 久久这里只有精品视频网| 久久久久久国产| 精品乱码一区二区三区四区| 免费免费啪视频在线观播放| 亚洲亚洲精品三区日韩精品在线视频| 日韩一区二区久久久| 日韩精品视频免费在线观看| 亚洲一区二区三区四区中文字幕| 欧美人妖巨大在线| 综合亚洲色图| 97成人资源站| 91久久电影| 四虎永久精品在线| 国产乱淫a∨片免费视频| 豆国产97在线|亚洲| 成人18夜夜网深夜福利网| 日本三级中文字幕在线观看| 成人深夜福利app| 亚洲三级欧美| 久久国产视频网站| 成人一区二区三区在线观看| 久久久无码精品亚洲日韩按摩| 久久天天躁夜夜躁狠狠躁2022| 男人的天堂成人在线| 香蕉av一区二区| 日本三级视频在线播放| 在线视频观看国产| 国产精品第一页第二页第三页| 亚洲欧美变态国产另类| 久久av一区二区三| 91极品身材尤物theporn| 一级 黄 色 片一| 国产理论片在线观看| 制服丝袜亚洲网站| 久久草在线看| 99国内精品久久久久| 欧美激情极品| 99久久国产免费免费| 狠狠综合久久av一区二区小说| 国产综合精品一区二区三区| 亚洲高清免费视频| 中文字幕在线播放| 一本久道久久综合中文字幕| 国产黄色免费| 性欧美成人播放77777| 精品无码人妻一区二区三区| 国产欧美熟妇另类久久久| 成人永久免费| 777777777亚洲妇女| 国产乱人视频免费播放| 91青青在线视频| 免费看成年视频网页| 成人xxxx视频| 99国产精品久久久久久久成人| 国产精品四虎| av在线天天| 欧美高跟鞋交xxxxhd|