繁体   English   中英

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

[英]Why does a Cassandra query sometimes return one row and sometimes null?

所以我是 Cassandra 的新手,但我正在尝试一些奇怪的问题:

我从 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);
}

有谁知道这里可能出了什么问题?

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

对于缺少数据的副本,节点有时必须超载并丢弃突变。 您需要使用滚动nodetool repair -pr节点,一次一个节点,以免集群过载。

此外,我们建议使用强一致性的LOCAL_QUORUM进行读取和写入。 您可以在 Java 驱动程序上配置默认一致性:

datastax-java-driver {
  basic.request {
    consistency = LOCAL_QUORUM
  }
}

只需将其添加到您的application.confapplication.properties

如果您的集群反复过载,您应该考虑通过添加更多节点来增加容量。 干杯

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM