从我对cassandra的理解 当客户端将数据写入单个服务器时,它会写入提交日志(仅附加没有随机搜索的日志)。然后将数据放入MEMTable,它驻留在内存中。然后承认说写是成功的。当MEMTable已满时,它将作为SSTable(顺序写入)
刷新到磁盘在一个名为(node1,node2)的2个节点的多节点集群中。 当客户端将数据写入应该驻留在node2中的node1时(根据分配给节点的令牌)。
答案 0 :(得分:4)
客户端在发出写入时连接到的节点成为该写入的协调器。因此,在您的方案中,node1将是协调器。然后,Node1将计算写入的令牌哈希值,并查看此令牌是否由node2拥有。然后它会将写入转发给node2。
Node2将从node1接收写请求,因为它是本地写,所以将它添加到commitlog并在node2上记忆。这样,如果在刷新memtable之前node2被关闭,它可以通过重放commitlog来重建memtable。
当在node2上刷新memtable时,它将被保存到node2上的磁盘。
一旦在node2上完成写入,它将告诉node1写入成功,然后node1将告诉客户端写入成功。
读取的工作方式几乎相同。客户端向成为读取协调器的节点发出读取。协调器联系拥有数据令牌的节点,并将结果发送回协调器。协调器根据最新的时间戳合并结果,并将最终结果发送回客户端。