elasticsearch索引怎么设计

Primary Shard(主分片)

Primary Shard(主分片)是索引数据存储的基本单位,承担着数据写入和查询的职责。以下是关于Primary Shard的一些关键点:

1. 数据分布:每个索引在创建时会被分成多个主分片,这些主分片分布在不同的节点上,以此来实现数据的分布式存储和水平扩展。主分片的数量在索引创建时设定并且之后不能更改
2. 数据写入:当新的文档被写入Elasticsearch时,首先会被写入到对应的主分片中。这个过程涉及到文档的索引、分析以及存储。
3. 容错机制:主分片的存在也提供了故障恢复的能力。如果某个节点发生故障,其上的主分片可以在其他节点上通过副本分片(Replica Shard)自动重新分配,保证数据的可用性。
4. 查询路由:查询操作首先会路由到相关的主分片或其副本上执行,然后汇总结果返回给客户端。这意味着查询负载可以被主分片及其副本共同分担,提高了查询效率。
5. 数据恢复与再平衡:在集群扩容或缩容时,Elasticsearch会自动对主分片进行再平衡,以优化数据分布。此外,在节点故障后,未分配的主分片会触发故障转移机制,确保数据的完整性和服务的连续性。
6. 不可变性:一旦主分片中的数据被写入,它就被视为不可变的。任何更新或删除操作实际上都是通过新增一个文档版本来实现的,旧版本的文档最终会在段合并过程中被标记为已删除。

ElasticSearch 索引设计

1. 基于时间对Index进行分割

根据时间间隔与数据产生时间将数据写入不同的Index中,为了易于区分,会在Index的名字中加上对应的时间标识。

常见的间隔有小时、天、周和月:先考虑总共要存储多久的数据,然后选一个既不会产生大量Index又能够满足一定灵活性的间隔,比如你需要存储6个月的数据,那么一开始选择“周”这个间隔就会比较合适。考虑业务增长速度:假如业务增长的特别快,比如上周产生了1亿数据,这周就增长到了10亿,那么就需要调低这个间隔来保证有足够的弹性能应对变化。

2. 分片与副本策略

合理分配分片数量,过多的分片会增加管理和查询的复杂度,太少则可能限制水平扩展能力。Elastic专家根据经验总结出来大家普遍认为:单个Shard的存储大小不超过30GB。

评估分片数量:单个Index的Primary Shard个数 = k * 数据节点个数。(key为小整数:1~2)

合理设置副本,一个或多个副本可以提供高可用性和负载均衡。

3. 映射定义(Mapping)

生产环境下需要禁用动态映射,明确定义字段的数据类型,避免动态映射可能导致的性能问题和数据不一致。使用合适的数据类型,例如使用keyword类型存储精确值,使用text类型并配合分析器处理全文搜索。应用字段长度限制,避免过大的文档导致内存溢出。利用norms、doc_values等属性优化存储和查询性能。

4. 分析器(Analyzer)

分词器的主要作用将用户输入的一段文本,按照一定逻辑,分析成多个词语的一种工具,顾名思义,文本分析就是把全文本转换成一系列单词(term/token)的过程,也叫分词。

根据内容选择合适的分析器,创建索引时指定分词器,搜索时指定analyzer查询参数。

5. 索引模板(Index Templates)

把已经创建好的某个索引的参数设置(settings)和索引映射(mapping)保存下来作为模板,在创建新索引时,指定要使用的模板名,就可以直接重用已经定义好的模板中的设置和映射。

如果你需要每间隔一定的时间就建立一次索引,你只需要配置好索引模板,以后就可以直接使用这个模板中的设置,不用每次都设置settings和mappings。

6. 生命周期管理(ILM)

设定索引的生命周期策略,自动进行滚动、归档和删除,管理索引的存储和成本。

所以,前期投入时间进行细致的索引设计是必要的,它不仅能够提升系统的整体性能,还能简化后续的维护工作,降低长期运营成本,确保系统稳定可靠地服务于业务需求。

参考:6000+字讲透ElasticSearch 索引设计 -阿里云开发者社区 (aliyun.com)

  • 21
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Elasticsearch索引设计是指在使用Elasticsearch搜索引擎时,为了提高搜索效率和准确性,需要对数据进行合理的分析和处理,以确定索引结构和字段映射。以下是一些常见的Elasticsearch索引设计原则: 1. 明确数据类型:在创建索引时,需要定义每个字段的数据类型,以便正确地进行搜索和排序。常见的数据类型包括字符串、数字、日期等。 2. 确定字段映射:根据数据类型和业务需求,确定每个字段的映射方式,包括分词器、分析器、搜索方式等。通过合理的字段映射,可以提高搜索效率和准确性。 3. 确定分片数量和副本数量:在创建索引时,需要确定分片数量和副本数量。分片数量越多,可以提高搜索并发性能;副本数量越多,可以提高数据可靠性和可用性。 4. 确定索引文档类型:在创建索引时,需要确定索引文档的类型。不同类型的文档可以有不同的字段映射和搜索方式,以满足不同的业务需求。 5. 使用合理的分词器和分析器:分词器和分析器可以影响搜索的结果。需要根据业务需求选择合适的分词器和分析器,以确保搜索结果准确无误。 6. 确定查询方式:通过使用Lucene查询语法或Elasticsearch查询DSL,可以实现不同的查询方式。需要根据业务需求选择合适的查询方式,以满足搜索需求。 总之,Elasticsearch索引设计需要根据业务需求和数据特点,合理选择字段映射、分词器、分析器、查询方式等,以提高搜索效率和准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值