小编Jul*_*lia的帖子

Cassandra - 写入不会失败,但不会插入值

我有一个由 3 个 Cassandra 2.0 节点组成的集群。我的应用程序编写了一个测试,尝试将一些数据写入 Cassandra 或从 Cassandra 读取一些数据。一般来说,这工作得很好。

\n\n

好奇的是,在我重新启动计算机后,此测试将失败,因为写入后我读取了之前写入的相同值,并且我得到的是 null 而不是该值,但写入时也不例外。\n如果我手动截断使用的列族,测试将通过。之后我可以按照我想要的频率执行这个测试,它一次又一次地通过。此外,Cassandra 中是否有值并不重要。结果总是一样的。

\n\n

如果我查看 CLI 和 CQL-shell,会发现两种不同的视图:

\n\n

cassandra-cli

\n\n

在此输入图像描述

\n\n

有谁知道出了什么问题吗?CLI中的时间戳在重新执行后更新,所以这似乎是一个读取问题?

\n\n

我的代码的一部分:\n对于我尝试过的插入

\n\n
Insert.Options insert =   QueryBuilder.insertInto(KEYSPACE_NAME,TABLENAME)\n                .value(ID, id)\n                .value(JAHR, zonedDateTime.getYear())\n                .value(MONAT, zonedDateTime.getMonthValue())\n                .value(ZEITPUNKT, date)\n                .value(WERT, entry.getValue())\n                .using(timestamp(System.nanoTime() / 1000));\n
Run Code Online (Sandbox Code Playgroud)\n\n

\n\n
Insert insert = QueryBuilder.insertInto(KEYSPACE_NAME,TABLENAME)\n                .value(ID, id)\n                .value(JAHR, zonedDateTime.getYear())\n                .value(MONAT, zonedDateTime.getMonthValue())\n                .value(ZEITPUNKT, date)\n                .value(WERT, entry.getValue());\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的选择看起来像

\n\n
Select.Where select = QueryBuilder.select(WERT)\n            .from(KEYSPACE_NAME,TABLENAME)\n            .where(eq(ID, id))\n            .and(eq(JAHR, zonedDateTime.getYear()))\n            .and(eq(MONAT, zonedDateTime.getMonthValue()))\n            .and(eq(ZEITPUNKT, Date.from(instant)));\n
Run Code Online (Sandbox Code Playgroud)\n\n

一致性级别为 QUORUM(两者均适用)和复制因子 …

cql cassandra cassandra-cli datastax-java-driver cassandra-2.0

5
推荐指数
1
解决办法
3872
查看次数