ElasticSearch 学习记录之如任何设计可扩容的索引结构

时间:2022-05-16 00:51:35

ElasticSearch 系列文章

1 ES 入门之一 安装ElasticSearcha

2 ES 记录之如何创建一个索引映射

3 ElasticSearch 学习记录之Text keyword 两种基本类型区别

4 ES 入门记录之 match和term查询的区别

5 ElasticSearch 学习记录之ES几种常见的聚合操作

6 ElasticSearch 学习记录之父子结构的查询

7 ElasticSearch 学习记录之ES查询添加排序字段和使用missing或existing字段查询

8 ElasticSearch 学习记录之ES高亮搜索

9 ElasticSearch 学习记录之ES短语匹配基本用法

10 ElasticSearch 学习记录之 分布式文档存储往ES中存数据和取数据的原理

11 ElasticSearch 学习记录之集群分片内部原理

12 ElasticSearch 学习记录之ES如何操作Lucene段

13 ElasticSearch 学习记录之如任何设计可扩容的索引结构

14 ElasticSearch之 控制相关度原理讲解

扩容设计

扩容的单元

  • 一个分片即一个 Lucene 索引 ,一个 Elasticsearch 索引即一系列分片的集合

  • 一个分片即为 扩容的单元 。 一个最小的索引拥有一个分片。

  • 一个只有一个分片的索引无扩容因子

    -ElasticSearch 学习记录之如任何设计可扩容的索引结构

  • 如何判断一个请求过来,我的信息在哪个分片上面

    • shard = hash(routing) % number_of_primary_shards
    • routing 大致是指文档的id

分片预分配

  • 一个分片存在于单个节点, 但一个节点可以持有多个分片

  • 一个拥有两个分片的索引可以利用第二个节点来存储数据

    -ElasticSearch 学习记录之如任何设计可扩容的索引结构

  • Elasticsearch 中新添加的索引默认被指定了五个主分片

  • 为何不使用分片的分裂而是分片复制转移

    • 分裂分片是重新索引数据,比复制更重
    • 分裂是指数级的
    • 分裂需要足够大的空间

海量分片

  • 如何控制分片的数量
  • 分片的数据模型是什么
    • 一个分片的底层是Lucene索引,会消耗文件的句柄 内存 CPU 等
    • 每个搜索请求都会命中索引的每个分片,多个分片咋同一个节点上会竞争资源
    • 基于相关度的词频信息计算是基于分片的

容量规划

  • 如何根据自己的自身情况,来判断分片的多少
  • 可以根据下面的步骤,在特定环境中测定分片的多少
    • 基于生产的单个节点集群
    • 和生产相同的索引,知识他只有一个主分片无副本分片
    • 索引实际文档
    • 查询或聚合实际文档
    • 在真实的环境上运行,直到它挂掉。
    • 然后根据上面的信息,来进行分片的数量的计算

副本分片

  • 副本分片的主要目的就是为了故障转移

  • 如果持有主分片的节点挂掉了,一个副本分片就会晋升为主分片

  • 新文档首先被索引进主分片然后再同步到其它所有的副本分片

  • 副本分片可以服务于读请求

  • 可以通过增加副本的数目来提升查询性能

  • 一个拥有两个主分片一份副本的索引可以在四个节点中横向扩展

  • ElasticSearch 学习记录之如任何设计可扩容的索引结构

  • 过调整副本数来均衡节点负载

    • 原则上一个主分片不会它索引的副本分片在一起
    • ElasticSearch 学习记录之如任何设计可扩容的索引结构

多索引

  • 如何不停服务来增加容量
    • 创建一个新的索引存储数据
    • 同时搜索两个索引来获取新数据和旧数据
    • 使用索引别名来同时查询两个索引的数据

索引模板‘

  • 使用模板可以创建有用的索引

    创建索引模板

    PUT /_template/my_logs 创建一个名为 my_logs 的模板

    {

    "template": "logstash-*",

    将这个模板应用于所有以 logstash- 为起始的索引

    "order": 1, 这个模板将会覆盖默认的 logstash 模板,因为默认模板的 order 更低。

    "settings": {

    "number_of_shards": 1 限制主分片数量为 1

    },

    "mappings": {

    "default": { 为所有类型禁用 _all 域

    "_all": {

    "enabled": false

    }

    }

    },

    "aliases": {

    "last_3_months": {}

    添加这个索引至 last_3_months 别名中。

    }

    }

数据过期

  • 一次删除多个索引

    • DELETE /logs_2013* //使用通配符

      关闭旧的索引

    POST /logs_2014-01-/_flush 刷写(Flush)所有一月的索引来清空事务日志

    POST /logs_2014-01-
    /_close

    关闭所有一月的索引.

    POST /logs_2014-01-*/_open当你需要再次访问它们时,使用 open API 来重新打开它们。

归档旧索引数据

非常旧的索引 可以通过snapshot-restore API归档至长期存储

基于用户的数据

Elasticsearch 支持多租户所以每个用户可以在相同的集群中拥有自己的索引

一个用户一个索引”对大多数场景都可以满足

共享索引

利用别名实现一个用户一个索引

对子文档进行聚合操作

