Überprüfen Sie zunächst, ob vorhandene Lösungen wie libmemcache Ihren Anforderungen entsprechen.
Wenn nicht ...
Hash-Maps scheinen die eindeutige Antwort auf Ihre Anforderung zu sein. Es bietet o (1) Suche basierend auf den Schlüsseln. Die meisten STL-Bibliotheken bieten heutzutage eine Art Hash an. Verwenden Sie also die von Ihrer Plattform bereitgestellte.
Sobald dieser Teil erledigt ist, müssen Sie die Lösung testen, um festzustellen, ob der Standard-Hashing-Algorithmus hinsichtlich Ihrer Leistung ausreichend leistungsfähig ist.
Wenn dies nicht der Fall ist, sollten Sie einige gute schnelle Hashing-Algorithmen im Internet untersuchen
- gute alte Primzahl multiplizieren algo
- http://www.azillionmonkeys.com/qed/hash.html
- http://burtleburtle.net/bob/
- http://code.google.com/p/google-sparsehash/
Wenn dies nicht gut genug ist, können Sie selbst ein Hashing-Modul rollen, das das Problem behebt, das Sie bei den von Ihnen getesteten STL-Containern und einem der oben genannten Hashing-Algorithmen gesehen haben. Stellen Sie sicher, dass Sie die Ergebnisse irgendwo veröffentlichen.
Oh, und es ist interessant, dass Sie mehrere Karten haben ... Vielleicht können Sie es vereinfachen, indem Sie Ihren Schlüssel als 64-Bit-Zahl mit den hohen Bits verwenden, um zu unterscheiden, zu welcher Karte er gehört, und alle Schlüsselwertpaare zu einem riesigen Hash hinzufügen. Ich habe Hashes mit ungefähr hunderttausend Symbolen gesehen, die auf dem grundlegenden Haschalgorithmus für Primzahlen ziemlich gut funktionieren.
Sie können überprüfen, wie diese Lösung im Vergleich zu Hunderten von Karten funktioniert. Ich denke, das könnte aus Sicht der Speicherprofilerstellung besser sein. Bitte veröffentlichen Sie die Ergebnisse irgendwo, wenn Sie diese Übung durchführen können
Ich glaube, dass mehr als der Hashing-Algorithmus das ständige Hinzufügen / Löschen von Speicher (kann dies vermieden werden?) Und das CPU-Cache-Nutzungsprofil sein könnten, das für die Leistung Ihrer Anwendung entscheidender sein könnte
Viel Glück