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.