您的位置:首页 > 其它

有关ElasticSearch的一些备忘事项

2014-09-10 16:33 381 查看
1. ElasticSearch中文档的分布公式

shard = hash(routing) % number_of_primary_shards

默认的routing是_id,也可以在索引时指定routing值(是routing值,而不是具体那个shard)。

2. ES中分片的数量在索引创建后是不可更改的,要使用超分配(overallocation)的方法尽量预估出适当的分片数量,以为将来的水平扩展作好准备。

3. 为什么ES不支持分片分裂功能。

 分片分裂操作相当于重新索引源数据,其相对于复制一个分片数据到另一个节点要耗资源(包括时间消耗)的多。
分裂操作所是指数级增长的。从一个分片开始,分裂成2个,然后分裂成4个、8个、16个等,它无法让你直接达到提升分片容量的目的。
分裂操作需要有足够的存储空间来存放被分列出的分片数据的副本,通常情况是,当你认识并决定要进行扩容时,你的节点已经没有足够的存储空间进行分裂操作。

4. 确定分片数量(或者每个分片大小)的最佳实践方法。

使用和计划在生产环境中使用的配置接近的一台服务器搭建一个单节点的ES集群。
在这个ES集群中创建和生产环境中所要求的配置相同(指字段的数量、类型、内容分析器等等)的索引,但这个索引只有一个分片,并且复制系数为0。
自用这个ES集群使用真实的数据建立索引。
根据生产环境所要求的并发量、响应时间、检索要求、聚合要求等进行搜索测试。
  当服务出现不满足生产要求时(主要指性能相关的指标)即可得出每个分片的可承载数据量,结合整体的数据量评估进而推算出需要的分片数量。

5. 不同种类、不同规模的数据使用ES索引时的结构设计。

按照ES的官方文档Index相当于关系数据库中的Database,Type相当于关系数据库中的Table,因此,我们在将关系数据库中的数据使用ES进行索引时,很容易按照这个概念来设计索引结构,即一个Database对应一个Index,各个表对应不同的Type。但在实际应用中,我们要注意,ES中一个Index下的所有Type是混在一起索引的,而且ES中的分片数量是和Index绑定的,并且设定分片数量后就不能修改。我们要做的是将表结构类似且数据量相当的表放到同一个Index的不同Type中,如果表结构差异较大,或者数据量差异较大(有的几十万,有的上千万甚至上亿),我们应使用不同的Index来设定不同的分片数量,以达到索引性能和检索性能的最优化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Lucene elasticsearch