问题标签 [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.
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
cassandra - 如何更新 cassandra 中的 timeuuid 列
如何更新timeuuid
Cassandra 中的列?
我尝试了以下查询
它失败并显示消息
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
那么我做错了什么?
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 转换回时间以测量一些时间差。
uuid - 是否可以从时间戳中获取原始 UUID1?
例如,我使用以下程序生成基于时间的 UUID。
我得到以下信息:
47702997-155d-11ea-92d3-6030d48747ec
如果我知道时间戳,我可以取回原始 UUID(137946228962896279)
吗?
我正在阅读有关 UUID 版本 1 的信息,并发现了一些“有点”试图反转它的程序,但是,每次,我都会得到一个不同的 UUID。
始终在变化的部分是时间戳部分(第一个块的最后 4 位 - 47702997
)和 clock_sequence ( 92d3
)。
如果可以取回原始 UUID,我需要什么?
非常感谢任何帮助/指导。
我还在 Security Stackexchange 上发了一个帖子,但后来意识到这个问题应该在这里发布。
我越看越发现这根本不可能,因为时间戳不包含有关 clock_sequence 的信息,除非我错了,在这种情况下,请纠正我。
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 的排序?
谢谢
scylla - 从scylla中选择时如何保证timeuuid单调递增
我有一个以 timeuuid 作为集群键的表。
我希望按此集群键的顺序选择数据,并提供以下保证 - 如果我选择了某些内容,将来这些记录之前将不会有任何插入(因此我可以遍历记录检查发生的新情况,而不会有跳过任何内容的风险事件)
SELECT kind FROM event WHERE domain = ? AND createdAt > lastCreatedAtWeAreAwareOf
如果我在客户端上生成 timeuuid 并使用并行插入到 scylla,那么从技术上讲,最近的 timeuuid 可能会在几个较旧的之前被首先插入(比如由于说一些网络问题),我可能会在我的选择中错过这些记录。
有什么可能的方法来解决这个问题?
我尝试使用currentTimeUUID
函数,它似乎可以工作(在同一个分区键内单调增加)但会创建很多重复项(每个分区键有 20-40 个重复项),即我最终得到了很多完全相同的记录currentTimeUUID
(我真的想要一种避免重复的方法,它会使选择过程复杂化并消耗不必要的资源)
我也很好奇使用currentTimeUUID
函数时是否存在向后时钟跳跃的威胁?
concurrency - Cassandra 行顺序与集群键的一致性
我在 Datastax 博客中阅读了有关使用 Cassandra 作为队列的陷阱的文章。很快,如果我们有这样的表
并且我们删除已处理的行,随后的选择查询将在读取未处理的行之前扫描太多的墓碑。
作为一个潜在的解决方法,作者建议保存最后处理的行的 timeuuid 并在这样的查询中使用它来排除墓碑扫描
但我无法理解一件事:依靠这种方法是否安全?当然,timeuuid 是按照集群键的时间顺序排序的,但是 Cassandra 是否给我们一些保证,在我们记忆的 timeuuid 之前不会添加任何记录,以防同时写入?例如,如果我们使用now()
函数插入新记录:
文档说,now()
在协调节点上生成新的 timeuuid。那么,是否有可能的情况:
- Coordinator1用timeuuid1生成record1并开始写
- Coordinator2 生成timeuuid2 > timeuuid1的 record2并开始写入
- record2的写入完成
- Coordinator3 从 partition 中读取新记录并 memoize timeuuid2
- 记录1的写入完成
- Coordinator3从timeuuid2开始读取新记录,跳过record1
?
scala - Scala中的纪元时间戳到UUID转换
我想将一个纪元时间比如1639514232转换为时间 UUID 并将其保存到 cassandra。UUIDs.endOf()
不工作并生成可破译的 uuid 5e23b68f-2cbb-11b2-7f7f-7f7f7f7f7f7f
。你能建议我如何实现它。