Frage

Warum sollten Sie etwas speichern, das Sie später nicht abrufen können? Was ist der Punkt?

War es hilfreich?

Lösung

Es ist nützlich in einer replizierten Umgebung, in der alle SQL -Anweisungen auf allen Knoten ausgeführt werden. Sie möchten jedoch nur, dass einige Knoten das Ergebnis tatsächlich speichern. Dies ist ein in der Dokumentation angegebener Anwendungsfall: http://dev.mysql.com/doc/refman/5.0/en/blackhole-storage-engine.html

Weitere Verwendungen in der Dokumentation sind:

  • Überprüfung der Dump -Datei -Syntax.
  • Messung des Overheads aus der Binärprotokollierung durch Vergleich der Leistung mit Blackhole mit und ohne Binärprotokollierung aktiviert.
  • Blackhole ist im Wesentlichen eine "No-Op" -Ag-Speicher-Engine, daher könnte sie zum Auffinden von Leistungsengpassungen verwendet werden, die nicht mit der Speichermotor selbst zusammenhängen.

Andere Tipps

Angenommen, Sie haben zwei Computer, die jeweils einen MySQL -Server ausführen. Ein Computer hostet die primäre Datenbank, und der zweite Computer hostet a Sklavin replizieren dass Sie als Backup verwenden.

Nehmen wir außerdem an, dass Ihr primärer Server einige Datenbanken oder Tabellen enthält, die Sie nicht sichern möchten. Vielleicht sind sie mit hohen Cache-Tabellen und es spielt keine Rolle, ob Sie ihren Inhalt verlieren. Um den Speicherplatz zu sparen und unnötige Verwendung von CPU, Speicher und Festplatten -IO zu vermeiden, verwenden Sie die Replikationsoptionen So konfigurieren Sie den Slave so, dass Sie Anweisungen ignorieren, die sich auf die Tabellen auswirken, die Sie nicht unterstützen möchten.

Aber da die Replikationsfilter nur angewendet werden auf dem Sklavenserver, die Binlogs für alle Auf dem Master -Server ausgeführte Anweisungen müssen weiterhin über das Netzwerk übertragen werden. Hier wird eine Bandbreite verschwendet; Der Master -Server sendet Binlogs für Transaktionen, die der Sklave beim Empfangen einfach wegwerfen wird. Können wir es besser machen und die unnötige Bandbreitennutzung vermeiden?

Ja, wir können, und dort kommt der Blackhole -Motor ins Spiel. Auf der Gleicher Computer Dass der Master -Server läuft, wir führen eine Sekunde aus, Dummy mysqld Prozess, dieser eine Blackhole -Datenbank hostet. Wir konfigurieren diesen Dummy -Prozess so, dass sie sich aus dem Binlog des Master -Prozesses mit den gleichen Replikationsoptionen wie der reale Sklave replizieren und einen eigenen Binlog erstellen. Das Binlog des Dummy -Prozesses enthält nun nur die Aussagen, die der eigentliche Sklave benötigt, und es hat keine tatsächlichen Arbeiten geleistet, als die unerwünschten Aussagen aus dem Binlog herauszufiltern (da es die Blackhole -Engine verwendet). Schließlich konfigurieren wir den wahren Slave so, dass wir aus dem Binlog des Dummy -Prozesses und nicht aus dem Binlog des ursprünglichen Master -Prozesses replizieren. Wir haben jetzt den unnötigen Netzwerkverkehr zwischen den beiden Computern beseitigt, die die Master- und Slave -Server hosten.

Dieses Setup wird durch diesen Absatz und Diagramm von beschrieben und illustriert (viel enger) Die Blackhole -Dokumente:

Angenommen, Ihre Anwendung erfordert die Sklaven-Seite-Filterregeln, aber die Übertragung aller Binärprotokolldaten auf den Sklaven führt zuerst zu zu viel Verkehr. In einem solchen Fall ist es möglich, auf dem Master -Host einen "Dummy" -Slave -Prozess einzurichten, dessen Standard -Speicher -Engine schwarz ist, wie folgt dargestellt:

Diagram of the scenario described above

Neben der Filterung deuten auch die Dokumente kryptisch darauf hin, dass die Verwendung eines Blackhole -Servers mit aktivierter Binlogging verwendet wird "Kann als Repeater ... Mechanismus nützlich sein". Dieser Anwendungsfall ist in den Dokumenten weniger ausgearbeitet, aber es ist möglich, sich ein Szenario vorzustellen, in dem dies sinnvoll wäre. Nehmen wir beispielsweise an, dass Sie viele Sklavenserver haben, alle auf Computern in einem lokalen Netzwerk mit schnellen lokalen Verbindungen zueinander, die alle große Datenmengen von einem Remote -Sklaven replizieren müssen, der nur über das Internet verbunden werden kann. Sie möchten nicht, dass sie alle direkt aus der Masterbox replizieren. Seitdem erhalten Sie die gleichen Daten mehrmals und verwenden mehrmals mehr Internetbandbreite als Sie müssen. Aber nehme an, du hast du Auch Ich möchte nicht, dass sich nur eines Ihrer vorhandenen Sklaven vom Meister repliziert und die anderen diesen Sklaven replizieren, vielleicht weil Ihre Sklaven auf viel weniger zuverlässigen Maschinen als der Master laufen oder einige andere Prozesse ausführen, die die Box möglicherweise töten könnten Indem Sie all seine CPU oder den gesamten Speicher essen, möchten Sie keine Software oder Hardwarefehler auf dem Zwischensklaven riskieren, das Ihr gesamtes Sklavennetzwerk abnimmt. Wie geht's?

Ein möglicher Kompromiss wäre die Einführung einer zusätzlichen Box in Ihr Slave -Netzwerk, um als Vermittler zu fungieren, das für Zuverlässigkeit und Leistung und nicht für die Speicherung optimiert wird. Geben Sie ihm einen kleinen, zuverlässigen SSD -Laufwerk und führen Sie nichts davon ab, außer von a mysqld Prozessreplizieren vom Remote -Master und lassen Sie es Binlogs produzieren, die die anderen Sklaven abonnieren können. Richten Sie diesen Zwischensklave natürlich so ein, dass die Blackhole -Engine verwendet wird, damit er keinen Speicherplatz benötigt.

Sowohl diese als auch der Zwischenfiltersklave, der ausführlich in der Dokumentation beschrieben wird, sind Kantenfälle; Die meisten MySQL -Benutzer werden sich nie in Situationen befinden, in denen sie von einer dieser Strategien profitieren würden, geschweige denn genug davon zu profitieren, um die Arbeit zu rechtfertigen, um sie tatsächlich einzurichten. Zumindest theoretisch kann die Blackhole-Engine verwendet werden, um einen Zwischenknoten in einem Netzwerk von replizierenden Sklaven als Bandbreitenkonservierungsstrategie zu erstellen, ohne diesen Knoten zu benötigen, um die Daten tatsächlich auf der Festplatte zu speichern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top