由于我们的某位客户工作非常繁忙,所以希望我们出一个样本报告,初步以国家级别的就可以,来证明一下我们和同行数据的情况,以便他和他的同事和领导进行质量方面的评估。当然,他们后期也会基于自身的需求进行相关数据的采集和评估,比如他们比较关心的国家。

这个需求挺多客户都有的。

所以我抽了一点时间做了这个事情,既然做了,正好也可以公开出来吧。并且顺带优化了一下我们自己的 IPDB 数据库的 PHP 读取代码。还是要吐槽一下同行的执行效率,实在是太差了。

测试数据情况如下:

原始数据取自我们香港专门用于延迟监测用途的节点数据,监测数据跨度大概是在 10 天左右,原始数据一共 89100048 个。只保留 14ms 以下的数据,过滤后的结果是 2105716 个。

根据我们的经验,我们认为从香港节点为中心点,RTT 延迟为 14ms 以内的 IP,理论上都应该也只会包括中国大陆以及港澳台地区的地区(延迟超过 14ms 就有可能到达菲律宾北部的网络路径直连香港的 IP 了),而凡是不属于中国的 IP 的标注,都可以认为是错误的,没有例外。因为监测数据有自身的检测周期,所以有一定量的小数量看似错误的标注,其中也包括一些卫星网络地面站的 IP,不一定算是真的错误。

跑完的结果如下:

同行 MXXXXXX 的数据情况,执行耗时 1800 秒左右:
美国 => 912112
中国 => 577123
其它 => 189564
南非 => 161373
新加坡 => 123502
塞舌尔 => 83055
毛里求斯 => 10374
荷兰 => 5817
英国 => 4938
伊朗 => 4712
澳大利亚 => 3208
加拿大 => 2914
德国 => 2796
俄罗斯联邦 => 2186
韩国 => 1981
英属维尔京群岛 => 1977
马来西亚 => 1636
日本 => 1438
塞浦路斯 => 1360
伯利兹 => 1202
捷克 => 1160
印度 => 1134
罗马尼亚 => 1000
爱尔兰 => 975
乌克兰 => 948
瑞士 => 650
法国 => 628
波兰 => 556
保加利亚 => 536
卢森堡 => 535
奥地利 => 528
亚美尼亚 => 523
库拉索 => 517
瑞典 => 355
哈萨克斯坦 => 283
丹麦 => 282
西班牙 => 274
爱沙尼亚 => 170
印度尼西亚 => 150
以色列 => 140
智利 => 138
直布罗陀 => 136
柬埔寨 => 126
菲律宾 => 98
阿联酋 => 90
越南 => 88
沙特阿拉伯 => 64
挪威 => 51
葡萄牙 => 34
芬兰 => 32
新西兰 => 31
泰国 => 29
意大利 => 29
蒙古 => 28
瓦努阿图 => 26
比利时 => 21
格鲁吉亚 => 19
孟加拉国 => 18
伊拉克 => 14
摩尔多瓦 => 11
斯洛文尼亚 => 9
肯尼亚 => 3
老挝 => 2
巴西 => 2
关岛 => 2
文莱 => 1
立陶宛 => 1
墨西哥 => 1

备注:其中的“其它”数据项为标注国家为空的情况。

另一个同行 IP2XXXXXXXX 的数据情况,执行耗时 135 秒左右(内存缓存模式 30 秒左右):
中国 => 1137247
美国 => 864954
南非 => 18816
比利时 => 10274
荷兰 => 9058
英国 => 7284
日本 => 7094
新加坡 => 6044
德国 => 4880
韩国 => 4810
加拿大 => 4518
伊朗 => 4157
巴西 => 2575
澳大利亚 => 2541
俄罗斯 => 2495
芬兰 => 2441
伯利兹 => 2256
印度 => 1641
波兰 => 1542
塞浦路斯 => 1360
印度尼西亚 => 1167
英属维尔京群岛 => 1113
瑞士 => 1091
马来西亚 => 1014
爱尔兰 => 892
乌克兰 => 557
塞舌尔 => 477
法国 => 437
瑞典 => 351
柬埔寨 => 294
西班牙 => 285
哈萨克斯坦 => 283
保加利亚 => 263
丹麦 => 256
菲律宾 => 156
爱沙尼亚 => 153
卢森堡 => 144
捷克 => 124
马耳他 => 123
奥地利 => 122
越南 => 114
阿联酋 => 95
泰国 => 55
挪威 => 34
新西兰 => 33
蒙古 => 21
马恩岛 => 19
伊拉克 => 14
泽西岛 => 12
斯洛文尼亚 => 9
关岛 => 6
意大利 => 4
以色列 => 2
老挝 => 2
孟加拉 => 2
土库曼斯坦 => 1
文莱 => 1
埃及 => 1
墨西哥 => 1
阿富汗 => 1

