当前位置: 首页 > 知识库问答 >
问题:

卡桑德拉数据斯塔克斯驱动程序准备语句只评估“now()”一次

何升
2023-03-14

我正在使用卡桑德拉1.2.4和1.0.0的Datastax java驱动程序(通过Clojure的Alia,但我认为这在这里并不重要)。如果我准备一个带有 timeuuid 列的语句,并将 “now()” 放在 timeuuid 的值中,now() 在编译准备好的语句时被计算一次,然后就再也没有计算过了。

想象一下这个准备好的语句:"插入到some_table(id, time)值(?, now())"

在你准备好它之后,每次你执行它,now()总是一样的,不管你什么时候执行它。

您可以使用最小/最大 timeuuid 函数来解决此问题,但随后您将失去 timeuuid 值唯一性的所有好处。实际上,我认为这意味着我无法使用准备好的语句插入 timeuuid。

我错过了什么吗?还是缺少了一个功能?

共有1个答案

焦光霁
2023-03-14

这听起来像是卡珊德拉方面的一个错误/缺点。或者,您可以将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

 类似资料: