二. WHOIS库设计

根据WHOIS数据查询业务场景、响应性能等需求,该库采用Hbase + ES 技术组合设计,其中HBASE存储全量WHOIS数据,ES库作为查询索引库,只存储查询WHOIS数据时的索引项数据。当提交一条查询请求时,首先从ES库中利用索引检索出记录的唯一键【_id】,再使用该唯一键从Hbase中查询出全量数据。
HBASE库配置:同PDNS库设计中HBASE配置。
ES库配置:7服务器集群【与HBASE共用硬件服务器】,JDK版本1.8,单节点JVM堆内存固定为12G。

2.1 WHOIS数据业务字典及样例数据

2.1.1 业务字典
WHOIS业务字典见《whois数据说明.pdf》文档。
WHOIS原始数据为.CSV格式,第三方数据样例文件见whoisdemo.csv文件

2.1.2 数据规模
WHOIS第三方数据以CSV文本文件格式存储,经粗略统计,全量数据大小约180G,索引数据大小约80G,包含WHOIS记录约3亿4千万。

2.2 WHOIS查询需求说明

WHOIS数据查询需求简单描述为,根据约定的可查询业务字段项进行查询,查询时可根据多条件项进行逻辑匹配,需要支持等值匹配、模糊查询。无聚合查询、分组查询等复杂查询需求。

2.2.1 根据约定业务字段查询

查询输入:

查询输出:全量WHOIS记录,具体字段见《whois数据说明.pdf》

若查询项不能满足需求,后续可从全量数据中增加。

2.3 WHOIS表设计

2.3.1 whois_data_index索引表设计

ES中的索引数据表名为: whois_data_index。
id的格式为 : {domain}{reg_data}_{expir_data}
{domain}表示域名;
{reg_data}表示注册时间,格式为13位时间戳;
{expir_data}表示过期时间,格式为13位时间戳,且该字段不存在与ES查询字段中,该字段为WHOIS全量数据中的记录,需要在导入ES库时,写入_id。
number_of_shards:21
Replicas:0

建表脚本为:

PUT whois_data_index
{"settings":{"number_of_shards":21,"number_of_replicas":0},"mappings": {"doc": {"dynamic": "strict","properties": {"domain": {"type": "text"},"domain_status": {"type": "text"},"registrar": {"type": "text"},"reg_email": {"index": true,"type": "keyword"},"registrar_whois_server": {"type": "text"},"name_server": {"type": "text"},"reg_data": {"index": true,"type": "keyword"},"registrar_abuse_contact_email": {"index": true,"type": "keyword"},"reg_name": {"index": true,"type": "keyword"},"registrant_organization": {"index": true,"type": "keyword"},"registrant_city": {"index": true,"type": "keyword"},"registrant_state_province": {"index": true,"type": "keyword"},"reg_country": {"index": true,"type": "keyword"},"registrar_IANA_id": {"index": true,"type": "keyword"} }}}}

2.3.2 whois表设计

WHOIS原始数据表保存在HBASE中,建表脚本如下:
create ‘whois’,{NAME =>‘meta’,COMPRESSION => ‘SNAPPY’}
其中,列簇为 meta;具体列见《whois数据说明.pdf》
经数据导入后,列名对应的列会自动填充到列簇中。

2.3.3关于数据导入

对于ES索引库,需要开发导入程序将第三方原始WHOIS中索引数据导入。
对于HBASE库,需要开发导入程序将第三方原始WHOIS导入,在导入数据时,需要将对应列的数据填充到列族中。

2.4 REST API使用

2.4.1 ES REST API
利用POSTMAN工具,简单列举几种典型查询场景。

  • 分词器查询【对分词列使用match关键字查询】


输出:

  • 多条件查询【must、term、match混用】

输出:

2.4.2 HBASE REST API

HBASE表名为WHOIS, REST API同1.5.2

2.5 ES配置流程

  • 修改配置文件
    修改ES中配置文件,elasticsearch.yml和jvm.options

  • Linux下创建es用户
    useradd es

  • LINUX服务器修改内核参数
    vi /etc/security/limits.conf
    *soft nofile 65535
    *hard nofile 65535

  • 查看当前用户资源限制
    ulimit -a

  • 修改LINUX内核MMAP使用限制
    vi /etc/sysctl.conf
    vm.max_map_count=262144
    sysctl -p

  • ES节点启动
    su es
    cd /grid/elasticsearch-6.6.2/bin
    cd /opt/elasticsearch/elasticsearch-6.6.2/bin
    ./elasticsearch -d
    http://192.168.10.23:9200/_cat/health?v //验证集群状态

  • 启动KIBANA
    查看端口被进程占用
    netstat -lnp| grep 5601
    启动(192.168.10.21)
    cd /grid/kibana-6.6.3-166SNAPSHOT-linux-x86_64/bin
    ./kibana -q &
    exit

