分片重要性
ES中所有数据均衡的存储在集群中各个节点的分片中,会影响ES的性能、安全和稳定性, 所以很有必要了解一下它。
分片是什么?
简单来讲就是咱们在ES中所有数据的文件块,也是数据的最小单元块,整个ES集群的核心就是对所有分片的分布、索引、负载、路由等达到惊人的速度
实列场景:
假设 IndexA 有2个分片,我们向 IndexA 中插入10条数据 (10个文档),那么这10条数据会尽可能平均的分为5条存储在第一个分片,剩下的5条会存储在另一个分片中。
和主流关系型数据库的表分区的概念有点类似,如果你比较熟悉关系型数据库的话。
分片的设置 settings
PUT my_index { "settings": { "index": { "refresh_interval": "1s", "number_of_shards": "3", "analysis": { "analyzer": { "ik_max_html_word": { "char_filter": [ "html_strip" ], "tokenizer": "standard" } } } } }, "mappings": { "dynamic_templates": [ { "int": { "match": "*", "match_mapping_type": "long", "mapping": { "type": "integer" } } }, { "cn": { "match": "*", "match_mapping_type": "string", "mapping": { "type": "text" } } } ], "properties": { "@timestamp": { "type": "date" }, "@version": { "type": "text" }, "app_push": { "type": "text" } } } }
注意
索引建立后,分片个数是不可以更改的
分片个数(数据节点计算)
分片个数是越多越好,还是越少越好了?根据整个索引的数据量来判断。
实列场景:
如果 IndexA 所有数据文件大小是300G,该怎么定制方案了?(可以通过Head插件来查看)
根据建议,至少需要 10 个分片。
结果: 建10个节点 (Node),Mapping 指定分片数为 10,满足每一个节点一个分片,每一个分片数据大概在30G左右。
SN(分片数) = IS(索引大小) / 30
NN(节点数) = SN(分片数) + MNN(主节点数[无数据]) + NNN(负载节点数)
Settings 和 Mappings的联系和区别
简单地说,就是
settings是修改分片和副本数的。
mappings是修改字段和类型的。
- 本文固定链接: https://www.phpmianshi.com/?id=243
- 转载请注明: admin 于 PHP面试网 发表
《本文》有 0 条评论