elasticsearch 大数据,elasticsearch 数据量
00-1010简介1。面试官:我看到你在简历中使用了ES。哪些场景用过es?2.面试官:用了ES之后结果如何?3.面试官:你对es的一些概念名称了解多少?如何理解索引、文档、倒排索引这些东西?关于es最重要的倒排索引摘要特性是使用场景摘要:
00-1010如果你的项目有几百亿以上的数据,而且数据的日增量很大,需要高性能检索,比如订单数据,你该怎么办?
作为面试官,你需要找一个能解决这个问题的人!作为应聘者,你应该如何回答面试官的问题?
你可以学习使用搜索引擎框架。Elasticsearch (ES)是一个很好的开源搜索引擎框架。我们可以把ES作为一个“数据库”。全球很多知名社区都使用es进行全文检索,比如Wikipedia、Stack Overflow、Github等。
ElasticSearch是开源的,基于lucene,是一个全搜索引擎,具有很强的扩展性、分布性和高可用性。它可以使用JSON格式通过RESTful简单地索引数据。
想一想,如果你做的是一个知识库系统,系统里有大量的文章,如果你想通过某个或关键词来搜索一篇文章的内容,如果你用MySQL来做这个,简单的通过like查询是无法满足的。全文搜索是对一篇文章进行索引,es可以根据单词的含义将内容分成单词,然后分别创建索引,比如“我想成为一个有抱负的程序员”,ES分词后是:“我”、“我要”、“励志”、“一”、“追求”、“程序员”。不管你根据哪个关键词搜索,都会得到这句话。
这样你就可以在不知道背后复杂逻辑的情况下完成搜索。Elasticsearch致力于隐藏分布式系统的复杂性。以下操作都是在底层自动完成的:
将您的文档划分到不同的容器或碎片中,这些容器或碎片可以存在于一个或多个节点中。将碎片均匀分布到各个节点,平衡索引和搜索的负载。根据ES支持全文索引的特点,我们还可以通过它来实现许多模糊搜索的功能。大批量多维度聚合也是ES的强项,比如Tmall.com,通过关键词搜索产品,进入iph后会自动加载所有与iphone相关的产品。这是一个典型的搜索引擎使用场景。
目录
00-1010问题分析:当有大量数据需要检索时,这个时候可以想到ES。传统关系数据库查询速度慢,数据库子表联合查询速度慢。
答:有这样一个需求场景,操作系统需要一个订单分析工具。那时候我们的订单基数总数已经远远超过了上亿的数据量,每天的增量都在百万。
系统初期主要使用MySQL查询订单,没有使用其他数据库。随着业务的发展,系统主要面临两个挑战:
随着数据的增加,MySQL数据库划分和表划分后的单个表的数据仍然增加到数千万的数据,查询越来越慢。查询中有大量的聚合操作,比如过滤计算异常订单总数、完成订单总数、计算订单金额等。Mysql不擅长用sql做大规模操作。为了解决以上两个问题,我用Elasticsearch完美的处理了查询慢的问题。我用ES作为主要查询数据源,MySQL作为降级记录。如果ES集群由于各种原因不可用,系统会自动将订单查询数据源切换到MySQL数据源。对于操作系统来说,虽然查询会变慢,但不会耽误正常使用,这种降级的概率很少发生。
系统架构图是这样的:(尽量给面试官看清楚这个图)
关注红色的盒子。我用ES作为首选订单查询源,MySQL作为备份数据源,中间加了自动降级开关。
引言
1、面试官:
A:使用ES后,查询速度当然大大提高。
使用MySQL时,99%的查询时间都是10s。该架构引入ES后,查询时间迅速降低到毫秒级。
我还在述职报告中保留了业绩监控图,为升职加薪打下坚实基础。
面试官一直点头,对我的操作表示认可。
我看你简历有写项目里有使用了ES,哪些场景用到了ES?
00-1010问题分析:有些人刚接触Elasticsearch的时候只用过,知道ES速度快,能装很多数据,但是面试官问了一点倒排索引就不知所措了。你怎么敢说你会用搜索引擎?
答:先说吧。
说ES中的 Index,Document,Type,以及对应MySQL数据库
索引(Index):
索引的概念相当于MySQL里数据库的概念,用ES创建一个索引就是创建一个库,比如电商系统里给订单创建一个订单的索引,那客服系统就可以通过订单索引快速查询订单所有信息快速处理客诉。
文档(Document):
ES属于文档型数据库,文档的概念就相当于MySQL里一条数据的概念,很多个文档(很多条数据)构成了一个索引。
类型(Type)
上面说文档的概念就相当于MySQL里一条数据的概念,MySQL里一条数据有很多个字段,比如订单号,用户手机号,订单金额等,Type 的概念相当于根据每个字段聚合所一张表,如根据订单号分组,按照手机号分组,这种分组就叫做 Type,它是虚拟的逻辑分组,用来过滤文档,无论根据哪个字段搜索都有对应的Type(表)。
如果还不明白,直接给你整理成表:ES VS Mysql
ElasticSearch关系型数据库:MySQL对应关系:索引库对应关系:类型type数据表对应关系:文档行对应关系:字段Field列
最重要的倒排索引
Tip:如果你使用过 Elasticsearch 不知道倒排索引的概念那恐怕有点说不过去,倒排索引也叫反向索引(Inverted Index)
(开始给面试官举例分析倒排索引,我可是货真价实做过功课的)
有这样三段话:
hello everyonethis article is based on inverted indexwhich is hashmap like data structure使用ES保存后结构如下:
hello (1, 1)everyone (1, 2)this (2, 1)article (2, 2)is (2, 3); (3, 2)based (2, 4)on (2, 5)inverted (2, 6)index (2, 7)which (3, 1)hashmap (3, 3)like (3, 4)data (3, 5)structure (3, 6)
hello 出现在第1句话第1个单词,所以是(1, 1) ,is (2, 3); (3, 2) 表示is出现在第2句第3个单词和第3句第2个单词,这样经过拆分后,每个关键词出现在哪句话哪个位置都一目了然,非常方便检索,这便是倒排索引的概念。试想一下,我们使用的百度或是谷歌检索,是不是这种数据结构更容易让我们找到你想要的所有内容,这便是倒排索引带给我们的便利之处,倒排索引允许快速全文搜索,但是在将文档添加到数据库时会增加处理成本
面试官:行了行了,我知道你理解了,时间有限咱先不聊这个了。
这才是面试理想效果,让面试官无话可说。
总结
如果你要做分布式的实时文件存储,每个字段都被索引并可被搜索;如果你要做实时分析搜索;如果你要处理PB级结构化或非结构化数据;这个时候请先想到使用搜索引擎。
关于 ES 的特性是使用场景概括:
大数据量聚合检索和排序,如计算用户订单总金额,订单数据等。自动补全,如搜索框通过关键字自动补全。高亮查询。关键字检索,模糊检索,拼音查询。记录系统后台日志,日志检索。
以上就是分布式难题ElasticSearch解决大数据量检索面试的详细内容,更多关于分布式ElasticSearch大数据量检索面试的资料请关注盛行IT其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。