Справочное руководство по MySQL версии 4.1.1-alpha



         

Глава 4.10.7 Часто задаваемые вопросы по репликации - часть 5


Q: Как использовать репликацию для повышения производительности системы?

A: Установите один сервер как головной и направляйте все записи к нему, а также сконфигурируйте такое количество подчиненных серверов, на какое у вас хватит средств и дискового пространства, и распределите чтение между головным сервером и подчиненными серверами. Можно также запустить подчиненные серверы с опциями --skip-bdb, --low-priority-updates и --delay-key-write=ALL, чтобы получить увеличение скорости на подчиненном сервере. В данном случае подчиненный сервер для повышения скорости будет использовать нетранзакционные таблицы MyISAM вместо таблиц BDB.

Q: Что нужно сделать, чтобы подготовить свой клиентский код для использования репликации, повышающей производительность?

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

  • Safe_writer_connect()
  • Safe_reader_connect()
  • Safe_reader_query()
  • Safe_writer_query()
  • Префикс safe_ означает, что функция будет нести ответственность за обработку всех возникающих ошибок.

    После этого нужно преобразовать клиентский код так, чтобы он использовал библиотеку оболочки. Вначале все это покажется лишней головной болью, но в конечном счете ваши усилия окупятся. Все приложения, построенные в соответствии с приведенной выше схемой, смогут "приобщиться" к преимуществам решения один головной/много подчиненных. Код будет гораздо легче поддерживать, а добавление опций поиска неисправностей станет тривиальным. К примеру, если вам захочется узнать, какой запрос среди многих тысяч возвращает ошибку или реализовать регистрацию продолжительности выполнения каждого запроса, то понадобится изменить всего пару функций. Если у вас уже написано много кода, то для автоматизации задачи его преобразования можно использовать написанную Монти утилиту replace, которая имеется в стандартном дистрибутиве MySQL, или написать собственный сценарий на Perl. Остается надеяться, что ваш код удовлетворяет некоторой распознаваемой схеме. В противном случае будет лучше переписать его каким-либо образом, или, по крайней мере, вручную подогнать его под схему.




    Содержание  Назад  Вперед