分片究竟创建多少个合理
你分配的每个分片都是有额外的成本的:
1.每个分片本质上就是一个Lucene索引, 因此会消耗相应的文件句柄, 内存和CPU资源
2.每个搜索请求会调度到索引的每个分片中. 如果分片分散在不同的节点倒是问题不太. 但当分片开始竞争相同的硬件资源时, 性能便会逐步下降
3.ES使用词频统计来计算相关性. 当然这些统计也会分配到各个分片上. 如果在大量分片上只维护了很少的数据, 则将导致最终的文档相关性较差
根据这条限制: ElasticSearch推荐的最大JVM堆空间是30~32G, 所以把你的分片最大容量限制为30GB, 然后再对分片数量做合理估算. 例如, 你认为你的数据能达到200GB, 我们推荐你最多分配7到8个分片.
索引创建之后分片的数量是不可改变的!!!
后期可以通过添加节点的方式让分片分配到不同的节点 会使查询速度变快
put /testindex
{
"settings" : {
"number_of_shards" : 12,
"number_of_replicas" : 1
}
}
//修改分片的副本数量
PUT /testindex/_settings
{
"number_of_replicas" : 2
}