强制Cassandra批处理以我的命令java执行

时间:2015-02-18 10:22:39

标签: java cassandra

我认为如果我在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());

1 个答案:

答案 0 :(得分:6)

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

因为您提及"交易"在你的例子中似乎关心操作的排序,我建议你看一下lightweight transactions的用例。