2012-10-05 18 views
20

Das Denken, das ich versuche zu implementieren, ist eine ID-Tabelle. Im Grunde hat es die Struktur (user_id, lecturer_id) welche user_id bezieht sich auf den Primärschlüssel in meiner Benutzertabelle und lector_id bezieht sich auf den Primärschlüssel meiner Lecturer-Tabelle.Schlüssel nach Wert finden

Ich versuche, dies in redis zu implementieren, aber wenn ich den Schlüssel als primäre ID des Benutzers setzen, wenn ich versuche, eine Abfrage wie alle Datensätze mit Dozent ID = 5 zu bekommen, da Dozent nicht der Schlüssel ist, aber Wert Ich werde es nicht in O (1) Zeit erreichen.

Wie kann ich eine Struktur wie die ID-Tabelle, die ich oben erwähnt habe, bilden, oder Redis unterstützt das nicht?

+0

Eine kürzlich hinzugefügte Seite in Redis 'Dokumentation enthält weitere Informationen zu [Sekundäre Indizierung mit Redis] (http://redis.io/topics/indexes) und behandelt diesen Fall unter [Einfache numerische Indizes mit sortierten Sätzen] (http://redis.io/topics/indexes#simple-numerical-indexes-with-sorted-sets) Abschnitt. –

Antwort

28

Eines der Dinge, die Sie schnell lernen, während mit redis arbeiten, ist, dass Sie Ihre Datenstruktur um den Zugriff auf Bedürfnisse zu entwerfen bekommen, besonders wenn es um die Beziehungen (es ist nicht eine relationale Datenbank, nachdem alle)

Es gibt Es gibt keine Möglichkeit, nach "Wert" mit einer Zeitkomplexität von O (1) zu suchen, wie Sie bereits bemerkt haben, aber es gibt Möglichkeiten, sich dem zu nähern, was Sie mit redis beschreiben. Hier ist, was ich empfehlen würde:

  • Speichern Sie Ihre Benutzerdaten nach Benutzer-ID (in einem Hash), wie Sie bereits tun.
  • Haben Sie einen zusätzlichen Satz für jede Dozenten-ID, die alle Benutzer-IDs enthält, die der betreffenden Dozenten-ID entsprechen.
  • Dies könnte wie eine Duplizierung der Daten der Beziehung erscheinen, da Ihre Benutzerdaten die Vorlesungs-ID speichern müssten und Ihre Vorlesungsdaten Benutzer-IDs speichern würden, aber das ist der (winzige) Preis, der zu zahlen ist Beziehungen in einem relationalen Datenspeicher wie Redis zu bauen. In der Praxis funktioniert das gut; Speicher ist selten ein Flaschenhals für kleine Datenmengen (denken Sie an Tausende von IDs).

    Um ein besseres Bild zu bekommen, wie die Menschen mit redis sind Anwendungen, mit Beziehungen zu modellieren, empfehle ich Design and implementation of a simple Twitter clone und den Quellcode Lamernews lesen, von denen beide Salvatore Sanfilippo von redis Autor geschrieben werden.

    Verwandte Themen