首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Cassandra查询有时返回一行,有时返回null?

为什么Cassandra查询有时返回一行,有时返回null?
EN

Stack Overflow用户
提问于 2022-07-28 16:06:24
回答 1查看 86关注 0票数 0

所以我是卡桑德拉的新手,但我正在试验一些奇怪的问题:

我从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

这是我的存储库

代码语言:javascript
复制
@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);
}

有人知道这里会有什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-29 01:22:01

假设您在键空间上配置了多个副本,最可能的问题是您的副本不同步。如果您的应用程序使用的是ONELOCAL_ONE的一致性级别,它可能会碰到一个没有数据的副本。

要使副本丢失数据,节点必须有时重载并删除突变。您需要使用滚动的nodetool repair -pr (一次一个节点)来修复节点,这样就不会使集群负载更多。

此外,我们建议在读写时使用LOCAL_QUORUM的强一致性。您可以使用以下方法在Java驱动程序上配置默认一致性:

代码语言:javascript
复制
datastax-java-driver {
  basic.request {
    consistency = LOCAL_QUORUM
  }
}

只需将其添加到application.confapplication.properties中即可。

如果群集多次重载,则应考虑通过添加更多节点来增加容量。干杯!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73155897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档