关于QQWry格式

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

关于QQwry格式

作者 cnss 2004-8-18

版权所有 转载请注明出处

http://blog.csdn.net/cnss

刚才通过RSS看到一篇关于QQwry格式的blog: http://blog.csdn.net/taft/archive/2004/08/18/77559.aspx

想不到QQwry还在用,这是俺两年前设计的,这个格式该被淘汰了.为什么这么说呢,因为它采用的是索引+二分查找来减小内存占用和提高查找速度的.

由于采用二分查找,所以IP数据要被分为最小的片,假设有A,B两条数据,B数据完全覆盖A数据,那么转换为QQwry后两条数据就变成了三条.如果原始数据非常有条理,就可以避免这个现象,不过这是不可能的,几万条数据会越来越乱,所以QQwry的尺寸会迅速增加,之所以增长的不是特别快,是因为格式对重复数据有一定压缩.

QQwry.dat:"咦?我没吃那么多,怎么胖的那么快!?"

有几点改进一下,就可以满足日后需要了:

1.搜索改成可分层搜索,并且转换文件时可以选择侧重文件大小还是搜索速度.

2.现在索引是24bit的,因此数据区不能超过16M.

3.加入收集人的签名.

那篇文章是作者猜测的格式,我再把原来整理的发一遍吧.0x2 0x0 0x0 0x0不是错误,可能是给御风而行放版权信息的地方.如要qqwry格式源代码可联系我.

-----------------------------------------------

新格式说明

主要分为数据区和索引区

★数据区元素:

存放IP信息中的:结束IP(4字节),国家(不定长),地区(不定长)

排列顺序:无要求

★索引区元素:

存放IP信息中的:起始IP(4字节),索引值(3字节)

排列顺序:起始IP按升序排列

★IP为4字节,如"255.0.0.0"表示为0xFF000000,存在文件中则为00 00 00 FF(字节序原因)

★索引值为该IP消息的<结束IP、国家、地区>在文件中的位置。指向<结束IP>

★ 如果结束IP后的字节为0x01,则说明该IP消息的<国家、地区>与前面的IP信息重复,这时0x01后面的3个字节为国家、地区字符串的偏移量。可以根据这三个字节去前面找国家、地区。

★如果国家的第一个字节为0x02,说明该国家串与前面的国家或地区串重复,0x02后面的三个字节为该串的偏移量,可以根据该偏移量找到前面的串。

★ 如果地区的第一个字节为0x02,说明该地区串与前面的国家或地区串重复,0x02后面的三个字节为该串的偏移量,可以根据该偏移量找到前面的串。

★ 有可能在出现0x01的情况下出现0x02,这时需要跳转两次查找国家、地区字符串。

★ 正常的字符串以NULL做结尾。

★ IP信息不允许有重复、覆盖

★ 使用索引是为了保证能以线性速度搜索

★ 新格式不允许为未知数据的IP消息,原格式中的未知数据已经都去掉了。如果有未知数据的IP信息,将大大增加文件长度。

文件的头4个字节是索引区第一个元素的偏移量,第二个4字节是索引区最后一个元素的偏移量。通过这两个偏移量,可以用二分法快速查找IP信息。如:一条IP信息是,要查询的IP为150

起始 结束 国家 地区

100 200 中国 北京

首先在索引区找到起始IP小于150的最后一个元素,通过索引,找到结束IP,如果150大于结束IP,说明是未知数据;如果150小于等于结束IP,则找到国家、地区。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航