所以我是卡桑德拉的新手,但我正在试验一些奇怪的问题:
我从cassandra客户端运行这个简单的查询:
select * from emps where causality ='bb4148ef-e9ff-4794-9ab2-d0e55a005d59'
我只得到了一张唱片。现在,我有了一个java存储库实现,它运行相同的查询,没有任何异常或错误,即使我可以看到生成的查询是正确的,我也会得到"null“。
2022-07-28T18:55:19.122+0300 DEBUG Executing CQL Statement [select * from emps where causality = ?]
如果我删除where语句,一切都正常:select * from empswhere limit 1
这是我的存储库
@Repository
public interface CassandraUserSpinRepository extends CassandraRepository<Emps, String> {
// works correctly
//@Query("select * from emps limit 1")
//
// returning null even if a record exist in db
// i check and causality parameter is sended correctly
@Query("select * from emps where causality = :causality")
SpinResult findByCausality(@Param("causality") String causality);
}有人知道这里会有什么问题吗?
发布于 2022-07-29 01:22:01
假设您在键空间上配置了多个副本,最可能的问题是您的副本不同步。如果您的应用程序使用的是ONE或LOCAL_ONE的一致性级别,它可能会碰到一个没有数据的副本。
要使副本丢失数据,节点必须有时重载并删除突变。您需要使用滚动的nodetool repair -pr (一次一个节点)来修复节点,这样就不会使集群负载更多。
此外,我们建议在读写时使用LOCAL_QUORUM的强一致性。您可以使用以下方法在Java驱动程序上配置默认一致性:
datastax-java-driver {
basic.request {
consistency = LOCAL_QUORUM
}
}只需将其添加到application.conf或application.properties中即可。
如果群集多次重载,则应考虑通过添加更多节点来增加容量。干杯!
https://stackoverflow.com/questions/73155897
复制相似问题