Inhaltsverzeichnis:
Video: proxSafe Key Management - Schranksysteme zur elektronischen Verwaltung von Schlüsseln 2024
Die schnellen Lesemöglichkeiten der Schlüsselwert-Speicher stammen aus der Verwendung gut definierter Schlüssel. Diese Schlüssel sind in der Regel Hash-Werte, was einem Schlüsselwertspeicher eine sehr vorhersagbare Möglichkeit gibt, zu bestimmen, auf welcher Partition (und damit auf welchem Server) sich Daten befinden. Ein bestimmter Server verwaltet eine oder mehrere Partitionen.
Ein guter Schlüssel ermöglicht es Ihnen, den einzelnen Datensatz, der eine Abfrage beantwortet, eindeutig zu identifizieren, ohne sich irgendwelche Werte in diesem Datensatz ansehen zu müssen. Ein ungültiger Schlüssel erfordert, dass Ihr Anwendungscode Ihren Datensatz interpretiert, um festzustellen, ob er tatsächlich der Abfrage entspricht.
Wenn Sie Ihren Schlüssel nicht gut entwerfen, kann es passieren, dass ein Server überproportional schwerer ist als die anderen, was zu einer schlechten Leistung führt. Wenn beispielsweise die aktuelle Systemzeit als Schlüssel verwendet wird, werden alle neuen Daten auf den letzten Knoten im Cluster verschoben, was zu einem Albtraum-Szenario der Neugewichtung führt.
Partitionierung
Der Partitionsentwurf ist wichtig, da einige Schlüsselwertspeicher wie Oracle NoSQL die Anzahl der Partitionen nicht ändern, wenn ein Cluster erstellt wird. Ihre Verteilung auf die Server kann jedoch geändert werden. Beginnen Sie also mit einer großen Anzahl von Partitionen, die Sie in Zukunft ausweiten können.
Ein Beispiel für eine Partitionierung ist Voldemorts konsistenter Hash-Ansatz, wie gezeigt. Hier sehen Sie die gleichen Partitionen, die zunächst auf drei Server verteilt sind, und später auf vier Servern. Die Anzahl der Partitionen bleibt gleich, aber ihre Zuordnung ist auf verschiedenen Servern unterschiedlich. Das gleiche gilt für ihre Repliken.
Zugreifen auf Daten auf Partitionen
Schlüsselwertspeicher sind ohne einzelnen Fehlerpunkt hoch verteilt. Dies bedeutet, dass kein Master-Koordinierungsknoten benötigt wird, um die Server innerhalb eines Clusters zu überwachen. Die Cluster-Verwaltung erfolgt automatisch über ein Chat-Protokoll zwischen Knoten im Server.
Sie können einen Trick im Client-Treiber verwenden, um maximale Leistung beim Abrufen und Speichern von Schlüsseln und Werten zu erzielen - der Client-Treiber protokolliert, welche Server welchen Bereich von Schlüsseln enthalten. Der Client-Treiber weiß also immer, mit welchem Server er sprechen soll.
Die meisten Datenbanken, einschließlich NoSQL, leiten eine Anforderung an alle Mitglieder eines Clusters weiter. Dieser Cluster akzeptiert das Schreiben entweder intern oder leitet es unter der Haube an den richtigen Knoten weiter. Diese Einrichtung bedeutet, dass eine zusätzliche Netzwerkauslösung zwischen Knoten möglich ist, was die Latenzzeit erhöhen kann.
Um die Erkennungslatenz zu vermeiden, verwalten die meisten Client-Treiber von Schlüsselwert-Speichern eine Metadatenliste der aktuellen Knoten in einem Cluster und welche Partitionsbereiche von jedem Knoten verwaltet werden.Auf diese Weise kann der Client-Treiber den korrekten Server kontaktieren, was den Betrieb beschleunigt.
Wenn ein neuer Knoten zu einem Cluster hinzugefügt wird und die Metadaten veraltet sind, informiert der Cluster den Client-Treiber, der dann die neuesten Cluster-Metadaten herunterlädt, bevor die Anforderung erneut an den richtigen Knoten gesendet wird. Auf diese Weise wird ein maximaler Durchsatz bei minimalem Overhead während der Entwicklung aufrechterhalten. Ein weiterer Nebeneffekt besteht darin, dass ein Load Balancer keine Abfragen an den nächsten verfügbaren oder am wenigsten ausgelasteten Server weiterleiten muss - nur ein Server (oder Read Replica Server) erhält jemals eine Client-Anforderung, sodass kein Lastenausgleich erforderlich ist…