接着是我们 IPIP 的数据情况,执行耗时 90 秒左右(内存缓存模式 15 秒左右):
中国 => 1303057
其它 => 797837
亚太地区 => 3810
美国 => 355
俄罗斯 => 290
欧洲地区 => 139
日本 => 134
新加坡 => 29
菲律宾 => 14
泰国 => 6
蒙古 => 5
英国 => 5
巴西 => 5
柬埔寨 => 5
关岛 => 5
智利 => 4
爱尔兰 => 3
西班牙 => 2
老挝 => 2
瑞士 => 2
印度 => 1
土耳其 => 1
德国 => 1
法国 => 1
南非 => 1
孟加拉 => 1
阿富汗 => 1

备注:其中的“其它”数据为实际标注为 ANYCAST (也就是大家常看到的域名标注)以及各种骨干网络的情况,数量上以 ANYCAST 情况为主。

另外,我的朋友看过文章预览之后,强烈建议我加上纯真的测试,我想想也是,毕竟前几天我在朋友圈吐槽了某技术人员的言论,如下图:

而且等着跑 MXXXXXX 的数据的时间实在是无聊,那就写出来试试呗。

跑完了就发现自己忘记了最早为什么要自己做数据时想避开的那个坑了,地理位置标注很随意,结果是这样的:

所以就不给出具体结果了,大家看图片参考一下就好了。

出一个比较直观的结论:同样的数据源,MXXXXXX 只标注了 57 万个 IP 到中国,IP2XXXXXXXX 标注了 113 万个,而我们标注了 130 万个。而错误量最大的美国标注,MXXXXXX 标注了 91 万个,IP2XXXXXXXX 标注了 86 万个,而我们只有相差数量级的 355 个。其它的都算是小问题了。

我们只用了八年时间,做到了别人二十年都没有做到的事情。

至于数据错误带来的影响嘛,请参考一句话,冤假错案,是加倍的错误,冤枉了好人,放过了坏人。我想在这里也同样适用。

至于很多人心心念念的性价比问题,请邮件咨询他们的 Commercial Use 的价格。要明白,质量层面的每个百分比的提高,成本很大可能是指数级增长的,更何况并不是有人有钱就一定能做到的。。。

还要说,这只是一个以香港数据为中心的例子,实际上,我们全球监测网络里能看到的所有区域,问题都是类似的,只能说,不用心的话,在哪里都不用心。

最终,数据的质量,要靠踏踏实实的想办法解决问题,而且是长期的解决问题,而不是靠好看的 ppt 和嘴炮般的销售驱动。

反正如果我是数据采购方,我只会买对的哪怕是贵的,而不会买质量差虽然看着便宜的。

为了避免杠精,说我们也有问题,把上面的一段话再重复一次!因为监测数据有自身的检测周期,所以有一定量的小数量看似错误的标注,其中也包括一些卫星网络地面站的 IP,不一定算是真的错误。

欢迎有价值的探讨,有兴趣的请留言给我。

统一说明:

1、四个 IP 数据库都是最新版本。两个同行的都是官方代码。

2、国内其它同行我们没有数据,所以对这个有兴趣做对比的可以找我索取原始数据自行对比。

3、执行时间由 PHP 在 WINDOWS10 命令行下执行,版本 8.1.0 RC3,CPU 为 Intel Xeon W-10855M。

4、我们的 IPDB 数据库的 PHP 读取代码新版本会支持内存缓存模式,比我们自己现有默认的文件读取方式快 6 倍,即将发布。当然这个模式应该只适用于命令行方式,但是速度快了,总是可以帮助大家节省时间,提高效率,我花点时间优化一下也是值得的。至于比同行快多少倍,各位可以自己心算一下。

