Was ist der einfachste Weg, um eine Datenbanktabelle mit einem Index in einem Schlüsselwertspeicher zu simulieren?
Frage
Was ist der einfachste Weg, um eine Datenbanktabelle mit einem Index in einem Schlüsselwertspeicher zu simulieren? Der Schlüssel Wertspeicher hat keine reichten Anfragen und NO bestellt Tasten.
Die Dinge, die ich simulieren will (in der Reihenfolge ihrer Priorität):
- Erstellen von Tabellen
- Fügen Sie Spalten
- Erstellen von Indizes
- Abfrage basierend auf Primärschlüssel
- Abfrage basierend auf beliebigen Spalten
Lösung
Wenn Sie Redis (eine erweiterte Schlüssel-Wert-Speicher, dass Stützen Strings, Listen , Sets, etc.) Dann ist dies ganz einfach. Ich habe bereits einen C # redis Client entwickelt, die für die Speicherung von POCO Daten native Unterstützung hat Modelle. Diese exakt die gleichen POCO können von OrmLite zu speichern in einem RDBMS.
Übrigens Redis ist schnell, ich habe einen Benchmark dass Geschäfte und ruft die gesamte Nordwind-Datenbank (3202 Datensätze) in unter 1,2 Sekunden (laufen in einem Unittest auf einem 3yo iMac) .
Ich speichere Einheiten auf zwei Arten
- Ausgeprägte Entitäten, wo ich die Klassentypnamen und Primärschlüssel kombinieren, um einen eindeutigen Schlüssel zu erstellen z.B.
urn:user:1
- Ich habe dann einen separaten Satz von Primärschlüsseln hält (in einem Redis Set) den Überblick über alle meine Einheiten zu halten, mit einem Schlüssel wie:
ids:user
- Ich habe dann einen separaten Satz von Primärschlüsseln hält (in einem Redis Set) den Überblick über alle meine Einheiten zu halten, mit einem Schlüssel wie:
- In einer Redis serverseitigen Liste - die wie ein Tisch sehr viel wirkt mit Unterstützung für Paging, mit einem Schlüssel wie:
lists:user
Andere Tipps
Verwenden Sie eine Hash-Tabelle oder Wörterbuch. Wenn Sie eindeutige Schlüsselwerte wünschen könnten Sie eine GUID oder hashcode verwenden.
Der Schlüssel-Wert-Speicher sollte die Schlüssel und reichten Zugriff auf die Schlüssel unterstützt Bestellung.
Dann sollten Sie zwei Wörterbücher erstellen:
id -> payload
und
col1, id -> NULL
, wobei payload
die Datenbanktabelle enthalten würde, und die Schlüssel des zweiten Wörterbuch alle Daten enthalten sollten die Werte von (col1, id)
von jedem Eintrag des ersten Wörterbuch enthalten sollte.