【问题标题】:How to auto generate uuid in cassandra CQL 3 command line如何在 cassandra CQL 3 命令行中自动生成 uuid
【发布时间】:2013-07-30 12:00:47
【问题描述】:

刚学cassandra,有没有办法使用CQL插入UUID,即

create table stuff (uid uuid primary key, name varchar);
insert into stuff (name) values('my name'); // fails
insert into stuff (uid, name) values(1, 'my name'); // fails

你可以做类似的事情

insert into stuff (uid, name) values(nextuid(), 'my name');

【问题讨论】:

    标签: cassandra cql cql3


    【解决方案1】:

    Cassandra 2.0.7 开始,您可以只使用 uuid(),它会生成一个随机的 4 类 UUID:

    INSERT INTO users(uid, name) VALUES(uuid(), 'my name');
    

    【讨论】:

    • 谢谢你让我开心!
    • 感谢 cassandra 新版本的更新答案!
    • @gotch4 是的,它们是独一无二的。出于所有实际目的。
    • @TorstenBronger 你能帮我了解一下 uuid() 对一张桌子来说是多么独特吗?
    • “UUID”代表“通用唯一标识符”。它应该是独一无二的,即使在桌子之外。它的维基百科文章有详细信息。
    【解决方案2】:

    您可以使用now() 函数使用时间 uuid(类型 1 UUID),例如

    insert into stuff (uid, name) values(now(), 'my name');
    

    适用于 uid 或 timeuuid。它生成一个“保证唯一”的 UID 值,其中还包含时间戳,因此可以按时间排序。

    但是对于 4 类 UUID 没有这样的功能。


    更新:本说明适用于旧版本的 Cassandra。对于较新的版本,请参见下文。

    【讨论】:

    • 使用timeuuid vs uuid有什么缺点吗?
    • 主要缺点是会泄露创建者的MAC地址和时间。但优点是它的唯一性是确定性的,您可以按时间对事件进行排序。
    • 谢谢。感谢您的详细回复!
    • 其实TimeUUID就是一个UUID。就像 Braeburn 苹果一个苹果。阅读 Cassandra 文档和我更长的答案:stackoverflow.com/questions/17945677/…
    • 这不是最佳答案,请查看Zhivko 提供的答案
    【解决方案3】:

    实际上有一种方法可以使用 blob 转换函数 - blobAsType()typeAsBlob()。在您的情况下,这应该是:

    insert into stuff (uid, name) values(blobAsUuid(timeuuidAsBlob(now())), 'my name');
    

    这会将timeuuid 转换为blob,并从blob 将其转换为uuid

    【讨论】:

    • 这实际上回答了这个问题。不错。
    • 也相信这是正确的答案。问题是我们不需要将类型从 uuid 更改为 timeuuid
    【解决方案4】:

    UUID 是用于避免冲突的通用唯一 ID。

    Cassandra 2.0.7 及更高版本包含uuid() 函数,该函数不接受参数并生成用于INSERTSET 语句的Type 4 UUID。

    您还可以将timeuuid 类型与now() 之类的函数一起使用。它们生成 1 类 UUID。

    Type 1 和 Type 4 UUID 的区别在于 Type 1 UUID 使用时间戳生成,Type 4 使用随机数生成。

    如果您想将timeuuid 用作uuid,请使用blobAsUuid(timeuuidAsBlob(now())),因为now() 返回的值保证是唯一的。

    参考资料:

    http://docs.datastax.com/en/cql/3.3/cql/cql_reference/uuid_type_r.html

    http://docs.datastax.com/en/cql/3.3/cql/cql_reference/timeuuid_functions_r.html

    http://docs.datastax.com/en/cql/3.3/cql/cql_reference/blob_r.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-02
      • 2011-03-15
      • 2016-10-29
      • 2014-11-30
      • 2019-02-03
      • 2022-08-02
      • 2019-01-19
      • 1970-01-01
      相关资源
      最近更新 更多