国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

建立一套IP查詢系統(tǒng),將IP對(duì)應(yīng)到地區(qū),實(shí)現(xiàn)每秒千次以上的查詢。

TZLLOG / 2004人閱讀

摘要:但是無(wú)論如何,我都達(dá)到不了想要的執(zhí)行效率,最好的時(shí)候每秒查詢的數(shù)據(jù)都超不過(guò)條。效率一下子提高了上來(lái),每秒查詢效率穩(wěn)穩(wěn)過(guò)次。

這兩天接了個(gè)任務(wù),描述如下:

建立一套IP查詢系統(tǒng),將IP對(duì)應(yīng)到地區(qū),實(shí)現(xiàn)每秒千次以上的查詢。

1.MySQL+PHP的方式:

將網(wǎng)上的數(shù)據(jù)源扒下來(lái),一條一條放到mysql中,然后使用sql語(yǔ)句查詢,建立索引,
數(shù)據(jù)庫(kù)結(jié)構(gòu)
SET FOREIGN_KEY_CHECKS=0;


-- Table structure for ip_address


DROP TABLE IF EXISTS ip_address;
CREATE TABLE ip_address (
id int(11) unsigned NOT NULL AUTO_INCREMENT,
start_ip int(10) unsigned NOT NULL,
end_ip int(10) unsigned NOT NULL,
region varchar(50) NOT NULL,
address varchar(100) NOT NULL,
PRIMARY KEY (id),
KEY start (start_ip) USING BTREE,
KEY end (end_ip)
) ENGINE=MyISAM AUTO_INCREMENT=405037 DEFAULT CHARSET=utf8;

INSERT INTO ip_address VALUES ("1", "0", "16777215", "IANA保留地址", "CZ88.NET");
INSERT INTO ip_address VALUES ("2", "16777216", "16777471", "澳大利亞", "CZ88.NET");
INSERT INTO ip_address VALUES ("3", "16777472", "16778239", "福建省", "電信");
INSERT INTO ip_address VALUES ("4", "16778240", "16779263", "澳大利亞", "CZ88.NET");
INSERT INTO ip_address VALUES ("5", "16779264", "16781311", "廣東省", "電信");

.......

查詢數(shù)據(jù)的時(shí)候使用SELECT * FROM ip_address WHERE ip_startip <= ip AND ip_endip >= ip。
但是無(wú)論如何,我都達(dá)到不了想要的執(zhí)行效率,最好的時(shí)候每秒查詢的數(shù)據(jù)都超不過(guò)30條。

完成不了任務(wù),只好去問(wèn)問(wèn)度娘。

2.diszuz中的實(shí)現(xiàn)方式:

function convertip_tiny($ip, $ipdatafile) {

static $fp = NULL, $offset = array(), $index = NULL;

$ipdot = explode(".", $ip);
$ip    = pack("N", ip2long($ip));

$ipdot[0] = (int)$ipdot[0];
$ipdot[1] = (int)$ipdot[1];

if($fp === NULL && $fp = @fopen($ipdatafile, "rb")) {
    $offset = @unpack("Nlen", @fread($fp, 4));
    $index  = @fread($fp, $offset["len"] - 4);
} elseif($fp == FALSE) {
    return  "- Invalid IP data file";
}

$length = $offset["len"] - 1028;
$start  = @unpack("Vlen", $index[$ipdot[0] * 4] . $index[$ipdot[0] * 4 + 1] . $index[$ipdot[0] * 4 + 2] . $index[$ipdot[0] * 4 + 3]);

for ($start = $start["len"] * 8 + 1024; $start < $length; $start += 8) {

    if ($index{$start} . $index{$start + 1} . $index{$start + 2} . $index{$start + 3} >= $ip) {
        $index_offset = @unpack("Vlen", $index{$start + 4} . $index{$start + 5} . $index{$start + 6} . "x0");
        $index_length = @unpack("Clen", $index{$start + 7});
        break;
    }
}

@fseek($fp, $offset["len"] + $index_offset["len"] - 1024);
if($index_length["len"]) {
    return "- ".@fread($fp, $index_length["len"]);
} else {
    return "- Unknown";
}

}

用的是二進(jìn)制的文件,然后使用快速查找法:(折半查找法)。效率一下子提高了上來(lái),每秒查詢效率穩(wěn)穩(wěn)過(guò)5000次。哈哈!

3.PHP擴(kuò)展的方式:

方式和PHP一樣的,不過(guò)使用了C語(yǔ)言,效率直接超過(guò)了50000(五萬(wàn))次。效率那就不用說(shuō)了,核心代碼如下:
擴(kuò)展地址:http://pecl.php.net/package/qqwry
下載后安裝方式按照phpize的方式即可
計(jì)入安裝目錄:
./phpize
./configure
make && makeinstall
然后要確保qqwry.so放到擴(kuò)展目錄下,并添加php.ini:
extension=qqwry.so
OK,已經(jīng)好了

