cassandra插入和更新

时间:2018-08-02 22:07:01

标签: java spring-mvc cassandra

我的cassandra数据库有一个名为“ createdClientId”和“ updateClientId”的列。我的模型类有一个名为id(primary_key),createdClientId和updateClientId的字段。我的请求是一个后继请求,其中有一个客户机ID作为标头,并且该客户机ID在插入时需要是列“ createdClientId”和“ updateClientId”的值,并且在更新时应仅更新“ updateClientId”

我的岛看起来像这样

public void getdata(Model model, String clientId) {
        model.setcreatedClientId(clientId);
        model.setupdateClientId(clientId);
        String insert = SimpleJson.writeValueAsString(model);
        // insert query
String query = PropertyManager.getProperty("prop") + insert + "' IF NOT EXISTS;";
ResultSet rs = cassandraTemplate.getCqlOperations().queryForResultSet(query);
        if (rs != null) {
            LOGGER.log(DEBUG, "Result set is not null");
            if (rs.wasApplied()) {
                response.setMessage(RESPONSE_MESSAGE + " Created successfully");
            } else if (!rs.wasApplied()) {
                model.setUpdatedBy(clientId);
                // update query
                query = PropertyManager.getProperty("prop") + insert + "'";
                cassandraTemplate.getCqlOperations().queryForResultSet(query);
                response.setMessage(RESPONSE_MESSAGE + " Updated successfully");
            }
        }
    }

现在,当我插入数据时,它可以正常工作(即,两个createdClientId和updateClientId字段都使用相同的client-id值进行保存),但是当我更新时,它应该仅更新updateClientId,而不是它也应该更新createdClientId。

1 个答案:

答案 0 :(得分:1)

createdClientId也在每次更新的原因是此行
每次执行model.setupdateClientId(clientId);,然后创建插入字符串
String insert = SimpleJson.writeValueAsString(model);,并在两种情况下都使用此字符串,因此createdClientId得到更新。
一种解决方案是将您的数据分为两个单独的Cassandra表:一个表仅将createdClientId个数据持久保存一次,而另一个表则支持包含updatedClientId的频繁更新(两个表都包含{{1} }作为主键),并在第一个表查询中使用clientId
这里的缺点是您必须为每个发帖请求向Cassandra发送两个请求,但是如果您使用'IF NOT EXISTS'

,则第一个表的请求仅应执行一次