百亿数据入库elasticsearch生产实践(二)

一、前言

    之所以有本文,可翻阅下我的上一篇文章《百亿数据入库mongodb生产实践》

    前情回顾,hive中有三个具有关联关系的表,依次是一对多的关系,当前历史数据总量在500亿左右,每日增量依次是百万、千万、亿级的体量。其中,这500亿数据只是一个领域,还有另一个块更大领域的数据第三层日增量在10~25亿之间,这块还没来得及去啃。这一块数据,需要对多个业务部门提供数据服务,主要是数据聚合处理和历史明细查询。明细查询这一块由于查询条件、范围的不确定性,需要构建一个层级的全量表提供快速检索查询。在mongo的实践中,我们的瓶颈主要是海量数据高频次的update操作,导致mongodb承受不了这个压力。这次我们改用elasticsearch。yes, for search!

 

二、elasticsearch初遇

     2.1 在了解elasticsearch之前,我们需要先了解下下面几点概念。

    全文检索:一种将文件中所有文本与检索项匹配的检索方法。它可以根据需要获得全文中有关章、节、段、句、词等信息。计算机程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时根据建立的索引查找,类似于通过字典的检索字表查字的过程。经过几年的发展,全文检索从最初的字符串匹配程序已经演进到能对超大文本、语音、图像、活动影像等非结构化数据进行综合管理的大型软件。

    全文检索与数据库like查询的区别:数据查询通常的做法是是通过数据库模糊匹配即Like '%keyword%'的方式,这种方式是对全表进行顺序扫描,适合应用在数据量较小的结构化数据上。如果数据量很大,则查询效率将非常耗时。而全文检索主要就是面向海量数据的查询,并且数据源不限于结构化的数据,对于非结构化的数据依然很有效。

    lucene:最初是由Doug cutting,没错,就是那个开发出hadoop的人。lucene是apache下的一个开源全文检索引擎工具包,提供了完整的查询引擎和索引引擎。它提供了文档索引查询和存储等多种api,可供开发人员整合到wen项目、搜索引擎等多种应用场景中。

    lucene主要包结构:


    lucene索引的原理:基于倒排索引来实现,主要包含两部分--词典和倒排表。

    假如现在有一篇文章,一般我们可能会考虑这篇文章里头包含了哪些词哪些关键字。而倒排索引则是反着推,有一个关键词,它是在文中哪个位置,出现的次数是多少。然后词(term)的的集合就形成了词典,而记录词的位置和频率的信息就是一个倒排链表。如果我们需要索引一篇文章用于后面的关键词检索,我们需要先对文章进行分词,形成如图左边的单个单词,在倒排表里记录在文中出现的位置,和次数。所有词(term)处理完后,会对词典进行排序去重,相应的记录词频的倒排表也会进行整合得到所有的出现位置和一个总频次。以上是一个简单的理解,想深入理解下lucene的索引原理,可以参考一下这篇关于lucene底层原理的博文。


    2.2 elsticsearch

    一系列铺垫之后,我们了解了全文检索的概念和lucene索引的原理。那elasticsearch是什么呢?其实主要是基于lucene的一个搜索服务器,是一个分布式的检索引擎,对lucene进行进一步的封装和更能增强。elasticsearch提供了一个对海量数据检索的解决方案,大大降低了使用门槛。

    使用elasticsearch首先要先创建一个索引,索引类似于数据库,可以向索引中写入数据和读取数据。一个索引可以包含多种类型,每种类型可以建议不同的文档mapping。es还支持分片处理,用于数据负载均衡和分布式查询。这里的每一个分片其实就是一个lucene索引,如果查询时能带着路由条件查询将精准命中对应分片,减少无关分片的扫描,大大提供查询效率和减少查询性能消耗。更多关于索引、类型、映射、分片、副本等详细信息描述更参考这篇博文

    2.3 elsticsearch使用

    2.3.1 安装

    参考官方文档进行安装:https://www.elastic.co/guide/en/elasticsearch/reference/5.4/gs-installation.html

    我这里选择的是5.3.0版的tar包方式安装,使用默认配置启动单节点,正常启动如下:

    

    安装并启动kibana用于界面化操作,配置参数主要更改监听elasticsearch的http服务端口:


    启动后可选择 dev tools选项,在console进行dsl操作。

    

        elasticsearch提供的操作api很丰富,常用的主要有操作文档的document api、查询 api、操作索引的api、查询常规配置和信息的api和集群状态管理的api。

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值