Prima controlla se le soluzioni esistenti come libmemcache soddisfano le tue esigenze.
Altrimenti ...
Le mappe hash sembrano essere la risposta definitiva alle tue esigenze. Fornisce o (1) ricerca in base alle chiavi. La maggior parte delle librerie STL fornisce una sorta di hash in questi giorni. Quindi usa quello fornito dalla tua piattaforma.
Una volta completata quella parte, devi testare la soluzione per vedere se l'algoritmo di hashing predefinito è abbastanza buono in termini di prestazioni per le tue esigenze.
Se non lo è, dovresti esplorare alcuni buoni algoritmi di hashing veloce trovati in rete
- buon vecchio numero primo moltiplicare algo
- http://www.azillionmonkeys.com/qed/hash.html
- http://burtleburtle.net/bob/
- http://code.google.com/p/google-sparsehash/
Se questo non è abbastanza buono, potresti lanciare un modulo di hashing da solo, che risolve il problema che hai visto con i contenitori STL che hai testato e uno degli algoritmi di hashing sopra. Assicurati di pubblicare i risultati da qualche parte.
Oh, ed è interessante che tu abbia più mappe ... forse puoi semplificare avendo la tua chiave come un num a 64 bit con i bit alti usati per distinguere a quale mappa appartiene e aggiungere tutte le coppie di valori chiave a un hash gigante. Ho visto hash che hanno circa centomila simboli funzionare perfettamente bene sull'algoritmo di hashing dei numeri primi di base.
Puoi controllare come si comporta quella soluzione rispetto a centinaia di mappe .. penso che potrebbe essere migliore dal punto di vista della profilazione della memoria ... per favore pubblica i risultati da qualche parte se riesci a fare questo esercizio
Credo che più dell'algoritmo di hashing potrebbe essere l'aggiunta / eliminazione costante della memoria (può essere evitata?) E il profilo di utilizzo della cache della CPU che potrebbe essere più cruciale per le prestazioni della tua applicazione
in bocca al lupo