que examples cassandra cql cql3

examples - Cómo autogenerar uuid en cassandra CQL 3 línea de comando



cql examples (4)

Acabo de aprender a cassandra, ¿hay alguna manera de insertar un UUID usando CQL, es decir,

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

¿Puedes hacer algo como

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


A partir de Cassandra 2.0.7 puede simplemente usar uuid (), que genera un UUID de tipo aleatorio 4:

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


En realidad, hay una manera de hacerlo utilizando las funciones de conversión blob: blobAsType y typeAsBlob. En tu caso, esto debería ser:

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

Esto es convertir timeuuid a blod y del blod convertirlo a uuid.


Puede con uuids de tiempo (UUID tipo 1) usando la función now() , por ej.

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

Funciona con uid o timeuuid. Genera un valor de UID "garantizado único", que también contiene la marca de tiempo, por lo que es ordenable por tiempo.

Sin embargo, no existe tal función para los UUID de tipo 4.

ACTUALIZACIÓN: esta nota se refiere a versiones anteriores de Cassandra. Para versiones más nuevas, mira a continuación.


Un UUID es una identificación universal única utilizada para evitar colisiones.

Cassandra 2.0.7 y versiones posteriores incluyen la función uuid() que no toma parámetros y genera un UUID de Tipo 4 para usar en las INSERT o SET .

También puede usar un tipo de elemento de tiempo con una función como now() . Generan un UUID tipo 1.

La diferencia entre los UUID Tipo 1 y Tipo 4 es que un UUID Tipo 1 se genera utilizando una marca de tiempo y un Tipo 4 se genera utilizando números aleatorios.

Si desea utilizar un timeuuid como un elemento uuid utilice algo como blobAsUuid(timeuuidAsBlob(now())) , ya que se garantiza que el valor devuelto por now() será único.

Referencias

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