[英]Why does the spark-cassandra-connector sometimes return incorrect data for date column?
[英]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);
}
有谁知道这里可能出了什么问题?
假设您在密钥空间上配置了多个副本,最可能的问题是您的副本不同步。 如果您的应用程序以ONE
或LOCAL_ONE
的一致性级别读取,它可能会遇到没有数据的副本。
对于缺少数据的副本,节点有时必须超载并丢弃突变。 您需要使用滚动nodetool repair -pr
节点,一次一个节点,以免集群过载。
此外,我们建议使用强一致性的LOCAL_QUORUM
进行读取和写入。 您可以在 Java 驱动程序上配置默认一致性:
datastax-java-driver {
basic.request {
consistency = LOCAL_QUORUM
}
}
只需将其添加到您的application.conf
或application.properties
。
如果您的集群反复过载,您应该考虑通过添加更多节点来增加容量。 干杯
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.