【问题标题】:Query path in cassandracassandra中的查询路径
【发布时间】:2013-09-08 22:59:01
【问题描述】:

以下查询在 Cassandra 中的执行路径是什么: - 来自一个带有令牌 1(Node1)的 Cassandra 节点的 5 行 - 来自一个 Cassandra 节点的 5 行,带有令牌 2(Node2) - 来自一个 Cassandra 节点的 5 行,令牌为 3(Node3)

客户端向 Node1 发送查询。 - 这个查询在 3 个节点中执行的顺序是什么? - Node1 如何将此查询传播到 node2 和 node3? - Node1 合并来自 node2 和 node3 的行以提供完整的查询结果?

【问题讨论】:

  • 您发出的确切查询是什么?
  • 从所有 3 个节点获取许多行的查询。我想了解这个查询处理在 Cassandra 节点中是如何工作的,如问题示例中给出的那样。
  • 您是否在查询SELECT * FROM mytable;SELECT * FROM mytable WHERE key in ('key1', 'key2');?它对其处理方式有所不同。如果你用的是thrift接口,你是用get_range_slices还是multiget_slice?
  • 我还没有发出任何查询。获得理解。在我开始创建列族之前还有一些时间。我想先了解一下 select * 的情况。如果您能对“行键上的 where 子句”有所了解,那也会很有用。

标签: nosql cassandra bigdata


【解决方案1】:

您可以发出两种类型的查询来从多个分区检索数据(我将使用 CQL 术语 - 分区是过去称为行的内容)。使用哪一个取决于您是否知道分区键。

我将假设一个没有任何集群键的简单模式:

CREATE TABLE mytable (key text PRIMARY KEY, field text);

如果不知道分区键,可以发出

SELECT * FROM mytable LIMIT 15;

这将返回按分区哈希排序的前 15 行。因为它是按散列排序的,所以这种查询通常只有在您想要翻阅所有数据时才有用。

接收查询的节点(此查询的协调器)首先将其转发给具有最低令牌和副本的节点。它们最多返回 15 行。如果更少,则协调器将转发到具有第二低令牌和副本的节点。这种情况会一直发生,直到找到 15 行,或者直到所有节点都已联系。因此,此查询可能会联系集群中的每个节点。

如果复制因子大于 1,可能会返回冲突的结果。协调器查看时间戳以合并结果并仅将最新的返回给客户端。

如果你知道分区键,你可以使用

SELECT * FROM mytable WHERE key in ('key1', 'key2');

协调器将此视为接收单独的查询:

SELECT * FROM mytable WHERE key = 'key1';
SELECT * FROM mytable WHERE key = 'key2';

它将消息转发到为每个键保存数据的节点。每个键有一个,因此这些查询是并行执行的。响应在协调器上收集、合并,因此只保留最新的,然后发送给客户端。

【讨论】:

  • 谢谢 Richard。所以从您的回答中,我了解到在涉及多个节点的任何查询中,co-coordinator node 负责剖析查询并将其发送到多个节点。 Co-coordinator 节点还合并结果并发送回客户端。另一个相关问题:Cassandra 是否有可能应用一些逻辑——比如 RDBMS 中的存储过程在获取的数据上——或者像 HBase 中的协处理器?
  • 是的,协调器负责转发和合并。您不能在 Cassandra 中运行任何查询代码,唯一可以做的事情(在 2.0 中,刚刚发布)是在插入时运行触发器。
  • 再次感谢 Richard。我从 CQL 文档中了解到“在 CQL 中,为 PRIMARY KEY 定义列的顺序很重要。键的第一列称为分区键。它具有属性共享相同分区键的所有行(实际上甚至跨表)都存储在同一个物理节点上。” - 分区键与行键有什么关系? - 这里的跨表是什么意思?
  • 令人困惑 - 分区键是行键的新名称。它是经过哈希处理以确定数据存储在哪些节点上的密钥。跨表意味着具有相同分区键的分区存储在相同的节点上,即使在不同的表中。
  • 谢谢理查德。它有助于我理解。
猜你喜欢
  • 1970-01-01
  • 2017-02-02
  • 2021-09-20
  • 2022-01-14
  • 2018-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多