背景

最近有个简单的需求,离线数据挖掘得出的标签需要支持online的查询,查询场景比较简单,支持按照单个id或者多个id批量查询,tp99需要在200ms,批量的时候id 集合的大小不会超过1000,平均下来不会超过200的样子。这种场景直接上ES相对来说比较省事,不过ES占用资源较多,想尝试用hbase来解决这种场景,下面记录下具体的过程。

为何要考虑HBase?

为何要用hbase呢?离线数据是存放在hive表里面的,虽然hbase导入hbase和es都挺方便的,不过据我们测试的情况看,hive2hbase采用bulkload 的方式会快些,而且比较简单。导入es的过程中步骤繁琐,需要设置刷新时间和副本数,设置段合并和别名之类的操作,相对来说麻烦许多。hbase按照 rowkey查询的性能还行,单次查询在10+ms左右,虽然支持索引,不过性能差强人意,暂时不准备利用其自身的索引。 只利用hbase来存储元信息,这些信息相对来说比较占空间,仅支持按照 rowkey来查找。

HBase的若干问题

  1. rowkey的设计,这个关系到数据是否分布均匀,一般根据业务场景强相关,我们这个就是按照id来设计的查询,前期考虑根据id的首个数字来进行划分,后来发现 region server 存在严重的热点问题,看了下数据才发现,我们的id是子增的,而且id比较大,主要都落到2,3开头的region里面了,对于自增的id可以采用id%n 的方法来划分,最终采用n=60,最后看了下分布到每个 regionserver 的数据非常均匀,基本都在410W左右。
  2. 预分区可以均衡读写压力,老生常谈的问题了
  3. 列可以动态增加,对于每行数据不一样的应用比较适合,为null的列是不会进行存储的,这一点很灵活
  4. 热点的问题,在均衡了rowkey的设计之后,可以使得访问请求能均衡的分布到每个region server,不过从压测的情况看,数据的rt 波动比较大, 因为blockcache 不是表级别的,全局的lru比较容易被踢出来,如果被踢出来的话,需要去读hfile了。
  5. 因为hbase 是按照column family存储的,其列名是会保存在keyvalue里面的,比较占用空间,可以简短一点,另外,读取数据的过程也是按照column family读取的,涉及到storeFileScanner的切换,效率会有些影响,不过这块没有具体测试过,column family不要超过3个,有时候业务字段拆分成不同的column family更为合理,不过对性能的影响需要再深入测试。
  6. 我们的业务场景是所有数据都要轮一遍,所以blockcache对我们没啥用,从压测的结果看200 个 id的情况下,tp99在270ms,对staging进行测试,同机房内,qps也就40多,这个结果比较惨。
  7. 对线上机器进行了观察,发现hbase的region server的memory 和heap使用率都挺高的,比ES的机器配置要高很多了,不符合花小钱搞事情的原则。

丢不掉的ES

在对hbase进行测试之后,id超过200之后,hbase性能直线下降,很难符合线上的要求了,只能再转回ES了。事实上,在使用hbase之前,我们设想是通过es+hbase或者es+tair来进行对比,这两种场景因为对索引和数据进行了拆分,性能很难和直接利用es进行查询相比,最后转了个圈,还是回到ES上面了,索引信息存储在es里面,由于es存储的信息极其简单,2.5亿的记录索引,经过优化存储,只占用了9G的空间,200个id查询的 rt 也就30ms左右,性能还是比较稳定的。ES的优点如下:
  1. es集群还是比较可靠的,性能杠杠的,之前想着节省资源的情况下用用hbase,不过hbase的blockcache 也不小,es虽然是虚机,单台只有8G,但还是比较稳定的
  2. es可以通过disable source, 只index而不 store,启用best compress (可以省 1/3 的空间)  等达到最大利用率
  3. es  的吞度量还是不错的,同样的压测,qps是hbase的4倍,rt只有hbase的一半不到。

ES的问题

  1. ES做简单的查询还行,不过要小心返回结果可能并不是你所想的,es 为了提升检索效率,有些地方是用的近似值,用集合查询的时候,from to 下,会受限制与window size 的大小,有时候返回的结果不稳定而且不全,这个测试的时候发现了,还是比较坑的。
  2. filter方式因为不计算score和存在缓存的方式,性能一般情况下是ok的,不过据压测情况看,filter的tp90虽然比query快了大概10ms,但是tp99 的曲线波动的很厉害,远不如query 的tp99平稳,说明性能是有较大的波动的
  3. 根据2做了些研究,es的cache是基于node级别的,有query和filter的cache,query只缓存count类型的查询,filter缓存采用lru机制,会根据filter条件做缓存,采用的是bitset,既然是lru,肯定会有换入换出,怀疑是抖动的原因,如果有大牛知道,欢迎指正。
一般做系统方案的时候,还是需要根据具体业务场景来区分,复杂不一定好,皮实耐用才是真道理,根据具体场景来做优化,有时候也能收到意想不到的效果。

