【问题标题】:How does cassandra Query data that is present in another node's SSTablecassandra如何查询另一个节点的SSTable中存在的数据
【发布时间】:2015-12-21 05:10:38
【问题描述】:

根据我对 cassandra 的理解 当客户端将数据写入单个服务器时,它会写入提交日志(仅附加日志而不进行随机搜索)。然后将数据放入驻留在内存中的 MEMTable 中。然后确认说写入成功。当 MEMTable 已满时,它会作为 SSTable(顺序写入)刷新到磁盘

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

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

【问题讨论】:

    标签: cassandra cassandra-2.0


    【解决方案1】:

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

    Node2 将接收来自 node1 的写入请求,并且由于它是本地写入,因此会将其添加到 node2 上的提交日志和内存表中。这样一来,如果 node2 在刷新内存表之前宕机,它可以通过重播提交日志来重建内存表。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-13
      • 2018-11-01
      • 2014-11-11
      • 1970-01-01
      • 2019-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多