网络拓扑距离的高效KNN查询(结项报告)

下面,对最近两个月的工作做个完整的总结。

首先,介绍下项目内容以及我们最终实现的结果。项目内容是完成对用户IP-Geo-ISP等信息的索引,以腾讯提供的更详细IP库的部分数据,千万级别用户,在上面进行KNN查找的效率不低于单机100QPS。我们最终使用自适应格子算法完成了对用户信息的编码,并分别使用随机数据和真实数据对算法效率进行了测试。对于生成的千万级别的随机数据,查询效率为4000QPS;对于通过百度地图API查询到的25万真实数据,查询效率为1000QPS。效率远远超过项目所预期达到的效率。

图一

接下来,对自适应格子算法进行详细的介绍。如上图一所示,假设我们的编码长度为3,第三层中格子的总数就是4^3=64。对于每个点,根据它的经纬度,都可以编码成一个长度为3的字符串。上图Level3是第三层中每个块对应的编码。一共64个块,我们在编程时就需要建立64个vector分别保存对应块中的点。同时,建立一个深度为三的字典树,这个字典树记录各个Level中,每个格子中点的总数。在查询时,输入一个IP,我们根据这个IP的经纬度可以编码出它所属于的格子,比如属于000这个格子。通过字典树以及要查询的K的大小,我们可以知道该使用哪个level大小的格子合适,这样就可以控制中间结果集中点的数量了。

通过测试,我们发现使用真实数据的效率是不如随机数据的。产生这个现象的原因是真实数据的重合点太多。这样,不管使用什么级别的格子,格子中的点数量都是那么多。针对这种现象,我们在搜索中间结果集时,可以记录下与要查询点重合的点的数量,如果这个数量是大于K的,我们可以随机的从中输出K个重合点即可。

至于经纬度编码成字符串的方法,我们是使用geohash的编码方式。

最后,说说项目未来可能优化的余地。

查询时,对于当前格子,我们需要找到周围的8个格子,我们目前找格子的方法是根据编码规律使用递归的方法进行查找的。查找的结果,是可以保存在字典树中的,这样下次再查找这个格子周围8个格子时,就可以直接从字典树中输出结果了。(目前的程序没有进行这步优化。假设编码长度为10,查找周围8个格子运算次数大概为百次;如果使用字典树对结果进行保存的话,运算次数大概为十次。不过,在时间复杂度较低、空间复杂度高的情况下,是否有必要再进行空间换时间呢?)。

