• IP快速查找数据库


    最近一段时间,在研究PHP的共享内存。于是,我想尝试一下共享内存和普通文件相比,能提高多少的性能。本来想简单的把纯真IP数据库导入到共享内存然后查询。

    但是,后来发现这个数据库设计过于复杂,查询IP速度非常的慢,于是我对这个数据库的结构重新进行了设计。

    头部:4 * 4 个字节。就记录一个总数

    //总数|0|0|0

    索引区: (区域ID的格式:前 24 个bit是区域在文件中的的offset,后8个bit是长度,这样区域的名称长度不能超过255个字节)
    //start|end|区域ID1|区域ID2
    //start|end|区域ID1|区域ID2
    数据区:简单的把所有区域的名称写在这块区域(过滤掉重复的数据)

    //string1|string2|string3|string4...

    这样简单化了查找:首先是读取总数,然后确定二分查找区域。查找到数据后,根据区域ID读取区域信息。

    最后,经过测试,

    纯真IP的原版查找速度是 1504个/s

    改进IP查询文件版本查找速度是 3977 个/s

    共享内存版本的查找速度是 6325个/s

    因为涉及的文件太多,我不直接在这里拷贝代码,大家去google code 上去下载。

     

    http://code.google.com/p/quickip

     

    [

    这个项目的开发计划:

    0.5 版:发布一个PHP扩展,更加快速的查找IP,目前的速度是每秒 44万次查询。(目前已经开发完成,但是要做兼容linux 和 相关的文档工作)

    1.0 版:发布查询的时候,分离:国家 省 市 区 详细地区 五个部分。(目前省份已经完成,但是市,和 区 还没有处理)

    后面的版本现在没有计划。

    ]

     

    运行:

    先 运行:qqwry_tool/build_csv.php ,从纯真IP导出数据

    然后 运行 :test/bulid_index.php,创建数据和索引

    如果要测试 shmop 请先安装shmop这个PHP扩展,然后运行: shmop/shmop.create.php

    接下来运行测试文件: test/ip_find.test.php test/ip_find_qqwry.php

    原版的PHP版本的纯真IP有bug,导致不能完整的导出区域2. 我这里没有做修改,

    所以data 目录下面生成的测试结果的区域2,可能会不一致。

     

     注意:

    qqwry  这个文件夹 是纯真IP的代码。不是本人写的。要符合纯真IP 的licence。

  • 相关阅读:
    Microsoft .NET Framework 以及 CLR 的版本
    如何:备份 Team Foundation Server
    通过VS2008SP1 访问TFS2010
    Project 2007 Understanding Project's Percent Complete vs. Percent Work Complete
    TFS:从单服务器部署移到双服务器部署
    C#网络编程(基本概念和操作) Part.1
    图解Windows server 2012故障转移群集的安装、建立
    产品经理经验总结
    TCP同步与异步及阻塞模式,多线程+阻塞模式,非阻塞模式简单介绍
    Windows Phone开发概论
  • 原文地址:https://www.cnblogs.com/niniwzw/p/1974208.html
Copyright © 2020-2023  润新知