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

二. 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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值