Cum se generează automat uuid în cassandra CQL 3 linia de comandă CQL 3 (Programare, Cassandra, Cql, Cql3)

Jay a intrebat.

Doar învățând cassandra, există o modalitate de a introduce un UUID folosind CQL, adică

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

Puteți face ceva de genul

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

4 răspunsuri
Richard

Puteți cu uuids de timp (UUID de tip 1 UUID) folosind funcția now() de exemplu.

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

Funcționează cu uid sau timeuuid. Generează o valoare UID „unică garantată”, care conține și marca temporală, deci poate fi sortată în funcție de timp.

Totuși, nu există o astfel de funcție pentru UUID-urile de tip 4.


UPDATE: Această notă se referă la versiunile mai vechi ale Cassandra. Pentru versiunile mai noi, consultați mai jos.

Comentarii

  • Există vreun dezavantaj în utilizarea timeuuid vs. uuid? –  > Por Jay.
  • Principalul dezavantaj este că se scurg adresa MAC a creatorului și ora. Dar avantajele sunt că unicitatea sa este deterministă și că puteți sorta evenimentele în funcție de timp. –  > Por Richard.
  • Mulțumiri. Apreciez răspunsul dvs. detaliat! –  > Por Jay.
  • De fapt, un TimeUUID este un UUID. La fel ca un măr Braeburn este un măr. Citiți documentul Cassandra și răspunsul meu mai lung: stackoverflow.com/questions/17945677/… –  > Por Basil Bourque.
  • acesta nu este cel mai bun răspuns, verificați-l pe cel de la Zhivko –  > Por Tommaso Barbugli.
lumi

Începând cu Cassandra 2.0.7 puteți folosi pur și simplu uuid(), care generează un UUID aleatoriu de tip 4:

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

Comentarii

  • Mulțumesc pentru că mi-ați făcut ziua mai bună! –  > Por Fougere.
  • Vă mulțumim pentru răspunsul actualizat pentru versiunile mai noi de Cassandra! –  > Por Jay.
  • @gotch4 da, sunt unice. Pentru toate scopurile practice. –  > Por Torsten Bronger.
  • @TorstenBronger ați putea să mă ajutați să înțeleg cum uuid() este unic pentru un tabel? –  > Por mnaa.
  • „UUID” înseamnă „universally unique identifier” (identificator unic universal). Se presupune că este unic chiar și dincolo de tabel. Articolul său din Wikipedia are detalii. –  > Por Torsten Bronger.
Jivko Donev

De fapt, există o modalitate de a face acest lucru folosind funcțiile de conversie a blob-urilor – blobAsType() și typeAsBlob(). În cazul dvs., aceasta ar trebui să fie:

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

Aceasta convertește timeuuid în blob și din blob îl convertește în uuid.

Comentarii

  • Acest lucru răspunde de fapt la întrebare. Frumos. –  > Por HelloWorld.
  • De asemenea, cred că acesta este răspunsul corect. Chestia este că nu trebuie să schimbăm tipul din uuid în timeuuid –  > Por Truong Ha.
Esteban Herrera

Un UUID este un ID unic universal utilizat pentru a evita coliziunile.

Cassandra 2.0.7 și versiunile ulterioare includ uuid() care nu acceptă niciun parametru și generează un UUID de tip 4 pentru a fi utilizat în INSERT sau SET declarații.

De asemenea, puteți utiliza o funcție timeuuid cu o funcție de tipul now(). Acestea generează un UUID de tip 1.

Diferența dintre UUID-urile de tip 1 și de tip 4 constă în faptul că un UUID de tip 1 este generat folosind un timestamp, iar un UUID de tip 4 este generat folosind numere aleatoare.

Dacă doriți să utilizați un timeuuid ca un uuid utilizați ceva de genul blobAsUuid(timeuuidAsBlob(now())), deoarece valoarea returnată de now() este garantată ca fiind unică.

Referințe:

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