static uint32_t search_index(const uint32_t ip,FILE *qqwry_file) {
uint32_t index_ip;
unsigned char head[8];
unsigned char index_bytes[7];
fread(head,8,1,qqwry_file);
uint32_t index_start,index_end,index_mid;
index_start = (uint32_t)LE_32(&head[0]);
index_end = (uint32_t)LE_32(&head[4]);
while (1) {
    if ((index_end-index_start)==7) {
        break;
    }
    //printf("index:%u:%u
",index_start,index_end);
    index_mid=index_end/7 - index_start/7;
    if (index_mid%2==0) {
        index_mid=index_mid/2;
    } else {
        index_mid=(index_mid+1)/2;
    }
    index_mid=index_start+index_mid*7;
    fseek(qqwry_file,index_mid,SEEK_SET);
    fread(index_bytes,7,1,qqwry_file);
    index_ip=(uint32_t)LE_32(&index_bytes[0]);
    if (index_ip==ip) {
        break;
    } else if (index_ipip) {
    fseek(qqwry_file,index_start,SEEK_SET);
    fread(index_bytes,7,1,qqwry_file);
}
return (uint32_t)LE_24(&index_bytes[4]);

}
這也是我目前為止找的效率最快的方式了,完全能夠買足公司的需求了。如果有能夠效率更高的方式,留個(gè)言哈。

所有需要的文件都可以從這里下載哈:
http://url.cn/QorZ2O
下載后把data.rar解壓到當(dāng)前目錄,并執(zhí)行index.php就可以查看后面的兩種方式的執(zhí)行效率了(前提是,有裝qqwry擴(kuò)展哈!)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/20727.html

相關(guān)文章

  • 2017中國(guó)云計(jì)算評(píng)測(cè)報(bào)告

    摘要:當(dāng)前國(guó)內(nèi)云計(jì)算服務(wù)仍處于單打獨(dú)斗,提供單向服務(wù)的階段,完整生態(tài)模式尚未搭建完成。注特別說(shuō)明的是,評(píng)測(cè)期間我們隨機(jī)抽取了金山云位于北京區(qū)的機(jī)房用于驗(yàn)證評(píng)測(cè),屬傳統(tǒng)扁平網(wǎng)絡(luò),此機(jī)房在本次報(bào)告發(fā)布時(shí)已不再售賣。 ? 報(bào)告電子版至聽云官方博客下載:http://blog.tingyun.com/web/a... 評(píng)測(cè)說(shuō)明 評(píng)測(cè)目標(biāo):同一應(yīng)用(網(wǎng)站)在不同云上的用戶訪問(wèn)體驗(yàn),以及對(duì)云資源的使用洞...

    changfeng1050 評(píng)論0 收藏0
  • UCloud IP信息服務(wù)與IPIP.NET原廠合作,價(jià)格低至0.25元/千次

    摘要:信息服務(wù)產(chǎn)品頁(yè)信息服務(wù)產(chǎn)品優(yōu)勢(shì)原廠合作與原廠合作,保證數(shù)據(jù)準(zhǔn)確性實(shí)時(shí)性。價(jià)格彈性低至元千次,可按次購(gòu)買,按需使用,按實(shí)際用量計(jì)費(fèi),精確到元。用量熔斷接口有小時(shí)級(jí)別的次數(shù)限制,不用擔(dān)心因誤操作導(dǎo)致意外的大額費(fèi)用。UCloud IP信息服務(wù)IP 庫(kù)是一個(gè)互聯(lián)網(wǎng)基礎(chǔ)數(shù)據(jù),在做 CDN、DNS 智能解析、廣告定向投放、用戶地域分析、用戶定制化體驗(yàn)等等諸多場(chǎng)景,IP 庫(kù)的準(zhǔn)確與否對(duì)效果好壞有直接的影響...

    Tecode 評(píng)論0 收藏0
  • PHP面試常考之網(wǎng)絡(luò)協(xié)議

    摘要:是為互聯(lián)網(wǎng)服務(wù)的協(xié)議族,它是網(wǎng)絡(luò)通信協(xié)議的統(tǒng)稱,由和等協(xié)議組成。預(yù)告本周五更新面試常考題之會(huì)話控制和網(wǎng)絡(luò)協(xié)議,敬請(qǐng)期待。以上內(nèi)容摘自程序員面試筆試寶典書籍,該書已在天貓京東當(dāng)當(dāng)?shù)入娚唐脚_(tái)銷售。 你好,是我琉憶,歡迎您來(lái)到PHP面試專欄。本周(2019.2-25至3-1)的一三五更新的文章如下: 周一:PHP面試常考之會(huì)話控制周三:PHP面試常考之網(wǎng)絡(luò)協(xié)議周五:PHP面試常考題之會(huì)話控...

    joywek 評(píng)論0 收藏0
  • CDN小結(jié)

    摘要:二目的是一個(gè)經(jīng)策略性部署的整體系統(tǒng),從技術(shù)上全面解決由于網(wǎng)絡(luò)帶寬小用戶訪問(wèn)量大網(wǎng)點(diǎn)分布不均而產(chǎn)生的用戶訪問(wèn)網(wǎng)站響應(yīng)速度慢的根本原因。 一、CDN全稱:??Content Delivery Network或Content Ddistribute Network,即內(nèi)容分發(fā)網(wǎng)絡(luò)。 ??二、目的:??CDN是一個(gè)經(jīng)策略性部署的整體系統(tǒng),從技術(shù)上全面解決由于網(wǎng)絡(luò)帶寬小、用戶訪問(wèn)量大、網(wǎng)點(diǎn)分布不...

    cod7ce 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<