Unicità riproducibile

4

Quindi, ho un sacco di chiamate che vengono tutte generate con un UUID1 per tutto il giorno. Alla fine della chiamata la chiamata viene elaborata e alcune metriche relative a tale chiamata vengono generate e archiviate in Rethinkdb / Cassandra.

Ogni chiamata genererà qualcosa che assomiglia a questo

[{
   "company": "foo company",
   "campaign": "bar campaign",
   "hash": "",
   "stat": "talk-time",
   "date": 1467356399,
   "value": 176
 },
 {
   "company": "foo company",
   "campaign": "bar campaign",
   "hash": "",
   "stat": "sale",
   "date": 1467356399,
   "value": 1
 },
 {
   "company": "foo company",
   "campaign": "bar campaign",
   "hash": "",
   "stat": "call-back",
   "date": 1467356399,
   "value": 0
 },
 ...
 ]

Ho bisogno che queste statistiche siano uniche nel database. La mia soluzione attuale è prendere l'UUID del Call che è memorizzato in Postgres e aggiungerlo a una stringa che assomiglierà a questo per la prima stat uuid1_foo-company_bar-campaign_talk-time_1467356399 e ad hash che usa un SHA-512. Attualmente sto usando quell'hash come ID su Rethinkdb per guadagnare unicità.

Il motivo per cui questi devono essere unici e riproducibili è perché a volte dobbiamo tornare indietro e rielaborare tutte le chiamate per un dato giorno e dobbiamo assicurarci che le statistiche generate la prima volta che sono state elaborate siano mantenute e non duplicate. Se sono duplicati, tutti i nostri rapporti sarebbero errati.

C'è un modo migliore di utilizzare questi strumenti per generare statistiche uniche per una chiamata che può essere rielaborata in seguito senza inserire valori duplicati?

Inoltre, sembra che Rethink abbia una lunghezza massima di 127 per l'ID primario in cui gli SHA-512 hanno una lunghezza di 128 caratteri, quindi ripensare a questo progetto.

    
posta Jared Mackey 05.07.2016 - 19:59
fonte

1 risposta

1

Vedo due possibilità per creare una nuova chiave:

  1. Genera un UUID5, che è basato sull'hash SHA-1 di un identificatore di spazio dei nomi (che è un UUID) e un nome (che è una stringa). Usa il tuo UUID originale e una combinazione di stringhe univoche all'interno del tuo record, o

  2. Genera un hash SHA512 dell'intero record, codificalo in una rappresentazione base64 e aggiungi gli 8 caratteri risultanti alla fine dell'UUID originale.

risposta data 05.07.2016 - 22:16
fonte

Leggi altre domande sui tag