当前位置: 首页 > news >正文

【ES的优势和原理及分布式开发的好处与坏处】

文章目录

  • ES的优势及分布式开发的好处
  • 1.ES的优势
    • 1.1 优势概述
    • 1.2 相关问题
      • 1)为什么需要 Elasticsearch?MySQL 不行吗?
      • 2)SQL检索的问题:
      • 3)ES检索快的原理
  • 2.分布式开发的好处与坏处

ES的优势及分布式开发的好处

1.ES的优势

1.1 优势概述

  • 支持多种数据类型,非结构化,数值,地理信息。
  • 简单的 RESTful API,天生的兼容多语言开发。
  • 提供更丰富的分词器,支持热点词汇查询。
  • 近实时查询,Elasticsearch 每隔 1s 把数据存储至系统缓存中,且使用倒排索引提高检索效率。
  • 支持相关性搜索,可以根据条件对结果进行打分。
  • 天然分布式存储,使用分片支持更大的数据量。

1.2 相关问题

1)为什么需要 Elasticsearch?MySQL 不行吗?

  • MySQL 也可以但不擅长

  • 传统关系型数据库(如 MySQL )在大数据量下查询效率低下, 模糊匹配有可能导致全表扫描。

  • MySQL 全文索引只支持 CHAR , VARCHAR 或者 TEXT 字段类型,不支持分词器。

2)SQL检索的问题:

  1. 慢:全表扫描
  2. 结果有限:搜索“明月",也希望看到"明","月"的结果…
  3. 无法得到文档与搜索条件的相关性

3)ES检索快的原理

将磁盘里的东西尽量搬进内存,减少磁盘随机读取次数 (同时也利用磁盘顺序读特性),结合各种压缩算法,用及其苛刻的态度使用内存。精打细算每一块内存、磁盘空间、用诡谲的位运算加快处理速度。

  • 为了能够快速定位到目标文档,ES 使用倒排索引技术来优化搜索速度,虽然空间消耗比较大,但是搜索性能提高十分显著。
  • 为了能够在数量巨大的 terms 中快速定位到某一个 term,同时节约对内存的使用和减少磁盘 io 的读取,lucene 使用 “term index -> term dictionary -> postings list” 的倒排索引结构,通过 FST 压缩放入内存,进一步提高搜索效率。
  • 为了减少 postings list 的磁盘消耗,lucene 使用了 FoR (Frame of Reference)技术压缩,带来的压缩效果十分明显。
  • ES 的 filter 语句采用了 Roaring Bitmap 技术来缓存搜索结果,保证高频 filter 查询速度的同时降低存储空间消耗。
  • 在联合查询时,在有 filter cache 的情况下,会直接利用位图的原生特性快速求交并集得到联合查询结果,否则使用 skip list 对多个 postings list 求交并集,跳过遍历成本并且节省部分数据的解压缩 cpu 成本。

2.分布式开发的好处与坏处

好处:

1、增大系统容量。我们的业务量越来越大,而要能应对越来越大的业务量,一台机器的性能已经无法满足了,我们需要多台机器才能应对大规模的应用场景。所以,我们需要垂直或是水平拆分业务系统,让其变成一个分布式的架构。

2、加强系统可用。我们的业务越来越关键,需要提高整个系统架构的可用性,这就意味着架构中不能存在单点故障。这样,整个系统不会因为一台机器出故障而导致整体不可用。所以,需要通过分布式架构来冗余系统以消除单点故障,从而提高系统的可用性。

3、因为模块化,所以系统模块重用度更高

4、因为软件服务模块被拆分,开发和发布速度可以并行而变得更快

5、系统扩展性更高

6、团队协作流程也会得到改善

坏处:

1、架构设计变得复杂(尤其是其中的分布式事务)

2、部署单个服务会比较快,但是如果一次部署需要多个服务,部署会变得复杂

3、系统的吞吐量会变大,但是响应时间会变长

4、运维复杂度会因为服务变多而变得很复杂

5、架构复杂导致学习曲线变大

6、测试和查错的复杂度增大

7、技术可以很多样,这会带来维护和运维的复杂度

8、管理分布式系统中的服务和调度变得困难和复杂

资料来源:

1、Elasticsearch为什么搜索这么快 - 知乎 (zhihu.com)

2、分布式优缺点_分布式的优点-CSDN博客

http://www.lryc.cn/news/183314.html

相关文章:

  • Autosar诊断实战系列23-CanTp半/全双工及相关工程问题思考
  • 【Pandas】数据分组groupby
  • 【图像处理GIU】图像分割(Matlab代码实现)
  • Java中的锁与锁优化技术
  • 布局与打包
  • UVa11324 - The Largest Clique
  • 【Linux】TCP的服务端(守护进程) + 客户端
  • 1.7. 找出数组的第 K 大和原理及C++实现
  • 基于微信小程序的付费自习室
  • 纪念在CSDN的2048天
  • 云原生Kubernetes:简化K8S应用部署工具Helm
  • qml保姆级教程五:视图组件
  • 2310d编译不过
  • CleanMyMac X4.14.1最新版本下载
  • 芯驰D9评测(3)--建立开发环境
  • 阿里云服务器IP地址查询方法(公网IP和私网IP)
  • 第47节——使用bindActionCreators封装actions模块
  • QT、c/c++通过宏自动判断平台
  • 对比表:阿里云轻量应用服务器和服务器性能差异
  • 中国1km分辨率月最低温和最高温度数据集(1901-2020)
  • EasyX图形库note4,动画及键盘交互
  • C++设计模式-原型(Prototype)
  • [补题记录] Atcoder Beginner Contest 322(E)
  • 目标检测算法改进系列之Backbone替换为FocalNet
  • buuctf-[BSidesCF 2020]Had a bad day 文件包含
  • Elasticsearch:什么时候应该考虑在 Elasticsearch 中添加协调节点?
  • Dubbo3应用开发—Dubbo注册中心引言
  • AS环境,版本问题,android开发布局知识
  • OpenCV查找和绘制轮廓:findContours和drawContours
  • 毕设-原创医疗预约挂号平台分享