网络拓扑距离的高效KNN查询(结项报告)相关推荐

  1. 电商小学期 - 智能家居网站结项报告

    前言: 「  Design & Build 」 三个专业三个方向,共同完成一个项目,分别为: 物联网   数据库的搭建及管理员相关 电管      硬件设施的实现 电商      用户方面的前 ...

  2. 使用matlab建立Kd-tree并进行k-NN查询

    文章中关于搜索算法的实现部分貌似有些问题,后面有一篇文章重新写了一遍关于kd-tree的内容,欢迎参阅,这篇文章的错误目前没有修正. 使用matlab对输入数据建立Kd-tree并通过Kd-tree进 ...

  3. 虚商烦恼多?不在怕的!你距离享受高效虚商控制台只差一步的距离

    摘要: 虚商烦恼多?不在怕的!你距离享受高效虚商控制台只差一步的距离 虚商自助服务平台 vco.console.aliyun.com/ 原文链接 本文为云栖社区原创内容,未经允许不得转载

  4. 项目管理系统、工作台、经营看板、质量管理、合同管理、合同审核、新建合同、分包商管理、立项审批、创建项目、项目模板、项目统计、计划管理、结项申请、审批流程、审批记录、审批状态、参数设置、axure原型

    项目管理系统.工作台.经营看板.质量管理.合同管理.合同审核.新建合同.分包商管理.立项审批.创建项目.项目模板.项目统计.计划管理.结项申请.审批流程.审批记录.审批状态.参数设置.axure原型 ...

  5. 米公益完结项目结项反馈——环保梦想,你我一同点亮

    米公益完结项目结项反馈--环保梦想,你我一同点亮 项目简介: 当雾霾从一个城市不能呼吸的痛,演变为席卷半个中国的沉重,每个人唯有行动,才能改变.在中国即将迎来的第六个地球一小时,WWF发起" ...

  6. SAP ABAP 查询结构树(TTREE)

    SAP ABAP 查询结构树(TTREE) 引言: 在 SAP 的 TTREE 表中存在很多结构类型,对应了多种结构树的应用,如菜单.配置树等.这篇文章通过 ALV 报表的方式,可以方便的查询所有结构 ...

  7. 【Raspberry Pi 3试用体验】搭建minidlna服务器(结项二

    传送门:[Raspberry Pi 3试用体验]搭建Samba服务器(结项一) http://bbs.elecfans.com/jishu_900387_1_1.html [Raspberry Pi ...

  8. 现金贷、信用贷、消费贷小贷系统后台、现金贷、消费贷、信用贷、助学贷、旅游贷、装修贷、准入授信 、贷款申请、产品授信、合同管理、放款审批、放款登记、还款管理、贷后检查、贷后预警、贷款结项、Axure原型

    现金贷.信用贷.消费贷小贷系统后台.现金贷.消费贷.信用贷.助学贷.旅游贷.装修贷.准入授信 .贷款申请.产品授信.合同管理.放款审批.放款登记.还款管理.贷后检查.贷后预警.贷款结项. Axure原 ...

  9. 现金贷、信用贷、消费贷小贷系统后台、消费贷、助学贷、旅游贷、装修贷、准入授信 、贷款申请、产品授信、合同管理、放款审批、放款登记、还款管理、贷后检查、贷后预警、贷款结项、催收、逾期、还款、放款台账

    现金贷.信用贷.消费贷小贷系统后台.现金贷.消费贷.信用贷.助学贷.旅游贷.装修贷.准入授信 .贷款申请.产品授信.合同管理.放款审批.放款登记.还款管理.贷后检查.贷后预警.贷款结项.催收.逾期 A ...

最新文章

  1. 多平台、高颜值的网易云第三方播放器
  2. python3 如何让字典保持有序
  3. python能做什么项目好-python能做什么项目
  4. linux cron读哪个文件,linux crontab 文件位置和日志位置
  5. L - Clock Master Gym - 102798L
  6. 韩顺平php视频笔记71 面向对象编程的三大特征2 访问修饰符 继承
  7. 【MySQL】MySQL 一些 使用 案例
  8. 复制粘贴不连续单元格_表格筛选状态下怎么复制粘贴数据
  9. Docker学习总结(50)——Docker 微服务优雅关闭
  10. 怎么解决VMware“该虚拟机似乎正在使用中”问题
  11. 【转】高并发情况下的单例模式
  12. ❤️大佬都在学什么?Python爬虫分析C站大佬收藏夹,跟着大佬一起学, 你就是下一个大佬❤️!
  13. 【AMAD】django-compressor -- 将JS和CSS文件压缩为一个缓存文件
  14. 小米摄像头有onvif协议_小米红米5Plus、小米红米Note7、vivoY3对比
  15. swiper滑动时每页都有动画
  16. 阿里云ECS服务器修复漏洞
  17. [ctf.show.reverse] 月饼杯 re1_西北望乡、re2_归心、re3_若无月
  18. 水平仪算公式计算机,水准仪的使用及计算方法
  19. coxphfit+matlab,计算Cox比例风险模型的coxph和cph函数有什么区别?
  20. WOS(SCI)爬虫:风车WOS下载器

热门文章

  1. PointNet和PointNet++论文解读
  2. SCTF2021 pwn Christmas Song 出题思路+预期解
  3. 飞鱼星方案助山东小城印象实现微信营销
  4. 电脑qq怎么设置远程桌面连接到服务器,QQ远程协助在哪个位置 qq远程协助如何使用...
  5. 哪些外贸软件比较好用?常用外贸软件有哪些?
  6. 计算机里没有摄像这个程序,win7系统没有摄像头不能视频的几种原因和解决方法...
  7. Oracle DataGuard介绍
  8. 什么是HSS?HSS有什么主要功能?HSS与HLR的区别是什么
  9. [STC系列单片机/51单片机]软件延时计算方法详解
  10. 无桥PFC的家族推演