小记一次海量数据实时查询域名库设计(下)相关推荐

  1. 小记一次海量数据实时查询域名库设计(上)

    一.PDNS库设计 根据前期调研及技术选型,基于第三方外部PDNS数据,开发导入程序,完成构建基于Hadoop HBASE的PDNS实时数据查询系统,系统平台采用8台4U服务器组成Hadoop集群. ...

  2. PHP检查微信域名屏蔽接口,微信域名检测API接口,实时查询域名是否被微信拦截...

    微信域名检测API接口的应用场景: 由于微信对外部链接内容规范比较严格,所以可能一不小心就会被判定为是违反内容规范的,或被同行恶意举报投诉之类的. 那么此时就要用到微信域名检测接口,实时检测域名的状态 ...

  3. 微信域名检测 实时查询域名是否被微信拦截

    微信是我们生活中必不可少的社交工具,用户群体也相当大,所以就不乏大量的个人或团队利用微信进行推广,推广方式就是转发分享链接到个人或群,发朋友圈,或利用微信公众号,一心专注与营销和推广的商家,却忽略了微 ...

  4. 【巨杉访谈】分布式数据库如何实现海量数据实时查询

    巨杉数据库高访问量.海量数据业务背后的基础系统架构是如何设计和优化的?分布式数据库是如何做到数据的透明水平.垂直拆分,实现海量数据实时查询的? 访谈实录 1.巨杉数据库作为国内第一款自主研发的 New ...

  5. 微信域名拦截检测php,微信域名检测API接口,实时查询域名是否被微信拦截

    微信域名检测API接口的应用场景: 由于微信对外部链接内容规范比较严格,所以可能一不小心就会被判定为是违反内容规范的,或被同行恶意举报投诉之类的. 那么此时就要用到微信域名检测接口,实时检测域名的状态 ...

  6. 价格查询系统 数据库 PHP Mysql,信息实时查询系统的设计与实现(PHP+MySQL)

    摘  要 信息查询系统是基于校园网络环境下设计,满足师生员工对校内综合信息实时查询,及对校园网上各类信息资源的检索服务需求. 本系统采用了浏览器/服务器(B/S)模式.以MySQL数据库为存储方式,运 ...

  7. 基于HBase的海量数据实时查询系统设计与实现

    点击打开链接 http://www.doc88.com/p-7445439907872.html

  8. 网址域名查询-域名注册查询工具

    域名查找软件 域名查找软件是一种能够帮助用户快速查询域名相关信息的工具.它通常提供了批量域名查询和实时域名查询服务,能够帮助用户查询域名的注册信息.到期时间.所有者信息.域名服务器等多种相关信息.以下 ...

  9. 【演讲实录】分布式数据库海量数据存储和实时查询实现与应用

    节选自OSC深圳源创会 演讲速记 分享嘉宾:巨杉数据库技术总监   乔国治 巨杉数据库,核心产品是SequoiaDB巨杉数据库.是我们的团队完全从零开始研发的.巨杉数据库是商业数据库,同时我们本身也将 ...

最新文章

  1. thrift - C#(CSharp)客户端连接池(ConnectionPool)
  2. oracle sql练习_数据分析之学习SQL
  3. 以太坊DAPP[2]-×××-react框架与web3实例
  4. MapReduce Java API实例-排序
  5. 框架复习笔记-Java-案例:牛客网讨论社区
  6. Ubuntu 安装 Qt 开发环境(转)
  7. python \uxxxx转中文,Python列表中的字典 \uxxxx转中文,
  8. socket多人聊天程序C语言版(二)
  9. Adobe Flash Player30.0.0.113离线安装包
  10. mysql 数据库数据恢复 库被删了怎么恢复数据库
  11. JQuery22( JQ原理 Clone)
  12. 一卡通管理系统数据库服务器连接失败,智能一卡通管理系统数据库服务器连接失败...
  13. css实现白光划过效果
  14. 进化算法——反向学习
  15. matlab数据接口技术,Matlab与Pspice的数据接口技术
  16. java dispatcher详解_Java Web开发详解:RequestDispatcher接口
  17. 通过Python脚本创建ArcGIS地图服务缓存
  18. 争夺切客【南方周末】
  19. Arch 安装Nginx
  20. 清华某博士的退学申请【转】

热门文章

  1. 个人总结:程序员实用网址收藏
  2. TensorFlow实现word2vec 详细代码解释
  3. 怎样区别交换机、路由器和猫
  4. 深入浅出TCP/IP协议栈
  5. 计算机名人榜----- 阿兰·麦席森·图灵
  6. urx驱动ur3和onrobot rg2
  7. 2017 ACM-ICPC EC-Final 记录
  8. 金色传说:SAP-BC-RZ10/RZ11:经典常用参数
  9. 【荐读】我观察14年才发现,那些很努力却没成就的人都有一个特点
  10. win10如何设置文件的默认打开方式