SolrCloud上的自定义分片或自动分片?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SolrCloud上的自定义分片或自动分片?相关的知识,希望对你有一定的参考价值。

我想为超过一千万篇新闻文章建立一个SolrCloud集群。看完这篇文章:qazxsw poi,我的计划如下:

  1. 添加前缀ED2001!记录ID,其中ED表示某些报纸来源,2001年是新闻文章发布日期的年份部分,即我想将特定年份发布的特定新闻纸源的所有新闻文章放入碎片。
  2. 使用router.name设置为compositeID创建集合。
  3. 添加文件?
  4. 查询集合?

实际上,我有一些问题:

  1. 如何根据此计划添加文档?更新集合/核心时是否必须指定特殊参数?
  2. 这被称为“自定义分片”吗?如果没有,什么是“自定义分片”?
  3. 对于我的情况,自动分片是一个更好的选择,因为当分片太大时,自动分片有一个分片分割功能吗?
  4. 我可以在没有_router_参数的情况下查询吗?

编辑@ 2015/9/2:

  1. 这就是我认为SolrCloud将会做的事情:“具体年份特定报纸来源的新闻文章数量往往在一个固定数字附近,例如每年ED有大约80,000篇文章,因此每个碎片的大小不会大幅增加。在明年ED的新闻文章中,我只需添加前缀'ED2016!'为了记录ID,SolrCloud将为我创建一个新的分片(其中包含所有ED2016文章),之后领导者会将这个新分片的副本传播到其他节点(每个节点除了领导者以外的每个副本?)“。我对吗?如果是的话,似乎不需要分裂碎片。
答案

答案1:如果有文档的架构(结构),那么你可以在Shards and Indexing Data in SolrCloud配置中提供相同的,或者你可以使用Solr的schema.xml模式索引文档。 schema-less模式将自动识别文档中的字段并对其进行索引。 schema-less模式的配置与solr中基于模式的配置模式略有不同。之后,您需要使用curl或solrj java api将文档发送到solr以进行索引。从本质上讲,solr为所有不同的操作提供了休息终点。您可以使用任何更适合您的语言编写客户端。

答案2:你在计划中提到的,使用schema-less,称为自定义分片。因为您决定特定文档应该去哪个分片。

答案3:如果不确定您目前和将来需要索引多少数据,我建议使用自动分片功能。随着索引大小的增加,您可以分割碎片并水平缩放solr。

答案4:我查看了solr文档,没有找到任何提及compositeId作为强制参数的地方。但在某些情况下,这可能会提高查询性能,因为它可以在查询所有分片时克服网络延迟。

答案5:自动分片的含义是根据创建分片时分配的哈希范围将文档路由到分片。它不会自动创建新的分片,只需为_route_指定一个新的前缀即可。因此,一旦索引的大小变得足够大,您可能需要将其拆分。点击这里查看compositeId

另一答案

这实际上是回答我自己的问题的指南:

我有点理解一些概念:

  1. “自定义分片”不是“自定义散列”。
  2. Solr平均将散列值拆分为默认散列行为。
  3. compositeId路由器应用“自定义散列”,因为它通过为shard_key / num-of-bits添加前缀来更改默认散列行为。
  4. 隐式路由器应用“自定义分片”,因为我们需要手动指定我们的文档将被发送到哪些分片。
  5. compositeId路由器仍然是自动分片,因为它是Solr,它看到shard_key前缀并将文档路由到特定分片。
  6. compositeId路由器需要指定numShards参数(可能是因为Solr需要为每个分片分配各种散列值空间范围)。

显然我的策略不起作用,因为我需要总是在Solr中添加新年的新闻文章,而且我无法预先预测多少分片。可以这么说,Implicit路由器对我来说似乎是一个可能的选择(我们创建需要的分片并将文档添加到我们打算使用的分片中)。

以上是关于SolrCloud上的自定义分片或自动分片?的主要内容,如果未能解决你的问题,请参考以下文章

mongoDB分片集群

solrcloud

基于Spring-AOP的自定义分片工具

MongoDB分片

MongoDB分片管理

mongo删除添加分片