2

我们有一个产品(我们称之为“prod1”),我们想与另一个产品“集成”(我们称之为“prod2”),当“集成”意味着 prod1 + prod2 将是“prod3”时。我们还计划在 prod3 中添加更多“产品”。

到现在为止还挺好。

我们使用 Solr 为这两个产品中的用户提供搜索,并且两个索引都可能非常非常大,并且每秒接收很多电话。如果我们将所有内容都留在一台服务器中,吞吐量将是一团糟。

所以,我们正在考虑使用分片(我相信这是正确的术语,如果我错了,对不起),但是,我对此有一些疑问:

  1. 是否可以按“每台机器一个产品索引”或类似的方式拆分索引?如果是,你建议我怎么做?

  2. 如果(问题 1 == true)那么让我们假设 prod1 索引将是 machine1,prod2 索引 machine2,我可以在 machine1 和 2 中进行搜索“合并”结果与分数、偏移量等,“简单”和正确的方法?

  3. 我读了一些关于复制因子的东西,但我认为我理解不正确。它的具体目的是什么?

  4. 我不确定我是否在这里使用了正确的术语,所以,也许有人可以澄清一下究竟什么是核心、分片等。这种“简单”的疑问在我的团队中产生了很多误解。

到现在为止,这是个问题。也许我稍后会编辑它并添加更多。

提前致谢。

4

1 回答 1

9

按顺序回答您的问题:

  1. 由您决定如何分发文档。您选择要将文档索引到哪个服务器,以及是否决定为一个产品索引 pr 执行此操作。服务器,这是您的决定(根据文档源自的产品选择用于索引的服务器)。

  2. 是的。shards=- 发送到 Solr 的查询字符串的参数指示应该搜索哪些服务器并将其合并到一个响应中。只要您不认为偏移量过高是一个可能的问题,这应该不是问题(高偏移量的问题是 Solr 必须从每个服务器检索最多(偏移量)文档才能能够对所有分片进行评分)。

    shards=server1:8080/solr/corename,server2:8080/solr/corename

  3. 复制因子与 SolrCloud 相关,它隐藏了手动分片的一些复杂性(但也引入了一些)。使用 SolrCloud,Solr 将自行决定使用哪些节点进行存储,并且复制因子告诉 Solr 您希望在多少台服务器上存储文档。如果您的复制因子是 3,那么在文档变得无法访问之前,至少有 3 个服务器必须发生故障。如果您要进行手动分片,则必须自己设置复制并知道哪些服务器是备份服务器,就像使用常规 Solr 设置一样。

  4. Shard = 仅将所有文档的子集保存在索引中的服务器,core = 一个服务器上的一个索引 - 服务器可能包含多个核心,其中每个核心是一组单独的配置和架构(以前你只能有一个核心在每个 Solr 实例中 - Solr 有一个索引,仅此而已)。SolrCloud 首次与 Solr 4.0 一起发布,并开始获得一些关注。

Solr Wiki是开始挖掘有关这些概念的更多信息的好地方。

于 2012-11-29T22:12:57.400 回答