为什么引入es

  • 现有系统架构
    • 存在的问题
    • 解决的方法
  • 引入es原因
    • 核心功能
    • 特点
    • 使用场景
  • es基本介绍
    • 基础概念
    • 对比mysql
    • 常用数据类型

现有系统架构

存在的问题

现有系统采用redis+mysql方案,对数据进行存储和统计。其中,redis统计当天数据总和并定时存入mysql;而原始数据是直接落库mysql,按月分表存储。
在查询统计数据时,因为按天统计好了,数据量小,故无性能瓶颈。而在查询历史数据时,因为需要查询整个月的数据,且查询条件多样,所有会有性能瓶颈,接口耗时多。
核心痛点:数据量大,搜索条件多,查询慢

解决的方法

  1. 降低单表数量
  2. 采用分库分表
  3. 增加索引、让查询命中索引,提高查询效率

前两种办法类似,都是通过降低单表数据量,来提高查询速度。分库缺点不用多说,无法做关联查询,且对技术要求较高。而分表,受业务需要,也不好在拆分,目前只按月分表。最后就是第三种方案,增加索引。通过新增组合索引是能解决大部分问题,但也会引入新的问题。
首先,如果查询条件过多(比如五六个查询条件,且每个条件可选可不选),则会导致新建组合索引过多。我们都知道,索引过多会导致索引文件过大,占用过多磁盘空间,且会影响写入性能。
其次,有时需要多表联查,这种情况下,即使添加索引,查询效率也不会很好。当然,为了减少关联查询,我们可以对单表做字段冗余。但这并不是很好的解决方案。
总结:能解决问题,也会引入新的问题

引入es原因

核心功能

es的定位就是用来做海量数据的全文检索,这也是其核心功能。所以针对现有系统中的数据量大,查询条件多的问题,能很好的适配解决。另外,除检索外,也能像mysql一样,做各种统计聚合。

特点

  1. 速度快,千万级数据毫秒级查询
  2. 不需要像mysql一样自己维护索引,es自动帮忙维护
  3. 集群部署简单,支持高可用、易扩容
  4. 自动实现冗余备份、负载均衡

用一句话来总结,就是:把你能遇到的问题都给解决,把需要手动参与的都给你自动实现

使用场景

  1. 日志采集
  2. 海量数据检索,百度搜索这种

es基本介绍

基础概念

  1. index
    索引index,其实就是相同结构的数据集合。可类比mysql数据表的概念
  2. type
    es7之前版本有type概念,之后版本已经取消。很多人将type类比mysql数据表的概念,虽然形式上很符合,也好理解。但其实是不对的,因为底层的实现是完全不同的,这种类比很容易误导人,官方也曾批评过这种解释
  3. doc
    doc就是一条文档,一条数据记录。可类比mysql中的行数据。不过在es中,文档是以json格式组成的,而mysql是字段形式,是行数据。
  4. map
    是文档doc的数据结构,包含哪些字段、字段类型是什么、分片数量等待。可类比mysql表结构DDL信息。
  5. shard
    指数据分片,在es中,为了做到高性能,数据会进行分片,类似于mysql中的分表。同时为了高可用,es引入了副本的概念,即每个主分片都会有若干副本。当主分片挂了后,副本仍能对外提供数据。
  6. lucence、segment、translog、refresh、flush、cluster、node、corsponding-node
    这一类概念涉及到底层实现,暂不过多解释,后面会有专门介绍。

对比mysql

es mysql
index table
doc row
map schema ddl
shard 分表或分区
全文索引 唯一索引、组合索引、主键等
底层实现:倒排索引 底层实现:b/b+tree

常用数据类型

分类 数据类型
文本 text、keyword
非文本 long、float
日期 date
其他 nested等

注意:

  1. text会分词,即字段内容会被分词,然后存入倒排索引中。
  2. keyword不会分词。text和keyword在查询时候的区别,后文会专门举例说明。
  3. 日期类型虽然是date,但底层还是作为long型存储。

