Come implementare uno scalabile esiste nella query set di grandi dimensioni

-1

Ho bisogno di progettare un sistema in cui ho bisogno di verificare se esiste o meno una chiave. Attualmente sto già utilizzando aerospike per la causa, ma il mio caso d'uso è leggermente diverso.

Avrò una chiave come questa (un gruppo di 3 numeri interi) -

Ad es. 1-105-1133441 222-1000-1891893

Ho solo bisogno di sapere se questa chiave esiste o no nel set. Se esiste return 1 else imposta la chiave e restituisce 0. In modo che la prossima volta la query restituisca 1

Questo deve essere un servizio TCP perché i controlli / set avverranno da più server

Il punto è che se una campagna è attiva le query saranno molto densi (fino a 20k / s). Quindi la ricerca chiave deve essere in memoria. Ma dopo devo ancora conservare il set ma deve essere su disco, in modo che la memoria possa essere liberata per altre campagne. Non mi aspetto più che 20-30 campagne siano live.

Ogni volta che la prossima volta una vecchia campagna ottiene nuovamente una query, il server dovrebbe riportarla in memoria e servire le richieste dalla memoria. La prima query sarà lenta perché deve eseguire il kickoff di una lettura dal disco, ma la prossima query in poi sarà molto veloce.

Sto usando aerospike per ora, ma c'è un problema che aeorspike memorizza tutte le chiavi in memoria. Quando è praticamente inutile avere vecchie campagne in memoria a meno che non vengano nuovamente attivate

Il numero totale di chiavi è praticamente illimitato. Ma consideriamo 50 milioni di chiavi per campagna e potrei aver bisogno di memorizzare 100k dati della campagna. Di cui solo < 50 saranno pubblicati in qualsiasi momento specifico.

    
posta Ram 18.04.2017 - 05:51
fonte

1 risposta

0

Dalle tue spiegazioni questo sembra un caso d'uso per un filtro Bloom .

Un filtro Bloom è una struttura di dati probabilistici efficiente sotto il profilo dello spazio che ti dice se un valore è:

  • "eventualmente nel set"
  • "sicuramente non nel set"

Bloom proposed the technique for applications where the amount of source data would require an impractically large amount of memory if "conventional" error-free hashing techniques were applied.

Vedo che hai taggato la domanda [Cassandra] e [Redis]. Non ho familiarità con queste tecnologie, ma una rapida ricerca mostra che entrambi in qualche modo stanno usando questa struttura dati, quindi vedi se ti è di aiuto.

    
risposta data 21.04.2017 - 16:54
fonte

Leggi altre domande sui tag