【问题标题】:Force Cassandra batch to execute in my order java强制 Cassandra 批处理按我的顺序执行 java
【发布时间】:2025-11-30 06:55:01
【问题描述】:

我想如果我在 Cassandra 中执行批处理(使用 java 驱动程序),无论更新/插入/删除放在哪里,它总是按照更新、插入、删除的顺序执行。 就像下面的代码,在我运行它之后,表格是空的。 如何强制 cassandra 执行我的订单?

        PreparedStatement trybach = MyConnection
        .getSession()
        .prepare(
                "BEGIN BATCH USING TIMESTAMP"           
                        + "   INSERT INTO transaction_test.users(email,age,firstname,lastname) VALUES ('try',18,'fname','lname');"
                        +  "  DELETE FROM transaction_test.users WHERE email ='try';"
                        + "   UPDATE transaction_test.users  SET age= 13 WHERE email= 'try';"                               
                        +

                "APPLY BATCH");
MyConnection.getSession().execute(trybach.bind());

【问题讨论】:

    标签: java cassandra


    【解决方案1】:

    Cassandra 中的批处理并不意味着批处理语句执行的任何特定顺序。事实上,所有语句都将使用相同的时间戳执行,就像所有语句同时执行一样。在您的示例中,删除语句将对插入/更新有效,因为它只会使用与行创建时间相同的时间戳将该行标记为已删除。

    由于您在示例中提到“事务”并且似乎关心操作的顺序,因此我建议您查看 lightweight transactions 以了解您的用例。

    【讨论】:

      最近更新 更多