Elasticsearch专栏-1.为什么引入es相关推荐

  1. Elasticsearch 压测方案之 es rally 简介

    rally文档:http://esrally.readthedocs.io/en/latest/quickstart.html 由于 Elasticsearch(后文简称es) 的简单易用及其在大数据 ...

  2. elasticsearch安全通讯配置要点(es 8.5.1)

    elasticsearch的安全通讯配置,官网文档说明比较零散,尤其是几种组件如kibana.fleetserver.各类agent.beat采用的处理方式都不一样,这里针对利用elasticsear ...

  3. 全网首个十万+ 阅读的 Elasticsearch 专栏诞生!

    死磕Elasticsearch专栏 一点感悟 输出倒逼输入 输出不难,高质量的输出或许也不难!但持续的高质量输出难! 况且,专栏内容严格讲,质量并不高,还有很大的提升空间. 当输出的内容改了又改,总感 ...

  4. Elasticsearch 实战 - 第三讲:ES 基本操作、批处理

    Elasticsearch 实战 - 第三讲:ES 基本操作.批处理 Elasticsearch 实战系列文章: 一:ES的基本操作 1.索引操作 1.1.建立索引 1.2.删除索引 1.3.查询索引 ...

  5. Elasticsearch——使用Java API实现ES中的索引、映射、文档操作

    文章目录: 1.开篇 2.案例详解 2.1 创建ES客户端:完成与ES服务端的连接 2.2 创建索引 2.3 查看索引 2.4 删除索引 2.5 创建文档 2.6 修改文档 2.7 查看文档 2.8 ...

  6. Elasticsearch专栏-7.es底层写入原理

    es底层写入原理 概念说明 es数据落盘过程 mysql数据落盘过程 redis数据落盘过程 概念说明 在第一章节中,已经提到过几个名词:lucence.segment.translog.refres ...

  7. Elasticsearch专栏-3.es基本用法-基础api

    es基本用法-基础api 索引index增删改查 增 删 改 查 文档doc增删改查 增 方式1:PUT 方式2:POST 删 改 方式1:_doc 方式2:_update 查 批量操作bulk 同一 ...

  8. elasticsearch aggregations 之一:引入buckets、metrics

    今天聊聊elasticsearch的聚合aggregation功能. 在解释elasticsearch的时候,都喜欢将es与关系数据库做对比参照,一来大部分coder对关系数据库都有或多或少了解,基本 ...

  9. Elasticsearch 7.0中引入的新集群协调子系统如何使用?

    Elasticsearch之所以如此流行,其中一个原因是它可以从只有几个节点的小集群扩展到拥有数百个节点的大集群.它的核心是集群协调子系统.Elasticsearch 7提供了一个新的集群协调子系统, ...

最新文章

  1. android gridview item 点击,Android-取消GridView/ListView item被点击时的效果
  2. 5G NGC — 关键技术 — 计算与存储分离
  3. java c3p0 配置文件_【c3p0】 C3P0的三种配置方式以及基本配置项详解
  4. php5.23升级,2018年5月5号23:30分对php的学后感
  5. 云炬随笔20180606
  6. js事件冒泡与捕捉解析
  7. 2013腾讯编程马拉松初赛(3月20日)
  8. 《Cortex-M0权威指南》之体系结构---程序映像和启动流程
  9. JDBC的批量查询报告内存溢出解决方法
  10. Word Count Example of Hadoop V1.0 – Mapper的实现
  11. Java三月春招面试经历分享(没offer不是我的锅)
  12. Oracle常用日期型函数详解(转)
  13. 如何打造自动驾驶的数据闭环
  14. json数据循环左侧三级导航菜单
  15. 手机安装php7,php7.3编译安装时报错system libzip must be upgraded to version = 0.11
  16. 微信windows版_微信多开教程:Win、Mac、iOS、Android
  17. 【教学】手写汉字识别,含训练代码,界面演示,1w字教学
  18. Mac 安装LaTeX教程 mactex+sublime+skim
  19. JVM知识梳理(二)之垃圾收集器与内存分配策略
  20. TigerGraph首将模式匹配与高效图计算相结合,为欺诈检测、网络安全保护、人工智能等应用增砖加瓦!

热门文章

  1. i.MX6ULL系统移植:uboot移植1 - 编译官方uboot
  2. 广东省专精特新中小企业申报在即,请提前准备
  3. DDR1.LPDDR4 DQS VT drift理解
  4. MinGW64的使用
  5. 计挑赛初赛试题(2021)(Java组)
  6. 超级好用的json格式化工具
  7. 零基础如何学习CAD
  8. 编译ch340驱动源码问题
  9. 模板笔记007 - 模板的声明、形参、实参
  10. openlayers版本更新差别