6

我试图向 cassandra 插入一个特定的 timeuuid,而我设法插入一个的唯一方法是使用 now() 函数,因为我假设 now 函数知道数据库喜欢什么格式。

如何为此创建 cqlsh 命令?

目前我有这个:

INSERT INTO my_table (tid) VALUES ( now() )

但是,当我调试 node.js 或任何与 cassandra 接口的程序时,我希望能够 100% 控制我插入的日期以进行测试。

有类似的东西会很好:

INSERT INTO my_table (tid) VALUES ( 12/OCTOBER/2014 )

没有它崩溃

谢谢!

4

3 回答 3

4

timeuuid 是一种复杂的格式。此处描述了有效值。

timeuuid

Uses the time in 100 nanosecond intervals since 00:00:00.00 UTC (60 bits), a 
clock sequence number for prevention of duplicates (14 bits), plus the IEEE 801 MAC
address (48 bits) to generate a unique identifier. For example: 
d2177dd0-eaa2-11de-a572-001b779c76e3 

有一个很好的讨论timeuuid。我不知道这些位出现的顺序,但如果它是从左到右,你可以连接:

时间(前 15 位 = 60 位):00000000-0000-000

序列(接下来的 3 位 = 12 位,忽略序列的最后 2 位):0-00

最后 2 位序列 + MAC:000-000000000000

然后根据条目的需要增加时间序列。但是使用时间戳可能会容易得多。

如果你想这样做:

INSERT INTO my_table (tid) VALUES ( "2014-10-12" )

你需要使用timestamp类型。

于 2014-04-03T22:25:36.960 回答
4

我有两个选择:

  1. 使用此处描述的minTimeuuid或其中之一maxTimeuuid
  2. 使用 UUIDGen 中的详细信息在 Node.js 中实现 Timeuuid

我想说第一种方法更容易用于测试目的。

于 2014-04-04T11:17:28.643 回答
3

看看minTimeuuidmaxTimeuuid功能。插入他们的结果是个坏主意,但出于测试目的,它可以。

http://cassandra.apache.org/doc/cql3/CQL.html#timeuuidFun

于 2014-04-03T23:35:35.723 回答