24
Oct
October 24, 2011 分类: ASM/C/C++, PHP/MySQL     作者: hoverlees     留言: 5

最近有打算给博客做个统计插件,看看都是哪儿来的朋友在看我的博客儿,需要一个详细的IP地址归属地数据库。网上找了个纯真的MySQL版的,30多万条数据占了20M左右的数据库空间,觉得有点浪费数据库空间,而且数据库查询时间太慢,特别是要一次性查多个结果时,更是不得了.最主要的是这种应用场合不适合做成数据库形式的。

所以就准备自己做数据库了,自己也有50000亿条数据的数据文件的设计经验。这才30多万条没什么问题。。。按自己的想法生成了文件,并写了PHP和C语言的访问API,心情好的时候再补写上Java啊,汇编啊什么的API也是挺好的。

数据库下载:GBK版 UTF8版

PHP API(函数):这个是函数形式的PHP代码,博客版面上是写描述,具体代码在这里:ips.php ip_area.php

<?php
/**
 * IP地址归属地查询 PHP函数版
 * @author Hoverlees http://www.hoverlees.com me[at]hoverlees.com
 * @comment 此功能同时包含C/C++,PHP类,PHP函数,等版本提供下载。
 * 数据库文件及相关代码下载地址:http://www.hoverlees.com/blog/?p=906
 */

/*对象状态常量*/
define('IPV4_AREA_ERROR_SUCCESS',0); //正常
define('IPV4_AREA_ERROR_OPENFILE',-1); //无法打开文件
define('IPV4_AREA_ERROR_FORMAT',-2); //数据库格式不对

/**
 * IPv4地址转整数函数,注意本函数不检查IP地址的合法性
 * @param $ip IPv4地址
 * @return 转换后的整数
 */
function ipv4_atol($ip){}
/**
 * 创建IP表对象
 * @param $filename 数据库文件名
 * @param $index_read_parts 索引划分的块数,如果为1,表示索引全部读入内存(占用大约4M内存空间),如果为2则只需要占用4/2=2M内存临时空间。此值越大,需要的内存缓冲越少,但磁盘的IO次数增加。如果需要循环查询多个IP,建议此值设为1.如果只查询一次可以根据内存要求自行设定。
 * @return 用于查询的数据库对象,使用完成后请调用ipv4_area_free释放占用的资源
 */
function ipv4_area_create($filename,$index_read_parts=1){}
/**
 * IP址所在地查询
 * @param $obj 数据库对象
 * @param $ip IP地址,可以为'XXX.XXX.XXX.XXX'格式
 * @return 归属地名称
*/
function ipv4_area_search($obj,$ip){}
/**
 * 释放IP数据库
 * @param $object 由函数ipv4_area_create返回的表对象
 */
function ipv4_area_free($object){}
?>

代码调用示例:


查看详细内容 »

标签: , , ,
快速链接
推荐标签
最新图片
较新文章
随机推荐
友情链接