浏览 3570 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-01-20
最后修改:2010-01-21
最近几个项目都用到了IP到城市转换功能。 之前,每个项目都是直接在纯真IP库里查。 可是现在数据量大了,越来越发现效率成问题了。 前一阵子看到豆瓣的开源项目BeansDB,当时直觉就告诉我,这东西非常有用。 抽空在测试机上搭建了一下环境,测试了一小把,感觉速度提高了很多。 立马把IP转换部分代码改成里基于BeansDB的。转换之后的架构如左图。 流程如下: 以IP为Key,在BeansDB中取值。 若第一步返回不为空,直接返回取回的值,流程结束。 若第一步返回为空,则以QQWry为Key,取回QQWry.Dat文件的二进制文件 按传统方法在第三步取回的QQWry.Dat二进制文件中查找IP对应地址信息 将第四步查找到的地址信息,以IP为Key,存进BeansDB中,并返回第四步查找的地址信息。 看着挺复杂,实际的代码改动非常之小。 继承原来IP转换类 重载初始化函数,以QQWry为Key在BeanDB中取值,若返回值不为空,则self.img置为返回值;若为空,将QQWry.Dat读到内存,以QQWry为Key,QQWry.Dat的二进制镜像为Value存到BeansDB中。 重载IP查找函数,按上面的逻辑处理IP查询。 从一个应用中依次取十万条记录,取五次,IP转换的耗时(不包括数据操作的时间)如下: 0:00:09.034996 0:00:07.834779 0:00:07.965700 0:00:08.016297 0:00:07.976602 另:写文章的同时,又做了一个100W条数据的转换测试,结果:0:01:45.109918 BeansDB只有一台机器提供服务,跟应用跑在同一台机器上。 这个结果目前来说还是比较满意的,应该还有继续优化的空间 但这已证明了BeansDB性能还是非常可观的。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-11-13
方法不错, 用memcached这样做应该也可行。
|
|
返回顶楼 | |