我正在使用卡桑德拉1.2.4和1.0.0的Datastax java驱动程序(通过Clojure的Alia,但我认为这在这里并不重要)。如果我准备一个带有 timeuuid 列的语句,并将 “now()” 放在 timeuuid 的值中,now() 在编译准备好的语句时被计算一次,然后就再也没有计算过了。
想象一下这个准备好的语句:"插入到some_table(id, time)值(?, now())"
在你准备好它之后,每次你执行它,now()总是一样的,不管你什么时候执行它。
您可以使用最小/最大 timeuuid 函数来解决此问题,但随后您将失去 timeuuid 值唯一性的所有好处。实际上,我认为这意味着我无法使用准备好的语句插入 timeuuid。
我错过了什么吗?还是缺少了一个功能?
这听起来像是卡珊德拉方面的一个错误/缺点。或者,您可以将uuid实例作为值传递给准备好的语句:
插入到some_table (id,时间) 值 (?,?) 中
然后使用从UUID命名空间创建的UUID实例http://www.datastax.com/drivers/java/apidocs/com/datastax/driver/core/utils/UUIDs.html#timeBased()在java驱动程序或com.eaio.uuid中。UUID实例,您可以使用(uniquetime UUID(java.util.Date.))从clojure包装器mpenet/tardis(它已经在alia的dev/test依赖项中)创建后者。
我可能会直接把uuid包在alia身上,tardis在某些方面更灵活,但前者是官方的东西。
https://github.com/mpenet/tardis
我已经与c *人确认这是可以改进的东西,如果你想跟踪它的进度,这里有一个问题:https://issues.apache.org/jira/browse/CASSANDRA-5616
我正在尝试运行以下查询 我将Long的Java列表绑定为参数,并得到一个异常 如果我尝试使用(?),它期望绑定单个Long项目,但我需要一个集合 语法有误吗?
我在Datastax java驱动程序中使用了下面的批处理准备语句代码。 这个Batch语句是已记录还是未记录?
我已经用下面的CQL创建了一个表:我想运行查询,按演员姓名(不区分大小写)查找所有视频。 我想从表中选择所有行,而不管演员的名字大小写,例如“汤姆·汉克斯”、“汤姆·汉克斯”、“汤姆·汉克斯”等。 有可能吗?
我正在用Cassandra开始一个新项目(并计划使用最新的稳定版(1.2.x))。我尝试过几种不同的Java库,如Hector、Astyanax、Cassandra jdbc。。。 其中,(简而言之)我的选择是阿斯蒂亚纳克斯。但后来我也发现并尝试了数据堆栈的Java驱动程序,它支持新的CQL二进制协议,如果你只使用CQL,它要干净得多。而且1.0.0 GA版本似乎很快就会发布。 你会推荐哪一个?谢
我相信我已经在Cassandra csharp驱动程序(版本2.7.3)的StatementFactory中发现了一个关于如何缓存准备好的语句的逻辑的bug。下面是使用案例。 我们发现,运行此删除后,只有第一个请求成功。在深入了解StatementFactory的源代码之后 您可以看到缓存仅使用 cql 语句。在我们的例子中,我们在不同的键空间(又名会话)中具有相同的表名。两个查询中的 cql 语
我应该如何使用数据斯塔克斯java卡桑德拉驱动程序检查空结果集? 假设我正在执行以下查询"SELECT*Frommy_tableWHERE mykey=某物" 查询不匹配的可能性很大。以下代码不起作用: