Solr节点在分片中的物理空间利用率

时间:2013-12-09 09:56:55

标签: solr solrcloud

如果SolrCloud中某个分片的节点的物理空间已满,会发生什么?索引是否会请求这些节点,或者该分片是否会重定向到其他具有空格的分片?

1 个答案:

答案 0 :(得分:1)

简短的回答不容易,不会自动因为特定的分片已满。原因是32位散列范围在每个分片之间均匀分配,Solr使用杂音散列算法,这使得每个分片中的文档数量保持平衡(粗略),因此大多数节点将开始达到相同的限制,几乎在同时,您需要监控索引并提前或之后进行规划。在此上下文中有两个选项首先,自定义哈希允许您根据某些常用字段值(例如租户ID)将文档路由到特定分片。另一个例子是基于类别路由文档。使用自定义散列时最大的担忧是它可能会创建不平衡的分片 你的集群。第二个选项是Shard splitting,允许您将现有分片拆分为两个子分片。要进行分片拆分,请使用集合API的SPLITSHARD操作将现有分片拆分为两个子分片。在拆分过程完成后发出“硬”提交以使新的子分区处于活动状态。从群集中卸载原始分片。

但是如果您仍然选择将文档强制转换为特定的分片,因为您知道其他分片已满,您可以这样做:Solr 4.5添加了使用router.name参数指定路由器实现的功能。如果使用“compositeId”路由器,则可以发送文档ID中带有前缀的文档,该文档将用于计算Solr用于确定将文档发送到索引的分片的哈希值。前缀可以是您想要的任何内容(例如,它不必是分片名称),但它必须是一致的,因此Solr的行为始终如一。例如,如果您想为客户共同查找文档,则可以使用客户名称或ID作为前缀。如果您的客户是“IBM”,例如,使用ID为“12345”的文档,则应将前缀插入文档ID字段:“IBM!12345”。感叹号('!')在这里至关重要,因为它定义了引导文档的分片。

您可以在此处详细了解:https://cwiki.apache.org/confluence/display/solr/Shards+and+Indexing+Data+in+SolrCloud