gpt4 book ai didi

java - Cassandra 插入和更新

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:46:58 27 4
gpt4 key购买 nike

我的 cassandra 数据库有一个名为“createdClientId”和“updateClientId”的列。我的模型类有一个名为 id(primary_key)、createdClientId 和 updateClientId 的字段。我的请求是一个 post 请求,它有一个 client-id 作为标题,并且该 client 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 而它不应该。

最佳答案

createdClientId每次也更新的原因是这一行
model.setupdateClientId(clientId); 每次都执行,然后你创建 insert string
String insert = SimpleJson.writeValueAsString(model); 并使用这个字符串这两种情况,所以 createdClientId 得到更新。
一种解决方案是将您的数据分成两个单独的 Cassandra 表:一个只保留一次 createdClientId 数据,另一个表支持您的频繁更新,其中包含 updatedClientId(两者都以 clientId 作为主键)并使用 'IF NOT EXISTS' 进行第一个表查询。
这里的缺点是您必须为每个发布请求向 Cassandra 发出两个请求,但是如果您使用 'IF NOT EXISTS'

,第一个表的请求应该只执行一次

关于java - Cassandra 插入和更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51662782/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com