Die allgemein anerkannte Konvention in der Redis-Welt ist die Option 1 - d. H. Namespaces, die durch ein Doppelzeichen getrennt sind. Das heißt, die Namespaces sind fast immer eine Ebene tief. Zum Beispiel: person:12321
anstelle von human_resources:person:12321
.
Wie funktioniert das mit den 4 Richtlinien, die Sie festlegen?
Shardable - Dieser Ansatz ist shardable. Jeder Schlüssel kann in einen anderen Shard oder Shard gelangen, je nachdem, wie Sie ihn eingerichtet haben.
Namespace Namespace als eine Möglichkeit zur Vermeidung von Kollisionen funktioniert mit diesem Ansatz. Namespaces als eine Möglichkeit zum Gruppieren von Schlüsseln funktioniert jedoch nicht. Im Allgemeinen ist die Verwendung von Schlüsseln zur Gruppierung von Daten eine schlechte Idee. Zum Beispiel, was passiert, wenn die Person von einer Abteilung in eine andere wechselt? Wenn Sie den Schlüssel ändern, müssen Sie alle Referenzen aktualisieren - und das wird schwierig.
Es ist am besten sicherzustellen, dass sich der Schlüssel für ein Objekt nie ändert.Die Gruppierung kann dann extern durch Erstellen eines separaten Indexes erfolgen.
Nehmen wir beispielsweise an, Sie möchten Personen nach Abteilung gruppieren, nach Gehaltsspanne, nach Standort. Hier ist, wie Sie es tun würden -
- Einzelne Leute gehen in getrennten Hash mit Schlüssel
persons:12321
- erstellen
set
für jede Gruppe von - Zum Beispiel: persons_by:department
- und speichert nur die numerischen Kennungen für jede Person in diesem einstellen. Zum Beispiel [12321, 43432]. Auf diese Weise erhalten Sie die Vorteile von Redis' Integer Set
Effiziente Das oben erläuterte Verfahren ist ziemlich effizient Speicher weise. Um mehr Speicherplatz zu sparen, können Sie die Tasten auf der Anwendungsseite weiter komprimieren. Beispielsweise können Sie p:12321
statt persons:12321
speichern. Sie sollten dies nur tun, wenn Sie über Profilerstellung ermittelt haben, dass Sie solche Speichereinsparungen benötigen. In der Regel ist es die Kosten nicht wert.
Kollisionsfrei Dies hängt von Ihrer Anwendung ab. Jeder Benutzer oder jede Person sollte einen Primärschlüssel haben, der sich niemals ändert. Verwenden Sie dies in Ihrer Redis-Taste und Sie werden keine Kollisionen haben.
Sie erwähnten zwei Probleme mit diesem Ansatz, und ich werde versuchen, sie
Was passiert, wenn die ID einen Doppelpunkt hat zu lösen?
Es ist natürlich möglich, aber das Design Ihrer Anwendung sollte dies verhindern. Es ist am besten, Sonderzeichen in Bezeichnern nicht zuzulassen - weil sie über mehrere Systeme hinweg verwendet werden. Zum Beispiel ist der Bezeichner sehr wahrscheinlich ein Teil der URL und der Doppelpunkt ist ein reserviertes Zeichen, selbst für URLs.
Wenn Sie Sonderzeichen in Ihrem Bezeichner wirklich zulassen müssen, müssten Sie einen kleinen Wrapper in Ihren Code schreiben, der die Sonderzeichen codiert. Die URL-Codierung ist dazu in der Lage.
Größe Efficiency
Kosten zu lange Schlüssel Es gibt jedoch ist es nicht zu viel. Im Allgemeinen sollten Sie sich über die Datengröße Ihrer Werte statt über die Schlüssel Gedanken machen. Wenn Sie glauben, dass Schlüssel zu viel Speicher verbrauchen, profilieren Sie die Datenbank mit einem Tool wie redis-rdb-tools.
Wenn Sie feststellen, dass die Schlüsselgröße ein Problem ist und den Speicher speichern möchten, können Sie einen kleinen Wrapper schreiben, der die Schlüssel unter Verwendung eines Alias neu schreibt.
Wunderbare Antwort. Vielen Dank, dass Sie sich die Zeit genommen und dieses Problem angesprochen haben. Ich entschuldige mich dafür, dass ich vorher nicht auf den "Bounty" -Button geklickt habe, aber dies ist das erste Mal, dass ich es benutzt habe. Vielen Dank! –