È possibile utilizzare il tipo TimeUUID
in Cassandra, che supporta un UUID Tipo 1. Questo utilizza l'ora corrente e l'indirizzo MAC del creatore e un numero di sequenza. Se il numero TimeUUID è generato correttamente, questo può essere fatto senza collisioni (è possibile utilizzare il CQL now()
method o inserire il proprio, l'SDK java fornisce alcune implementazioni thread-safe). Il vantaggio principale di TimeUUIDs
è che gli ID possono essere ordinati in base all'ora. Vedi http://wiki.apache.org/cassandra/TimeBaseUUIDNotes per maggiori informazioni.
Tuttavia, è improbabile che l'ordine temporale sia utile per le chiavi primarie di riga, poiché l'ordine è inutile quando si utilizza un partizionatore hash, sebbene sia possibile utilizzare un clustering key. Inoltre, la complessità della generazione di un ID univoco potrebbe essere una fonte di bug se si esegue il rollover. Cassandra supporta anche UUID di tipo 4 utilizzando il tipo UUID
. Questi sono solo bit casuali. Esiste una probabilità di collisione, ma la probabilità di collisione (supponendo che le fonti di numeri casuali non correlate, che sarà se generate in Java) è estremamente bassa - se si crea 1 miliardo al secondo per 100 anni la probabilità di una collisione è di circa il 50% . (Per ulteriori dettagli, vedere http://en.wikipedia.org/wiki/Universally_unique_identifier#Random_UUID_probability_of_duplicates.)
Grazie per la risposta. Se ad esempio utilizzo un UUID di tipo 1: Timeline CREATE TABLE (riduci, PRIMARY KEY (rid)) Come posso generare il rid e inserirlo nel CF? (Ho letto di un metodo chiamato ora() in Cassandra, ma non so come usarlo) – user2090879
Si dovrebbe usare il tipo timeuuid se si sta usando UUID di tipo 1. Questo dovrebbe funzionare: Timeline CREATE TABLE (riduisci timeuuid, PRIMARY KEY (rid)); inserire in valori di timeline (rid) (now()); – Richard
Ho ricevuto questo errore: manca EOF a ')'. è come se non riconoscesse il metodo ora(). ps: Sto usando Cassandra 1.2.0 – user2090879