Какова цель двигатель черной дыры в MySQL?


Почему бы вам сохранить то, что вы не можете получить позже? Какой в этом смысл?

2 55

2 ответа:

Это полезно в реплицированной среде, где все инструкции SQL выполняются на всех узлах, но вы хотите, чтобы только некоторые узлы фактически хранили результат. Это пример использования, приведенный в документации:http://dev.mysql.com/doc/refman/5.0/en/blackhole-storage-engine.html

другие виды использования, приведенные в документации, включают:

  • проверка синтаксиса файла дампа.
  • измерение накладных расходов из двоичного журнала, путем сравнение производительности с использованием черных и без двоичного ведения журнала включен.
  • черных дыр это, по существу, "не-ОП" двигатель хранения, поэтому он смог быть использован для находить представление узкие места, не связанные с самим механизмом хранения.

Предположим, у вас есть два компьютера, на каждом из которых работает сервер MySQL. На одном компьютере размещена основная база данных, а на втором компьютере -репликация раб что вы используете в качестве резервной копии.

кроме того, предположим, что ваш основной сервер содержит некоторые базы данных или таблицы, которые вы не хотите создавать резервные копии. Возможно, это таблицы кэша с высоким оттоком, и не имеет значения, потеряете ли вы их содержимое. Таким образом, чтобы сэкономить место на диске и избежать ненужного использования процессора, памяти и дискового ввода-вывода, вы используете параметры репликации чтобы настроить ведомое устройство для игнорирования операторов, влияющих на таблицы, резервное копирование которых не требуется.

но так как фильтры репликации применяются только на ведомом сервере, бинлоги для все инструкции, выполняемые на главном сервере, по-прежнему должны передаваться по сети. Здесь теряется пропускная способность; главный сервер отправляет binlogs для транзакций, которые ведомый просто собирается выбрасывайте после их получения. Можем ли мы сделать лучше и избежать ненужного использования полосы пропускания?

Да, мы можем,и вот где появляется двигатель BLACKHOLE. На тот же компьютер что главный сервер работает, мы запускаем второй, фиктивный mysqld процесс, это один хостинг базы данных BLACKHOLE. Мы настраиваем этот фиктивный процесс для репликации из binlog основного процесса с теми же параметрами репликации, что и реальный ведомый, и для создания собственного binlog. Этот теперь binlog фиктивного процесса содержит только операторы, которые нужны реальному подчиненному устройству, и он не выполнил никакой реальной работы, кроме фильтрации нежелательных операторов из binlog (поскольку он использует движок BLACKHOLE). Наконец, мы настраиваем истинное ведомое устройство для репликации из binlog фиктивного процесса, а не из binlog исходного основного процесса. Теперь мы устранили ненужный сетевой трафик между двумя компьютерами, на которых размещены главный и ведомый серверы.

этот настройка-это то, что описывается и иллюстрируется (гораздо более кратко) этим абзацем и диаграммой из The BLACKHOLE docs:

предположим, что ваше приложение требует подчиненных правил фильтрации, но передача всех двоичных данных журнала в подчиненное устройство сначала приводит к слишком большому трафику. В таком случае можно настроить на главном хосте "фиктивный" ведомый процесс, механизм хранения которого по умолчанию является BLACKHOLE, изображенный следующим образом:

Diagram of the scenario described above

помимо фильтрации, документы также загадочно намекают, что использование сервера BLACKHOLE с включенным binlogging " может быть полезен в качестве ретранслятора ... механизм". Этот вариант использования менее конкретизирован в документах, но можно представить себе сценарий, в котором это имело бы смысл. Например, предположим, что у вас есть много подчиненных серверов, все на компьютерах в локальной сети с быстрыми локальными соединениями друг с другом, что все необходимо реплицировать большие объемы данных с удаленного ведомого устройства, которое может быть подключено только через интернет. Вы не хотите, чтобы все они реплицировались непосредственно из главного окна, так как тогда вы получаете одни и те же данные несколько раз и используете в несколько раз больше пропускной способности интернета, чем вам нужно. Но предположим, что вы и не хочу, чтобы только один из ваших существующих рабов реплицировался от хозяина, а другие реплицировались с этого раба, возможно, потому, что ваши рабы работают на гораздо менее надежных машинах, чем мастер, или запускают некоторые другие процессы, которые могут убить коробку, съев весь ее процессор или память, и вы не хотите рисковать программным или аппаратным сбоем на промежуточном ведомом устройстве, снимая всю вашу подчиненную сеть. Чем вы занимаетесь?

одним из возможных компромиссов было бы ввести дополнительную коробку в вашу подчиненную сеть, чтобы выступать в качестве посредника, оптимизированного для надежности и производительности, а не для хранения. Дайте ему небольшой, надежный SSD-накопитель и ничего не запускать на нем, кроме mysqld процесс репликации с удаленного ведущего устройства, и он производит binlogs, что другие ведомые устройства могут подписаться. И, конечно же, установите этот промежуточный раб для использования двигателя BLACKHOLE, чтобы ему не требовалось место для хранения.

и это, и промежуточный подчиненный фильтр, подробно описанный в документации, являются крайними случаями; большинство пользователей MySQL никогда не окажутся в ситуациях, когда они выиграют от использования любой из этих стратегий, не говоря уже о достаточной выгоде, чтобы оправдать выполнение работы по их фактической настройке. Но, по крайней мере теоретически, механизм BLACKHOLE может быть использован для создания промежуточного узла в сети реплицирующих ведомых устройств в качестве стратегии сохранения пропускной способности, не требуя, чтобы этот узел фактически хранил данные на диске.