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

Custom sharding or auto Sharding on SolrCloud?

我想为超过 1000 万篇新闻文章建立一个 SolrCloud 集群。看完这篇文章:Shards and Indexing Data in SolrCloud,我的计划如下:

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

实际上,我有一些问题:

  1. 如何根据这个方案添加文件?更新 collection/core 时是否必须指定特殊参数?
  2. 这叫“自定义分片”吗?如果不是,什么是“自定义分片”?
  3. 对于我的情况,自动分片是否是更好的选择,因为当分片太大时自动分片有分片分裂功能?
  4. 可以不带_router_参数查询吗?

编辑 @ 2015/9/2:

  1. 我认为 SolrCloud 会这样做:“特定年份的特定报纸来源的新闻文章数量往往在一个固定数字附近,例如,每年 ED 有大约 80,000 篇文章,因此每个分片的大小不会” t急剧增加,对于ED明年的新闻文章,我只需要在document ID上加上前缀'ED2016!',SolrCloud会为我创建一个新的shard(里面包含了ED2016的所有文章),稍后Leader会传这个新分片的副本到其他节点(每个副本每个节点而不是领导者?)”。我对吗?如果是的话,好像不需要分片了。

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

Answer-2: 你在计划中提到的,使用compositeId,叫做custom sharding。因为您正在决定特定文档应该转到哪个分片。

Answer-3: 如果不确定当前和将来需要索引多少数据,我建议使用自动分片功能。随着索引大小的增加,您可以拆分碎片并水平扩展 solr。

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

答案5:自动分片的意思是根据创建分片时分配的哈希范围将文档路由到分片。它不会自动创建新的分片,只是通过为 compositeId 指定一个新的前缀。因此,一旦索引增长到足够大,您可能需要拆分它。在此处检查 more

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

我有点理解一些概念:

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

显然我的策略行不通,因为我需要始终将新年新闻文章添加到 Solr,而且我无法提前预测有多少分片。可以这么说,隐式路由器对我来说似乎是一个可能的选择(我们创建我们需要的分片并将文档添加到我们打算的分片)。