cassandra如何查询另一个节点的SSTable中存在的数据

时间:2015-09-23 18:41:55

标签: cassandra cassandra-2.0

从我对cassandra的理解 当客户端将数据写入单个服务器时,它会写入提交日志(仅附加没有随机搜索的日志)。然后将数据放入MEMTable,它驻留在内存中。然后承认说写是成功的。当MEMTable已满时,它将作为SSTable(顺序写入)

刷新到磁盘

在一个名为(node1,node2)的2个节点的多节点集群中。 当客户端将数据写入应该驻留在node2中的node1时(根据分配给节点的令牌)。

  1. 对应的提交日志在哪里停留Node1或Node2?
  2. 哪些MEMTable数据会转到node1还是Node2?
  3. 相应的SSTable在哪里停留Node1或Node2?
  4. 查询如何提供其他节点内存中的数据(当尝试从Node1读取时)?

1 个答案:

答案 0 :(得分:4)

客户端在发出写入时连接到的节点成为该写入的协调器。因此,在您的方案中,node1将是协调器。然后,Node1将计算写入的令牌哈希值,并查看此令牌是否由node2拥有。然后它会将写入转发给node2。

Node2将从node1接收写请求,因为它是本地写,所以将它添加到commitlog并在node2上记忆。这样,如果在刷新memtable之前node2被关闭,它可以通过重放commitlog来重建memtable。

当在node2上刷新memtable时,它将被保存到node2上的磁盘。

一旦在node2上完成写入,它将告诉node1写入成功,然后node1将告诉客户端写入成功。

读取的工作方式几乎相同。客户端向成为读取协调器的节点发出读取。协调器联系拥有数据令牌的节点,并将结果发送回协调器。协调器根据最新的时间戳合并结果,并将最终结果发送回客户端。