Inhaltsverzeichnis:
- Zwischenspeichern von Daten im Speicher
- Replizieren von Daten auf Slaves
- Datenmodellierung in Schlüsselwert-Speichern
- Betrieb auf Daten
- Evaluierung von Redis
Schlüsselwertspeicher in NoSQL sind alle über Geschwindigkeit. Sie können verschiedene Techniken verwenden, um diese Geschwindigkeit zu maximieren, vom Zwischenspeichern von Daten über das Speichern mehrerer Kopien von Daten bis hin zur Verwendung der am besten geeigneten Speicherstrukturen.
Zwischenspeichern von Daten im Speicher
Da auf Daten im Direktzugriffsspeicher (RAM) leicht zugegriffen werden kann, kann die Auswahl eines Schlüsselwertspeichers, der Daten im RAM zwischenspeichert, den Zugriff auf Daten erheblich beschleunigen, wenn auch zum Preis. höhere Serverkosten.
Oft ist dieser Kompromiss wert. Sie können leicht berechnen, welcher Prozentsatz Ihrer gespeicherten Daten häufig angefordert wird. Wenn Sie wissen, dass im Allgemeinen alle fünf Minuten fünf Prozent angefordert werden, nehmen Sie fünf Prozent Ihrer Datengröße und fügen Sie diese Zahl als freien RAM-Speicher auf Ihren Datenbankservern hinzu.
Beachten Sie, dass das Betriebssystem, andere Anwendungen und der Datenbankserver ebenfalls Speicheranforderungen haben.
Replizieren von Daten auf Slaves
In Schlüsselwertspeichern wird ein bestimmter Schlüssel auf einem der Server im Cluster gespeichert. Dieser Prozess wird als Schlüsselpartitionierung bezeichnet. Dies bedeutet, dass, wenn dieser Schlüssel ständig angefordert wird, dieser Knoten die meisten Anfragen erhält. Dieser Knoten ist daher langsamer als Ihre durchschnittliche Anforderungsgeschwindigkeit und beeinträchtigt möglicherweise die Servicequalität für Ihre Benutzer.
Um dies zu vermeiden, unterstützen einige Schlüsselwertspeicher das Hinzufügen von schreibgeschützten Replikaten, die auch als Slaves bezeichnet werden. Redis, Riak und Aerospike sind gute Beispiele. Durch die Replikation kann der Schlüssel mehrfach auf mehreren Servern gespeichert werden, wodurch die Antwortgeschwindigkeit erhöht wird, jedoch auf Kosten von mehr Hardware.
Einige Schlüsselwertspeicher garantieren, dass die Repliken des Schlüssels immer denselben Wert haben wie der Master. Diese Garantie wird als vollständig konsistent bezeichnet. Wenn auf dem Master-Server, der den Schlüssel enthält, eine Aktualisierung stattfindet, sind alle Repliken garantiert auf dem neuesten Stand.
Nicht alle Schlüsselwert-Geschäfte garantieren diesen Status (z. B. Riak). Wenn es also wichtig ist, millisekundenaktuell zu sein, wählen Sie eine Datenbank, deren Repliken vollständig konsistent sind (z. B. Aerospike).
Datenmodellierung in Schlüsselwert-Speichern
Viele Schlüsselwert-Speicher unterstützen nur grundlegende Strukturen für ihre Werttypen, so dass der Anwendungsprogrammierer die Aufgabe hat, die Daten zu interpretieren. Die einfache Datentypunterstützung umfasst normalerweise Zeichenfolgen, Ganzzahlen, JSON und Binärwerte.
Für viele Anwendungsfälle funktioniert dies gut, aber manchmal ist ein etwas differenzierterer Zugriff auf Daten nützlich.Redis unterstützt zum Beispiel die folgenden Datenwerttypen:
-
String
-
Liste
-
Set
-
Sortiertes Set
-
Hash-Maps
-
Bit-Arrays
-
Hyperlog-Logs
Sortierte Sets können Sie werden nach übereinstimmenden Wertebereichen gefragt - ähnlich wie bei der Abfrage eines Wertindexes, der nach Datum sortiert ist, was sehr nützlich ist, um nach einer Teilmenge von typisierten Daten zu suchen.
Betrieb auf Daten
Redis enthält Operationen, um Schlüsselwerte direkt zu inkrementieren und zu dekrementieren, ohne eine Reihe von Schritten zum Lesen, Modifizieren und Aktualisieren (RMU) ausführen zu müssen. Sie können dies innerhalb einer einzigen Transaktion tun, um sicherzustellen, dass keine andere Anwendung den Wert während einer Aktualisierung ändert. Diese datentypspezifischen Operationen umfassen das Hinzufügen und Entfernen von Elementen zu Listen und Sets.
Sie können sogar die Funktion zur automatischen Vervollständigung in der Benutzeroberfläche einer Anwendung bereitstellen, indem Sie den Befehl Redis ZRANGEBYLEX verwenden. Dieser Befehl ruft einen Schlüsselsatz ab, der teilweise mit einer Zeichenfolge übereinstimmt. Wenn Sie also "NoSQL for" in der Suchleiste einer Anwendung eingeben, die auf Redis basiert, würden Sie den Vorschlag "NoSQL for Dummies" sehen. "
Evaluierung von Redis
Redis ist stolz darauf, ein sehr leichter, aber extrem schneller Schlüsselwert-Speicher zu sein. Ursprünglich wurde es als In-Memory-Key-Value-Store konzipiert, verfügt aber jetzt über datenträgerbasierte Datenspeicherung.
Sie können Redis zum Schutz von Daten verwenden, indem Sie den AOF-Modus (Append only file) aktivieren und Redis anweisen, Daten bei jeder Abfrage auf die Festplatte zu zwingen (bekannt als fsync flushing ). AOF verlangsamt natürlich die Schreibvorgänge, bietet jedoch eine höhere Haltbarkeit für Daten. Beachten Sie jedoch, dass Sie noch bis zu einer Sekunde Befehle verlieren können.
Außerdem hat Redis erst kürzlich Unterstützung für das Clustering hinzugefügt. In der Tat, zum Zeitpunkt dieses Schreibens, ist Redis Clustering-Unterstützung in der Beta-Testphase. Glücklicherweise verwendet Redis ein Shared-Nothing-Clustermodell mit Mastern für bestimmte Schlüssel und Slaves, die niemals direkt von einem Client geschrieben werden. nur der Meister tut es. Die Bereitstellung von Shared-Nothing-Clustern sollte es Redis erleichtern, zuverlässiges Clustering zu implementieren, als für Datenbanken, die Schreibvorgänge für alle Replikate ermöglichen.
Wenn Sie eine Caching-Schicht mit sehr hoher Geschwindigkeit im Arbeitsspeicher vor einer anderen Datenbank verwenden möchten - normalerweise werden MongoDB oder Riak zusammen mit Redis verwendet -, dann bewerten Sie Redis als Option. Da sich die Unterstützung für Clustering und die Datenhaltbarkeit weiterentwickelt, kann Redis möglicherweise andere Backend-Datenbanken überholen.