目录
ES 怎么用的?数据量级多少?为什么用ES 不用Hbase?
ElasticSearch知识体系详解 | Java 全栈知识体系
ES详解 - 优化:ElasticSearch性能优化详解 | Java 全栈知识体系
什么场景下使用了ES?//todo 项目中什么场景用了ES
使用场景 | 应用示例 | 具体作用 |
---|---|---|
网站搜索 | 电商平台(如淘宝、京东)、新闻门户、在线文档平台 | 根据用户输入关键词,快速匹配商品名称、描述、属性,新闻标题、内容等信息,提供准确搜索结果,提升用户体验 |
日志分析 | 大型互联网公司的服务器日志、各类应用程序日志 | 实时分析海量日志数据,定位问题、监控系统性能、发现潜在安全威胁,了解用户访问行为、流量分布等 |
数据分析 | 金融领域的交易数据分析、市场营销中的用户数据分析 | 对大规模数据进行快速统计分析,发现异常交易模式、进行风险评估,了解用户兴趣爱好、消费习惯,制定精准营销策略 |
知识图谱 | 智能客服系统 | 作为知识图谱的存储和查询引擎,建立实体之间索引关系,快速回答用户问题,提供准确信息和解决方案 |
监控和告警 | IT 基础设施监控(服务器 CPU 使用率、内存占用、网络流量等数据监控) | 存储和分析监控数据,当指标超出阈值时及时发出告警,帮助运维人员保障系统稳定运行 |
企业内部文档管理 | 企业内部合同、报告、手册等文档管理 | 对文档进行全文索引,方便员工快速搜索查找,支持权限管理,保障企业信息安全 |
地理位置搜索 | 地图应用(搜索附近餐厅、酒店、景点等) | 支持地理位置数据类型和查询,根据用户位置信息,快速返回符合条件结果,并按距离排序 |
社交媒体分析 | 微博、微信等社交媒体平台的数据处理 | 分析用户情感倾向、话题热度、社交关系等,为企业和品牌提供市场洞察,助力品牌推广和用户管理 |
ES 怎么用的?数据量级多少?为什么用ES 不用Hbase?
//TODO 项目中什么场景用的ES,数据量多少,为什么不用Hbase?
对比项 | Elasticsearch(ES) | HBase |
---|---|---|
使用方法 | 1. 数据索引:以 JSON 格式组织数据,通过 RESTful API 或客户端库(如 Java、Python 客户端)进行索引 2. 数据搜索:利用查询 DSL 构建查询语句,通过 RESTful API 或客户端库执行查询获取结果 3. 集群管理:支持集群部署,通过管理 API 或工具监控集群状态、管理索引、分配资源等 4. 数据分析:提供聚合功能,对索引数据进行统计分析,如求和、平均值、计数、分组等 |
1. 数据存储:以分布式、面向列的方式存储数据,通过客户端 API 进行数据写入操作 2. 数据查询:使用扫描器(Scanner)或 Get 操作进行数据读取,支持基于行键的范围查询 3. 集群管理:通过 HBase 管理工具(如 HMaster)管理集群节点、表结构等 4. 数据维护:定期进行数据压缩、合并等操作,以优化存储和性能 |
适用数据量级 | 1. 中小规模:几十 GB 到数 TB 数据量可轻松应对,提供快速搜索和分析性能 2. 大规模:数 TB 到 PB 级别数据,合理配置集群和优化可处理,但需考虑硬件、索引、查询优化等 |
1. TB 级别:在日志存储等场景中,能高效存储和管理数 TB 规模数据,支持实时查询分析 2. PB 级别及以上:如科学研究领域的基因测序、天文观测等数据,通过扩展集群节点可处理 PB 级甚至更大规模数据 3. 高并发场景:在金融交易、物联网数据采集等超高并发读写场景下,能处理大量数据并支持每秒数千到数万次读写请求 |
选择 ES 而不选 HBase 的原因 | 1. 查询需求:擅长全文搜索、复杂查询和分析,基于 Lucene 倒排索引,搜索性能和灵活性强,HBase 对全文搜索支持弱 2. 数据结构:适合半结构化或非结构化数据,以 JSON 格式存储,灵活性高,HBase 更适合结构化数据,基于列族的数据模型 3. 实时性要求:数据写入后可立即搜索,实时性高,HBase 数据写入处理环节多,实时性相对差 4. 应用场景:常用于搜索引擎、日志分析、数据分析、监控告警等场景,HBase 主要用于大数据存储、实时数据处理、分布式数据库等场景 |
- |
倒排索引 是什么讲一下?
- ES 基础概念与倒排索引
- ES 概述:ES 是介于应用和数据之间的开源搜索引擎,通过关键词搜索数据,类似百度搜索。
- 倒排索引原理:为解决海量数据关键词检索问题,对文本分词形成词项,记录词项与文本 id 关系,按字典序排序词项形成 Term Dictionary,其对应的文档 id 等信息集合为 Posting List,二者构成倒排索引。Posting List 还包含词频和词项偏移量等信息。
- 相关优化组件:Term Dictionary 数据量大需存于磁盘,为加速搜索,提取部分词项前缀构建 Term Index(目录树结构)存于内存,通过它可快速定位 Term Dictionary 中词项位置。Stored Fields 用于存储完整文档内容,Doc Values 是为提升排序效率而构建的列式存储结构。这些结构共同组成具备完整搜索功能的最小单元 segment。
- 从 lucene 到 ES 的演进
- lucene 架构与问题:lucene 是单机文本检索库,由多个 segment 构成。segment 生成后不可修改,新增文档生成新 segment,可通过段合并(segment merging)控制文件数量。但 lucene 存在性能、扩展性和可用性问题。
- ES 的优化改进:通过数据分类写入不同 Index Name、对 Index Name 数据分片(shard)、分散部署分片到多个 Node、设置主分片和副本分片、分化 Node 角色(主节点、数据节点、协调节点)以及采用去中心化的方式同步数据,解决了 lucene 的问题,使 ES 具备高性能、高扩展性、高可用性,成为分布式搜索引擎。
- ES 与 Kafka 架构对比:ES 的 Index Name、Shard、Node 分别类似 Kafka 的 topic、Partition、broker,二者架构相似,可类比学习。
- ES 的工作流程
- 写入流程:客户端请求发至协调节点,协调节点经 hash 路由找到主分片写入数据,主分片同步数据至副本分片,副本分片写入完成后主分片向协调节点发送 ACK,协调节点再响应客户端写入完成。
- 搜索流程:查询阶段,客户端请求发至协调节点,协调节点将请求转发至数据节点分片,分片利用倒排索引和 doc values 获取并处理数据,协调节点聚合排序;获取阶段,协调节点根据文档 id 再次请求分片获取完整文档内容,最终返回给客户端 。