POST product/_search
{
"size": 0,
"aggs": {
"productSource": {
"terms": {
"field": "productSource"
},
"aggs": {
"prices": {
"children": {
"type": "price"
},
"aggs": {
"minPrice": {
"terms": {
"field": "minPrice"
}
}
}
}
}
}
}
}

ElasticSearch 学习记录之如任何设计可扩容的索引结构的更多相关文章

  1. ElasticSearch 学习记录之ES几种常见的聚合操作

    ES几种常见的聚合操作 普通聚合 POST /product/_search { "size": 0, "aggs": { "agg_city&quo ...

  2. ElasticSearch 学习记录之ES短语匹配基本用法

    短语匹配 短语匹配故名思意就是对分词后的短语就是匹配,而不是仅仅对单独的单词进行匹配 下面就是根据下面的脚本例子来看整个短语匹配的有哪些作用和优点 GET /my_index/my_type/_sea ...

  3. ElasticSearch 学习记录之 分布式文档存储往ES中存数据和取数据的原理

    分布式文档存储 ES分布式特性 屏蔽了分布式系统的复杂性 集群内的原理 垂直扩容和水平扩容 真正的扩容能力是来自于水平扩容–为集群添加更多的节点,并且将负载压力和稳定性分散到这些节点中 ES集群特点 ...

  4. ElasticSearch 学习记录之ES高亮搜索

    高亮搜索 ES 通过在查询的时候可以在查询之后的字段数据加上html 标签字段,使文档在在web 界面上显示的时候是由颜色或者字体格式的 GET /product/_search { "si ...

  5. ElasticSearch 学习记录之ES查询添加排序字段和使用missing或existing字段查询

    ES添加排序 在默认的情况下,ES 是根据文档的得分score来进行文档额排序的.但是自己可以根据自己的针对一些字段进行排序.就像下面的查询脚本一样.下面的这个查询是根据productid这个值进行排 ...

  6. ElasticSearch 学习记录之父子结构的查询

    父子结构 父亲type属性查询子type 的类型 父子结构的查询,可以通过父亲类型的字段,查询出子类型的索引信息 POST /product/_search { "query": ...

  7. ElasticSearch 学习记录之Text keyword 两种基本类型区别

    ElasticSearch 系列文章 1 ES 入门之一 安装ElasticSearcha 2 ES 记录之如何创建一个索引映射 3 ElasticSearch 学习记录之Text keyword 两 ...

  8. Elasticsearch学习记录(分布式的特性)

    Elasticsearch学习记录(分布式的特性) 分布式的特性 我们提到Elasticsearch可以扩展到上百(甚至上千)的服务器来处理PB级的数据.然而我们的例子只给出了一些使用Elastics ...

  9. Elasticsearch学习记录(入门篇)

    Elasticsearch学习记录(入门篇) 1. Elasticsearch的请求与结果 请求结构 curl -X<VERB> '<PROTOCOL>://<HOST& ...

随机推荐

  1. 联合体(union)的使用方法及其本质

    转自:http://blog.csdn.net/huqinwei987/article/details/23597091 有些基础知识快淡忘了,所以有必要复习一遍,在不借助课本死知识的前提下做些推理判 ...

  2. hiho &num;1309 任务分配

    #1309 : 任务分配 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定 N 项任务的起至时间( S1, E1 ), ( S2, E2 ), ..., ( SN,  ...

  3. BZOJ 2751 容易题

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2751 题意:有一个数列A已知对于所有的A[i]都是1到n的自然数,并且知道对于一些A[i ...

  4. keil中的存储模式

    存储模式 存储模式决定了默认的存储器类型此存储器类型将应用于函数参数局部变量和定义时未包含存储器类型的变量你可以在命令行用SMALL COMPACT和LARGE参数定义存储模式,定义变量时使用存储器类 ...

  5. Java抽奖小程序

    package com.test; import java.awt.Color; import java.awt.Font; import java.awt.event.ActionEvent; im ...

  6. oracle 11g 11&period;2&period;0&period;1 设置HuagePage导致TRC 变大 变多

    最近发现diag/..../trac/ 目录下  sid_ora_xxxx.trc 文件大小为11M 而且类似文件数量很大.导致占用了8G硬盘空间 另外个同事说他的DG没有这个问题. 都一样的系统和一 ...

  7. Git一些其它的功能

    Git 开始之前我们配置过user.name和user.email.其实还有很多其他的配置项 例如:让Git显示颜色,会让命令输出来更醒目: $ git config --global color.u ...

  8. 【Unity Shaders】Using Textures for Effects——打包和混合textures

    本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...

  9. 从面向服务架构(SOA)学习:微服务时代应该借鉴的5条经验教训

    [编者按]本文作者为 Matt McLarty,通过介绍 SOA 的兴衰变化,总结了微服务应该借鉴的5条经验教训.文章系国内 ITOM 管理平台 OneAPM 编译呈现. SOA 的兴衰变化让我们更了 ...

  10. PHP7语法知识(一):语言基础

    一.数据类型 1.字符串: 2.整形: var_dump函数:返回变量的数据类型和值. 3.浮点型: 4.布尔型: 5.数组: 6.对象: 7.NULL值 二.运算符 1.算术运算符: 2.递增递减运 ...