在开源技术栈,我该如何对大数据查询引擎做选型?雷达简图揭答案

在开源技术栈,我该如何对大数据查询引擎做选型?雷达简图揭答案

上次聊的是开源大数据存储引擎,数据既然存储了就要使用,因此查询与分析就是面向业务应用的能力呈现。

伴随着开源软件的深化发展,今天的查询系统如果仅支持SQL引擎那就太OUT了,因为数据的膨胀、查询的复杂度、查询响应时间、系统访问并发量等诸多因素,致使我们在查询引擎的技术选型上必须长远考虑,构建一个能够支撑混合查询负载的生态环境是必须的。


举个例子——用户标签、用户特征库

移动互联网时代,不论互联网公司还是传统企业,都将用户作为企业最为宝贵的资产。这里面一方面是捕获流量、拉新,甭管什么渠道来,只要用户注册或活跃即可,用户数量的多少从某种层面上决定了这个企业的价值。另一方面就是洞察用户的行为偏好,了解用户特征,既包括粗粒度的“爱购物、爱电影、爱吃”,也包括细粒度的“爱LV、爱美剧、爱中餐”,所以后者就是这个场景中所谈到的——标签库。

标签库是一个非常典型的贯穿业务流程的场景,首先要基于各域数据源(客户管理系统、产品订购系统、渠道管理系统、运营服务系统等)从企业生产系统中采集并捕获数据,然后结合标签规则去处理、建模,作业涉及到指标的计算,最终形成各类标签。当然还要考虑标签的存储,涉及到存储方式、存储类型、存储结构,这是存储引擎要考虑的事情。最重要的是后续,业务人员要根据业务需求去使用标签、定位标签信息,这个过程就涉及到标签数据的查询,这是典型的查询/搜索引擎要关注的对象。

在开源技术栈,我该如何对大数据查询引擎做选型?雷达简图揭答案

针对上述场景示例,其实贯穿了大数据的很多关键技术点,每个技术点都可以展开细粒度的剖析,但本文既然说查询引擎,那么更聚焦于客户标签最后如何使用。

某些场景,可能只是做个带where条件的简单查询,不需要后端太多的计算和分析;

某些场景,可能查询后需要再次与业务人员交互,基于查询结果再次筛选或关联,甚至实时分析;

某些场景,可能需要把用户群筛选出来做个匹配,这里面涉及到标签分类、用户群管理、匹配规则等,而这却需要大量的运算和关联分析;

所以针对每种查询场景,对相应技术指标的要求不尽相同,这是考验查询引擎技术特性和能力的时刻。

本篇罗列了几种常用的开源查询/搜索引擎,每种技术都有自己特点,通过雷达图可以粗略了解。需要说明的是,查询引擎和搜索引擎也属于不同的范畴,前者更注重复杂查询、交互式分析和对SQL的支持,而后者由于对索引支持较好,因此简单查询和实时检索的效果会非常突出。

SparkSQL是Spark生态圈的查询组件,与Spark/Hadoop有极强的兼容性,且对SQL标准的支持度较好,是今天搞开源技术栈必不可少的查询组件;

Presto与Hive一样,都是Facebook开源的优秀产品,其实时交互式查询分析性能卓越、支持SQL2003标准、灵活的Connector开发能力,与其他子系统的兼容性非常好;

Impala是Cloudera开源的查询引擎(开源版本性能差,付费版本性能出色),最初它的出现似乎就是为了替代MPP数据库的查询能力,高并发、高效率;

Solr是一个高性能、非常出色的搜索引擎,采用Java5开发,基于Lucene的全文搜索服务器,并同时对其进行了扩展,提供了比Lucene更为丰富的查询语言;

ElasticSearch也是一个基于Lucene的搜索服务器,它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口,相对于文本解析、分词支持度极强;

简单做个归类,对于简单查询:presto、impala性能出众;对于带条件的查询:presto、impala性能更强;对于大数据量数据分析:impala不稳定,presto比sparksql略快;对于海量数据复杂分析:impala、presto性能差不多,sparksql略慢;对于实时搜索推荐ElasticSearch——基于检索技术,提供语义分析和查询能力……仅作参考,毕竟在实际应用中,更适合自己的才是最好的。

这就是大数据时代查询分析域的主要技术,介绍到这里,周末愉快!


分享到:


相關文章: