Вопрос

Зачем вам сохранить что -то, что вы не можете получить позже? В чем смысл?

Это было полезно?

Решение

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

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

  • Проверка синтаксиса файла дампа.
  • Измерение накладных расходов по бинарной ведению, сравнивая производительность, используя черную дыру с включенной бинарной ведением и без него.
  • Blackhole-это, по сути, «NO-OP» двигатель для хранения, поэтому его можно использовать для поиска узких мест производительности, не связанных с самим двигателем хранения.

Другие советы

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

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

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

Да, мы можем, и вот где входит двигатель Blackhole. На тот же компьютер что мастер -сервер работает, мы запускаем второй, манекен mysqld Процесс, этот развлекает базу данных Blackhole. Мы настраиваем этот фиктивный процесс, чтобы воспроизвести из Binlog Master Process, с теми же вариантами репликации, что и настоящий раб, и создавать собственный Binlog. Binlog от Dummy Process теперь содержит только те утверждения, которые нуждаются в реальном рабов, и он не выполнил никакой реальной работы, помимо фильтрации нежелательных утверждений от Binlog (поскольку он использует двигатель Blackhole). Наконец, мы настраиваем истинный раб, чтобы повторить из Binlog от фиктивного процесса, а не из Binlog оригинального мастер -процесса. Теперь мы устранили ненужный сетевой трафик между двумя компьютерами, размещающими мастер и подчиненные серверы.

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

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

Diagram of the scenario described above

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top