问题标签 [timeuuid]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1035 浏览

scala - Casting cassandra timestamp column as timeuuid

I'm getting events from Kafka and storing into Cassandra. Parsing json which contains fields eventID, sessionID, timestamp, userID to create columns for Cassandra table which looks like this:

and in code:

I need to add timestamp column as timeuuid. Since I'm parsing from json, extracted all values from header and created columns in this fashion:

This part:

is generating Error

java.lang.NumberFormatException: For input string: "2019-05-09T09:00:52.553+0000" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)

Even tried: java.util.UUID.fromString(x._1("timestamp").toString, also generating same Error. How to properly cast/convert timestamp as timeuuid and insert into Cassandra via spark job

0 投票
1 回答
269 浏览

cassandra - 如何更新 cassandra 中的 timeuuid 列

如何更新timeuuidCassandra 中的列?

我尝试了以下查询

它失败并显示消息

InvalidRequest:来自服务器的错误:code=2200 [Invalid query] message="timeuuid 类型的“mycolumn”的无效字符串常量 (99b47d70-b465-11e9-8080-808080808080)”

所以我尝试将常量值转换为 timeuuid

这次它失败并出现错误

SyntaxException:第 1:34 行在输入“(”处没有可行的替代方案(UPDATE mytable SET mycolumn = cast

我看到了有关 cast 函数的文档,并且timeuuid没有在任何其他类型的输出类型下列出。

https://docs.datastax.com/en/dse/5.1/cql/cql/cql_reference/refCqlFunction.html#refCqlFunction__cast

这是否意味着 timeuuid 列一旦创建就无法更新?

更新: 我在上面的页面上看到了以下信息

UPDATE 语句 SET 子句不能用于更改 PRIMARY KEY 字段;因此,只有当目标字段不是 PRIMARY KEY 字段的一部分时,才能设置新的 timeuuid。

因此,可以更新 timeuuid 列。mycolumn不是 PRIMARY 键的一部分。

更新 2:

即使以下命令也失败并出现相同的错误no viable alternative at input

那么我做错了什么?

0 投票
1 回答
615 浏览

java - 获取基于时间的 uuid 最多 100 纳秒

我正在使用这个libraryDependencies += "com.datastax.oss" % "java-driver-core" % "4.3.0"库来创建基于时间的 uuid。虽然它生成基于时间的 uuid,但它给了我最多几秒钟,但我正在寻找 100 纳秒内的值

输出 uuid 类似于f642f350-0230-11ea-a02f-597f2801796a对应于 Friday, November 8, 2019 at 2:06:30 PM Greenwich Mean Time

请帮助了解如何以毫秒为单位获取时间类似这样 Friday, November 8, 2019 at 2:06:30:0000000Z PM Greenwich Mean Time

我希望将时间戳转换为 uuid 格式以进行测试(测试仅接受 uuid 格式)。然后我会将 uuid 转换回时间以测量一些时间差。

0 投票
1 回答
46 浏览

uuid - 是否可以从时间戳中获取原始 UUID1?

例如,我使用以下程序生成基于时间的 UUID。

我得到以下信息:

47702997-155d-11ea-92d3-6030d48747ec如果我知道时间戳,我可以取回原始 UUID(137946228962896279)吗?

我正在阅读有关 UUID 版本 1 的信息,并发现了一些“有点”试图反转它的程序,但是,每次,我都会得到一个不同的 UUID。

始终在变化的部分是时间戳部分(第一个块的最后 4 位 - 47702997)和 clock_sequence ( 92d3)。

如果可以取回原始 UUID,我需要什么?

非常感谢任何帮助/指导。

我还在 Security Stackexchange 上发了一个帖子,但后来意识到这个问题应该在这里发布。

我越看越发现这根本不可能,因为时间戳不包含有关 clock_sequence 的信息,除非我错了,在这种情况下,请纠正我。

0 投票
1 回答
636 浏览

java - Java UUID compareTo 对于 Type1 UUID 无法正常工作

在处理需要在 UUID 上对数据进行排序的用例时,这些 UUID 都是 Type 1 或基于时间并使用 Datastax Cassandra Java 驱动程序库 (UUIDS.timebased()) 生成的,我发现 UUID.compareTo 没有对一些UUID 正确。compareTo 中的逻辑是

我使用 java 的 datastax cassandra 驱动程序生成了以下 2 个 UUID。

从上面可以看出 uuid1 小于 uuid2,但是当我们使用 UUID compareTo 方法比较它们时,我们会得到不同的输出。我们应该得到输出为 -1,因为它应该小于但我们得到的答案是 1,这表明这个 uuid1 大于 uuid2

进一步分析,发现 uuid2 的 msb 转换为负数,而 uuid1 的 msb 为正数。因此, compareTo 中的逻辑返回值 1 而不是 -1。

这种行为对于 UUID 及其相互比较是否正常?如果是这样,那么我们如何处理此类基于时间的 UUID 的排序?

谢谢

0 投票
1 回答
288 浏览

scylla - 从scylla中选择时如何保证timeuuid单调递增

我有一个以 timeuuid 作为集群键的表。

我希望按此集群键的顺序选择数据,并提供以下保证 - 如果我选择了某些内容,将来这些记录之前将不会有任何插入(因此我可以遍历记录检查发生的新情况,而不会有跳过任何内容的风险事件)

SELECT kind FROM event WHERE domain = ? AND createdAt > lastCreatedAtWeAreAwareOf

如果我在客户端上生成 timeuuid 并使用并行插入到 scylla,那么从技术上讲,最近的 timeuuid 可能会在几个较旧的之前被首先插入(比如由于说一些网络问题),我可能会在我的选择中错过这些记录。

有什么可能的方法来解决这个问题?

我尝试使用currentTimeUUID函数,它似乎可以工作(在同一个分区键内单调增加)但会创建很多重复项(每个分区键有 20-40 个重复项),即我最终得到了很多完全相同的记录currentTimeUUID(我真的想要一种避免重复的方法,它会使选择过程复杂化并消耗不必要的资源)

我也很好奇使用currentTimeUUID函数时是否存在向后时钟跳跃的威胁?

0 投票
0 回答
37 浏览

concurrency - Cassandra 行顺序与集群键的一致性

在 Datastax 博客中阅读了有关使用 Cassandra 作为队列的陷阱的文章。很快,如果我们有这样的表

并且我们删除已处理的行,随后的选择查询将在读取未处理的行之前扫描太多的墓碑。

作为一个潜在的解决方法,作者建议保存最后处理的行的 timeuuid 并在这样的查询中使用它来排除墓碑扫描

但我无法理解一件事:依靠这种方法是否安全?当然,timeuuid 是按照集群键的时间顺序排序的,但是 Cassandra 是否给我们一些保证,在我们记忆的 timeuuid 之前不会添加任何记录,以防同时写入?例如,如果我们使用now()函数插入新记录:

文档说,now()在协调节点上生成新的 timeuuid。那么,是否有可能的情况:

  1. Coordinator1用timeuuid1生成record1并开始写
  2. Coordinator2 生成timeuuid2 > timeuuid1的 record2并开始写入
  3. record2的写入完成
  4. Coordinator3 从 partition 中读取新记录并 memoize timeuuid2
  5. 记录1的写入完成
  6. Coordinator3从timeuuid2开始读取新记录,跳过record1

?

0 投票
0 回答
43 浏览

scala - Scala中的纪元时间戳到UUID转换

我想将一个纪元时间比如1639514232转换为时间 UUID 并将其保存到 cassandra。UUIDs.endOf()不工作并生成可破译的 uuid 5e23b68f-2cbb-11b2-7f7f-7f7f7f7f7f7f。你能建议我如何实现它。