在Elassandra中,如何在将查询分发到节点时确定token_range?在Elassandra节点之间复制数据时会发生什么情况?如何过滤重复的结果?
token_range
ws51t4hk1#
我的理解是,查询以类似于Cassandra的方式围绕集群进行。Elasticsearch并不关心数据复制。他们创建自己的表来创建搜索信息,这些表通过标准的Cassandra机制进行复制。如果你了解Cassandra复制的工作原理,那么Elasticsearch的数据也会做同样的事情。发生 * 过滤 * 是因为每个搜索节点都被给予了一个不重叠的令牌范围来处理。换句话说,一个节点被要求返回1、2、3的结果,下一个节点返回4、5、6的结果,第三个节点返回7、8、9的结果。因此,不会有重叠,也不会发生实际的过滤。
kiayqfof2#
Elassandra根据目标索引的search_strategy_class将查询分发到节点,有两种策略:PrimaryFirstSearchStrategy(预设值)和RandomSearchStrategy。
search_strategy_class
PrimaryFirstSearchStrategy
RandomSearchStrategy
每个节点都参与查询,作为主节点负责返回自己拥有的文档,当一个节点宕机时,下一个副本将作为替代。
当RF〉1时,整个环只需要一个节点子集就可以到达,随机搜索策略利用了这一点,通过随机选择这样一个节点子集来提高搜索效率。这两种策略都根据上述行为向每个子查询添加token_range过滤器。因此,过滤发生在本地,而不是在协调器节点中。
2条答案
按热度按时间ws51t4hk1#
我的理解是,查询以类似于Cassandra的方式围绕集群进行。
Elasticsearch并不关心数据复制。他们创建自己的表来创建搜索信息,这些表通过标准的Cassandra机制进行复制。如果你了解Cassandra复制的工作原理,那么Elasticsearch的数据也会做同样的事情。
发生 * 过滤 * 是因为每个搜索节点都被给予了一个不重叠的令牌范围来处理。换句话说,一个节点被要求返回1、2、3的结果,下一个节点返回4、5、6的结果,第三个节点返回7、8、9的结果。因此,不会有重叠,也不会发生实际的过滤。
kiayqfof2#
Elassandra根据目标索引的
search_strategy_class
将查询分发到节点,有两种策略:PrimaryFirstSearchStrategy
(预设值)和RandomSearchStrategy
。主要优先搜索策略
每个节点都参与查询,作为主节点负责返回自己拥有的文档,当一个节点宕机时,下一个副本将作为替代。
随机搜索策略
当RF〉1时,整个环只需要一个节点子集就可以到达,随机搜索策略利用了这一点,通过随机选择这样一个节点子集来提高搜索效率。
这两种策略都根据上述行为向每个子查询添加
token_range
过滤器。因此,过滤发生在本地,而不是在协调器节点中。