solr/elasticsearch 搜索请求是由分片还是副本处理的?
solr/elasticsearch search request is handled by shards or replica?
我设计了solr/elasticsearch搜索,我有一个特别的问题。假设我有 10K 次搜索 request/seconds。那么我将在哪里搜索碎片或副本。我知道副本是碎片的备份。
如果它发生在分片上那么 how/why 如果它发生在副本上那么 how/why ?
主分片是数据的原始副本,而副本分片是原始数据的副本。
虽然索引总是在原始副本(即主分片)上发生,然后复制到副本分片,但搜索可以在任何副本上发生,而不管数据的原始副本或副本。
因此创建副本不仅是为了容错,如果你丢失了一个副本,它可以从它的副本中恢复,而且如果一个分片过载(主要或副本)然后搜索发生在负载最少的副本,即另一个副本。
请参考 Adaptive replica selection in ES 上 how/why 副本改善搜索延迟。
如果您需要更多信息,请随时告诉我。
根据 OP 评论进行编辑:
从 ES 7 开始,自适应副本选择默认启用,因此它会发送到负载最少的副本,但即使所有分片都未充分利用,它仍然不会将所有搜索请求发送到主分片以避免超载。同样在 ARS(自适应副本选择)之前,ES 曾经以循环方式发送这些搜索请求以避免一个分片过载。
我设计了solr/elasticsearch搜索,我有一个特别的问题。假设我有 10K 次搜索 request/seconds。那么我将在哪里搜索碎片或副本。我知道副本是碎片的备份。
如果它发生在分片上那么 how/why 如果它发生在副本上那么 how/why ?
主分片是数据的原始副本,而副本分片是原始数据的副本。
虽然索引总是在原始副本(即主分片)上发生,然后复制到副本分片,但搜索可以在任何副本上发生,而不管数据的原始副本或副本。
因此创建副本不仅是为了容错,如果你丢失了一个副本,它可以从它的副本中恢复,而且如果一个分片过载(主要或副本)然后搜索发生在负载最少的副本,即另一个副本。
请参考 Adaptive replica selection in ES 上 how/why 副本改善搜索延迟。
如果您需要更多信息,请随时告诉我。
根据 OP 评论进行编辑:
从 ES 7 开始,自适应副本选择默认启用,因此它会发送到负载最少的副本,但即使所有分片都未充分利用,它仍然不会将所有搜索请求发送到主分片以避免超载。同样在 ARS(自适应副本选择)之前,ES 曾经以循环方式发送这些搜索请求以避免一个分片过载。