/ / Redis GET vs. SQL SELECT - nosql, redis

Redis GET vs. SQL SELECT - nosql, redis

Ich bin in NoSQL ziemlich neu, aber mir gefiel die Idee immer. Ich habe einen Blick darauf geworfen Redis, und ein paar Fragen zu den besten Möglichkeiten zum Speichern und Abrufen mehrerer hashes.

Angenommen das folgende Szenario:

Store a list of objects (redis "Hashes") and select them by their timestamp.

Um dies in zu archivieren SQLwäre eine Tabelle und zwei einfache Abfragen (INSERT & SELECT) erforderlich

Versuch das in zu tun RedisAm Ende habe ich folgende Struktur erstellt:

  1. Schlüssel object:$id (Hash) enthält die object
  2. Schlüssel index:timestamp:$id (sortiertes Set) score ist gleich timestamp und value beinhaltet id

Ich kann zwar mit der zusätzlichen Wartungsarbeit von zwei Schlüsseln anstatt einer Tabelle leben (SQL), Ich bin neugierig auf den Prozess von Mehrere Objekte auswählen:

ZRANGEBYSCORE index:timestamp:$id timestampStart timestampEnd

Dies gibt ein zurück array aller IDs, die zwischen erstellt wurden timestampStart und timestampEnd. Um das Objekt selbst zu erhalten, fordere ich jedes einzelne an:

GET object:$id
  • Ist dies der richtige Weg?
  • Im Vergleich zu einer SQL-Datenbank: Ist sie noch merklich schneller oder könnte sie durch die hohe Anzahl von sogar langsamer werden? GETs?

Antworten:

3 für die Antwort № 1

EIN ZRANGEBYSCORE Kosten O(log(N) + M) woher N=|items in your set| und M=|items you"re selecting|. Also mach das ZRANGEBYSCORE und dann M GET Operationen sind nur O(long(N)+M+M) = O(log(N)+M) und wäre höchstens doppelt so langsam. Das Hin und Her des Netzwerks könnte sich erheblich verlangsamt haben, aber da jeder Ihrer Aufrufe eine unabhängige Operation ist, können Sie sie einfach weiterleiten. Sie können das Ganze auch in ein Lua-Skript schreiben und es einfach hin und her haben, was am besten wäre. Ich würde sagen, mit 99% iger Sicherheit wäre dies schneller als das Gleiche in SQL.

Wenn dies für Sie ein sehr häufiger Vorgang ist, können Sie sogar noch schneller arbeiten, indem Sie das gesamte Objekt in Ihrer sortierten Gruppe speichern und nicht nur die ID. Du hättest es getan key = object encoded as json, score = timestamp. Das würde dich retten O(M) auf Ihre Operation in Bezug auf die Notwendigkeit, keine zu tun GETs.

Ob dies ein guter Weg ist, Dinge zu tunhängt wirklich von Ihrem Anwendungsfall ab. Wie viel Geschwindigkeit benötigen Sie wirklich und wie wichtig sind Ihnen andere Funktionen einer herkömmlichen Datenbank? Denken Sie daran, dass Redis weit mehr als nur Datenstrukturen ist, auf die Clients zugreifen können, als auf eine herkömmliche Datenbank. Alle Daten müssen im RAM gespeichert werden. Um zu wissen, ob es das Richtige für Sie ist, benötigen wir weitere Informationen.