首次!让我们出一个基于延迟的同行 IP 库数据评估来打个样~相关推荐

  1. 如何开发一个基于 Vue 的 ui 组件库

    如何开发一个基于 Vue 的 ui 组件库 开发模式 预览 demo 在开发一个 ui 组件库时,肯定需要一边预览 demo,一边修改代码. 常见的解决方案是像开发一般项目一样使用 webpack-d ...

  2. yue-library是一个基于SpringBoot封装的基础库

    yue-library是一个基于SpringBoot封装的基础库

  3. Gio.js -- 一个基于 Three.js 的 Web3D 地球数据可视化库(一)

    Gio.js 开始使用 安装 使用 基础元素 简介 表面 国家 连接线 背景 光晕 海洋 性能监控 配置 通过构造函数配置 通过API配置 配置参数表 功能设计型API 设置初始国家 高亮被提及国家 ...

  4. Gio.js -- 一个基于 Three.js 的 Web3D 地球数据可视化库(二)

    Gio,js 颜色风格类API 设置输出颜色 设置输入颜色 设置光晕颜色 设置背景颜色 设置海洋亮度 设置相关国家亮度 设置被提到国家亮度 数据 添加数据 清除数据 切换数据集 输入数据到洲 异步添加 ...

  5. [开源] Gio.js -- 一个基于 Three.js 的 Web3D 地球数据可视化库

    在这里和大家分享一个和小伙伴们一起开发的开源库 Gio.js .Gio.js 是一个基于 Three.js 的 web 3D 地球数据可视化的开源组件库.使用 Gio.js 的网页应用开发者,可以快速 ...

  6. python 文字识别 准确率_关于OCR图片文本检测、推荐一个 基于深度学习的Python 库!...

    大家好,我是 zeroing~ 1,前言 之前谈到图片文本 OCR 识别时,写过一篇文章介绍了一个 Python 包 pytesseract ,具体内容可参考 介绍一个Python 包 ,几行代码可实 ...

  7. 推荐一个基于vue选择头像的库

    前言 这个库叫 vue-select-avatar,为什么推荐这个库呢,正常在一个网站更换头像,大部分都是点击选择头像按钮或是点击头像位置,然后出来一个对话框,或者直接就直接弹出文件管理器页面,让你选 ...

  8. 如何用开源组件“攒”出一个大数据建模平台?

    写在前面:博主是一只经过实战开发历练后投身培训事业的"小山猪",昵称取自动画片<狮子王>中的"彭彭",总是以乐观.积极的心态对待周边的事物.本人的技 ...

  9. 使用webpack4搭建一个基于Vue的组件库

    组内负责的几个项目都有一些一样的公共组件,所以就着手搭建了个公共组件开发脚手架,第一次开发 library,所以是参考着 iview 的配置来搭建的.记录如何使用webpack4搭建一个library ...

  10. redis缓存原理与实现_基于Redis实现范围查询的IP库缓存设计方案

    点击上方"码农沉思录"  发现更多精彩我先说下结果.我现在还不敢放线上去测,这是本地测的数据,我4g内存的电脑本地开redis,一次都没写完过全部数据,都是写一半后不是redis挂 ...

最新文章

  1. 他保送北大、读完博士选择回中学任教,“做科研太枯燥,自己更适合教书”...
  2. server 2008 mysql 报错 0xc000007b_docker插件部署项目,volumes报错invalid volume specification...
  3. C++大师Lippman:我对中国程序员的忠告
  4. GeoServer简介、下载、配置启动、发布shapefile全流程(图文实践)
  5. java类名变量_java类名操作变量方法
  6. sklearn自学指南(part17)--稳健回归-异常值和建模误差
  7. XCoreRedux框架:Android UI组件化与Redux实践
  8. STL标准模版库---set操作
  9. layui radio 赋初始值
  10. 第十周项目2——二叉树的便利的递归算法
  11. python抢票脚本github_春运买不到票?程序员喊你来GitHub上用抢票神器!
  12. 茶叶蛋大冒险全部攻略
  13. 物流管理APP软件开发公司 让货运变得更简单
  14. 《深入理解Linux内核》-3.3. 进程切换
  15. [4G5G基础学习]:流程 - 4G LTE PLMN选择、扫频、小区搜索、系统消息读取、小区选择过程
  16. 目前常见的大数据分析软件有哪些?
  17. CentOS 6 安装配置教程【完整版】
  18. php 取消warning,php怎么关闭warning提示
  19. c语言添加输入函数吗,C语言scanf()函数下支持中文输入吗?
  20. mac下编译android下libaac,Mac 下编译SOX for android (.a静态库)

热门文章

  1. windows10 输入法繁体
  2. mybatis3-中文文档
  3. 体验重构版的可道云Kodbox
  4. Vue中使用Bscroll @click无法执行的问题
  5. DSP-F28335与AD7606的并行模式调试问题
  6. 单片机C语言编程实例分析详解,单片机C语言编程的八个基本规则解析
  7. 【模拟电路知识】运算放大器没有反馈电路——做电压比较器应用
  8. 32位微型计算机原理接口,32位微机原理及接口技术
  9. ID7S625高压逆变器驱动芯片
  10. 离散数学考点之度序列简单图化