【问题标题】:DELETE rows stored on a particular node删除存储在特定节点上的行
【发布时间】:2014-10-28 15:47:36
【问题描述】:

我如何编写 CQL 3 DELETE 行规范WHERE 子句),它将仅选择存储在给定节点上的行?如果这不可能,是否有一个SELECTrelationWHERE 子句)将指示哪些行存储在特定节点上?

我想这样做,以便我可以在每个数据存储节点上运行一个管家守护程序(用 Java 编写),它会从该节点删除旧记录,因此它可以确保其节点不会耗尽磁盘空间。由于我正在编写一个守护进程,而不是执行一次性清理,因此不适合使用nodetool 程序来查询存储在节点上的令牌范围。

【问题讨论】:

    标签: cassandra delete-row


    【解决方案1】:

    这是一种可行的方法(但请参阅下文以获得更好的想法)。如果您没有启用 vnode,您可以识别令牌范围(从 nodetool ring 命令开始),然后将它们用作删除命令的一部分。例如:

    delete from MyTable where 
        token(MyPK) >= Token1 and 
        token(MyPK) < Token2 and
        (your delete logic here)
    ;
    

    然而,一个更简单、更安全的方法是让 Cassandra 找出数据在哪里,然后从任何节点执行此操作:

    delete from MyTable where 
        (your delete logic here)
    ;
    

    【讨论】:

      【解决方案2】:

      【讨论】:

      • nodetool 可以使用 cqlsh 一次性删除记录,但我想编写一个客户端程序来做家务。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 2019-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多