2014-03-03 5 views
7

Ich habe eine Reihe von hierarchischen Daten zu speichern, ist die Hierarchie wie Site/Gebäude/Etage, die Daten, zum BeispielWie verwendet man redis um hierarchische Daten zu speichern?

{ 
    site:'New York', 
    buildings: [ 
       { 
       name:'building a', 
       floors: [ 
         'Ground':[{room:room1},{room:room2}], 
         'First':[{room:room1},{room:room2}] 
         ] 
       } 
      ] 
}, 
{ 
    site:'London', 
    buildings: [ 
       { 
       name:'building a', 
       floors: [ 
         'Ground':[{room:room1},{room:room2}], 
         'First':[{room:room1},{room:room2}] 
         ] 
       } 
      ] 
} 

ich diese Raumdaten in einen Satz speichern will, aber ich kann auch Abfrage die Untergruppe von Räumen durch Auswahl des Site-Namens oder (Site-Name + Gebäude-Name) oder (Site-Name + Gebäude-Name + Etage)

Antwort

6

In Redis werden Sie Ihre Daten nicht in einer eindeutigen Datenstruktur speichern. Sie müssen mehrere Datenstrukturen erstellen, von denen jede durch einen Schlüssel identifiziert wird.

Verwenden Sie eine Konvention, um Ihre Schlüssel zu benennen: Beispiel: site:<CITY>:buildings ist ein Satz, der die Liste der Bau-IDs für eine bestimmte Site enthält.

Definieren Sie dann Hashes, um jede Gebäudebeschreibung zu speichern. Der Schlüssel für diese Hashes könnte etwas wie sein: building:<ID>

Im Hash haben Sie 2 Mitglieder: Name und Stockwerke. Floors value ist die eindeutige ID des Satzes, der die Liste der Stockwerkkennungen enthält.

Erstellen Sie dann ein letztes Set für jede Etage, um die Raumnamen zu speichern. Der Name der Sets könnte etwa lauten: floor:<ID>.

Tipps:

  • Befehl Verwendung redis INCR eindeutige IDs zu generieren.
  • vermeiden Sie zu lange Schlüssel, wenn Sie eine sehr hohe Anzahl von ihnen speichern möchten (längere Schlüssel benötigen mehr Speicher)
Verwandte Themen