Was ist der einfachste Weg, um eine Datenbanktabelle mit einem Index in einem Schlüsselwertspeicher zu simulieren?

StackOverflow https://stackoverflow.com/questions/2272996

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):

  1. Erstellen von Tabellen
  2. Fügen Sie Spalten
  3. Erstellen von Indizes
  4. Abfrage basierend auf Primärschlüssel
  5. Abfrage basierend auf beliebigen Spalten
War es hilfreich?

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
  • 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top