hbase和es在搜索场景的应用相关推荐

  1. ES, MongoDB, HBase的区别和使用场景

    原文网址:ES, MongoDB, HBase的区别和使用场景_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍技术选型:ES, MongoDB, HBase的区别和使用场景. 简要对比 支持情 ...

  2. 极兔一面:10亿级ES海量搜索狂飙10倍,该怎么办?

    背景说明: ES高性能全文索引,如果不会用,或者没有用过,在面试中,会非常吃亏. 所以ES的实操和底层原理,大家要好好准备. 另外,ES调优是一个非常.非常核心的面试知识点,大家要非常重视. 在40岁 ...

  3. es相同条件搜索多次返回结果不一样

    1. 背景介绍 业务方发现他们配置的数据源会返回重复数据,主要体现为在翻页的时候上一页的最后一个数据和下一页的第一条数据一模一样, 场景和分页问题极其相似 2. 分析过程 我最开始碰到这个bug的时候 ...

  4. #研发解决方案介绍#基于ES的搜索+筛选+排序解决方案

    郑昀 基于胡耀华和王超的设计文档 最后更新于2014/12/3 关键词:ElasticSearch.Lucene.solr.搜索.facet.高可用.可伸缩.mongodb.SearchHub.商品中 ...

  5. 搜索场景下的智能推荐演变之路

    摘要:传统的推荐手段主要还是深度挖掘用户行为和内容本身相似性的价值,包括但不限于协同过滤,内容表征+向量召回,以及各式各样的点击率预估模型,然后这样的推荐行为缺乏内在的逻辑性和可解释性,有一种知其然, ...

  6. 搜索场景下的智能实体推荐

    省时查报告-专业.及时.全面的行研报告库 省时查方案-专业.及时.全面的营销策划方案库 [免费下载]2022年2月份热门报告盘点 知识图谱在美团推荐场景中的应用实践 机器学习在B站推荐系统中的应用实践 ...

  7. 实习周报 | 3rd week | 2021.4.19 - 4.23 | 文本摘要,ES语义搜索,SOTA SA

    完成 ES语义搜索dense vector⽅法可行性进一步测试 新数据集:https://www.kaggle.com/asd336655/ccf2019news-so 新闻评论等,筛选出评论⻓长于5 ...

  8. Elasticsearch(038):es中搜索之入门与分页搜索

    ES中搜索的方式分为两种,一种是通过URL参数进行搜索:另一种是通过POST中body请求参数进行搜索. 针对第一种我们进行简单的讲解,我们关注的核心放在第二种上面. 一.简单搜索(search) 1 ...

  9. hadoop/hive/hbase 简单区别及应用场景

    1.hadoop:它是一个分布式计算+分布式文件系统,前者其实就是MapReduce,后者是HDFS.后者可以独立运行,前者可以选择性使用,也可以不使用 2.hive:通俗的说是一个数据仓库,仓库中的 ...

最新文章

  1. 迈入幸福婚姻殿堂的星座女
  2. 2.10 词嵌入除偏-深度学习第五课《序列模型》-Stanford吴恩达教授
  3. mybatis insert 动态生成插入的列及插入的值
  4. mysql自定义存储过程_MySQL自定义函数、触发器、存储过程
  5. 【Python】random模块生成多种类型随机数
  6. oracle的分支语句,Oracle中的分支语句
  7. 基于STM32的嵌入式语音识别模块设计实现
  8. [JAVA]预面试笔记
  9. matlab设置脚本,MATLAB脚本和功能
  10. 树莓派linux负载均衡集群,在树莓派2上Nginx并发1W到底有多难
  11. 文件系统测试工具IOZONE
  12. Ubuntu图形界面和终端界面切换快捷键
  13. 史上最全的oracle常用知识总结
  14. 简书收入结算与提现常见问题
  15. 台式计算机没有声音怎么办,台式电脑没有声音了怎么恢复(在家用这两个方法轻松解决)...
  16. SMARTBI 电子表格——分片报表
  17. 关于随机种子seed()的一点理解
  18. Android 使用crosswalk实例
  19. 记一次在Taro开发的微信小程序中使用lottie动画的经验
  20. Hibernate4注解方法

热门文章

  1. android6支持内存卡,2020年拥有可扩展存储的最佳Android手机
  2. 中望3D 2021 “基准面”之“动态基准面”模式
  3. HC-05 蓝牙 AT指令详解
  4. 自制网页(仿B站)前端开源程序
  5. 微信公众号HTML5接入腾讯云人脸核身
  6. 操作系统MSXML组件版本过低,导致启动失败的原因
  7. 电商商品3d展示---插件spritespin
  8. 海贝思蓝牙接收器Linux,特定场景使用测评,电视民工的海备思蓝牙X2发射接收器使用心得。...
  9. RPG Maker MV 踩坑一 新仙剑菜单
  10. 《精英日课》第三季_2019年四月新书《九个工作谎言》_1工作是具体的,公司是虚拟的