Arjen Lentz is a former Community Relations Manager at MySQL. He is currently the owner of Open Query and lives in Brisbane, Australia.
Арьен Ленц (Arjen Lentz)
Как известно, MySQL 5.0 в настоящее время находится на этапе бета-тестирования. Это может показаться банальным, но никакое программное обеспечение не может волшебным образом стать стабильным (качественным продуктом) просто с течением времени! Теперь, после того, как команда наших тестеров сделала свое дело, процесс достижения гарантированного качества (Quality Assurance - QA - process) зависит от вас, многочисленных пользователей MySQL. Начиная с версии 5.0, в MySQL появляется обширный набор новых возможностей, для которых жизненно необходим большой объем тестирования. Мы хотим быть уверены, что MySQL 5.0 достигнет высочайшего качества так скоро, как только возможно.
Конечно, у нас есть небольшое количество тестов для проверки базовой функциональности, но ничто не сравнится с реальным миром! Каждый из вас использует MySQL в своем индивидуальном окружении, относится ли это к операционной системе, или просто к способу, которым ваш код использует сервер MySQL.
Итак, наш главный инженер по качеству Омер БарНир (Omer BarNir) хотел бы попросить у вас помощи в процессе повышения качества продукта путем тестирования некоторых ключевых возможностей MySQL 5.0: хранимых процедур, представлений, триггеров и словаря данных. Вы, возможно, уже знакомы с некоторыми из этих возможностей по работе с другими реляционными СУБД, но на всякий случай, в этой статье имеется краткое введение со ссылками на большое количество дополнительной информации - чтобы вам было легче начать.
Мы не предлагаем вам немедленно начать использовать MySQL 5.0 на ваших производственных серверах - для этого он еще не годится. Но, может быть, вы можете установить его на некоторых из ваших машин, используемых разработчиками? В будущем, когда появится производственная версия MySQL 5.0, это позволит вам взять уверенный старт.
Если у вас используется большая система с репликацией и множеством подчиненных (slave) серверов, один из самых эффективных способов тестирования новой версии MySQL - просто запустить ее на некоторых слэйвах. Тогда вы увидите, как она работает сравнительно со старыми версиями, и если что-то пойдет не так, можно перераспределить нагрузку между серверами и система, как целое, останется функциональной.
Если бы вы смогли слелать что-то вроде этого, было бы просто фантастично! Но другие (более скромные) конфигурации тоже очень полезны для целей тестирования. Любой вклад в процесс повышения качества MySQL 5.0 будет высоко оценен. См. раздел "MySQL 5.0. Бета-вызов" в конце статьи.
Вам будет необходим сервер MySQL 5.0, установленный и работающий на Вашей системе. Бинарные коды доступны для большинства платформ, включая Windows, Mac OS X, Linux и многие другие Unix-системы, в том числе 64-битные. Если у Вас еще нет MySQL 5.0, Вы можете загрузить его с http://dev.mysql.com/downloads/mysql/5.0.html
Можно установить MySQL 5.0 наряду с другими существующими версиями без каких-либо конфликтов. В Windows это очень просто. Удостоверьтесь только, что Вы выбрали другое имя сервиса и другой номер порта. В Unix самый простой способ - использовать RPM-инсталляцию для рабочей системы и бинарный tar-архив для тестовой. Каждая версия располагается в своей отдельной директории.
Вы можете тестировать новые возможности, к примеру, исследуя их синтаксис по "MySQL Reference Manual" и просто пробуя некоторые из них - если Вы получаете сообщение о неверном синтаксисе, это свидетельствует об успехе теста: MySQL должен выдать соответствующее сообщение. Если же MySQL сбоит, "ломается", Вы определенно наткнулись на программную ошибку! Любое другое некорректное или непредсказуемое поведение может также указывать на ошибки.
Вы можете создавать отчеты об ошибках при посредстве bugs.mysql.com. Это очень важно. Простая констатация ошибки это одно дело, но наши разработчики могут исправить ее, только если они хорошо представляют суть проблемы. Система отслеживания ошибок MySQL (bugs system) как раз для того и создана. Простого сообшения об ошибке по email недостаточно, поскольку оно не подчинено определенной структуре (может отсутствовать некоторая важная информация) и воспроизведение ситуации может оказаться невозможным. См. ссылку в конце статьи для получения более полной информации про отчеты об ошибках в MySQL.
Еще один способ тестирования заключается в попытках использования SQL-кода, написанного для другой реляционной СУБД. Это может быть весьма эффективным, особенно в случае хранимых процедур и представлений, поскольку Вы с относительно небольшими затратами сможете создавать достаточно сложные тесты. Возможно, у Вас уже есть кое-какие тестовые пакеты или код для оценки производительности, которые Вы также можете использовать.
Было бы здорово, если бы Вы смогли протестировать новые возможности
MySQL при помощи существующих или разрабатываемых приложений, включив в
них либо код для работы с новой версией, либо проверку версии MySQL
(можно использовать команду SELECT VERSION()
) с последующим выбором
соответствующей ветви исполнения программы. Внутри приложения можно
осуществить определенную обработку, что в MySQL 5.0 удобно сделать при
помощи хранимых процедур. Подобным образом представление может заменить
множество отдельных запросов.
Уверен, Вам понравится эта идея. Дерзайте! И, несмотря ни на что, пытайтесь сделать невозможное. В реальном мире чего только не бывает, и поэтому мы хотим протестировать как можно больше разных ситуаций. Если у Вас появились вопросы, можете обсудить их в тематических форумах, ссылки на которые приведены в статье. Опытные пользователи, также как и разработчики, помогут Вам.
Что Вам все это даст? Новую устойчивую реализацию MySQL превосходного качества. И что лучше всего - вы заранее будете знать, что Ваше приложение будет отлично работать с MySQL 5.0, когда появится его устойчивая версия. Потому что Вы уже опробовали его в своем конкретном окружении, а заодно приобрели новые знания и навыки, знакомясь с новыми возможностями.
Также я уверен, что пользователи, оказавшиеся особенно полезными для улучшения качества продукта, получат соответствующее признание. См. раздел "MySQL 5.0. Бета-вызов" в конце статьи. Доверять там, где это необходимо - в этом сила сообщества, и мы весьма благодарны вам за сотрудничество!
А теперь бросим взгляд на отдельные возможности MySQL 5.0, которые мы хотели бы проверить.
MySQL 5.0 реализует хранимые процедуры и функции в соответствии со стандартом SQL:2003. Они представляют собой блоки команд SQL, которые описываются один раз хранятся внутри сервера MySQL. Вы можете вызывать их из своего приложения, когда это необходимо, либо отдельной командой (процедуры), либо из запроса (функции).
Главное различие между процедурой и функцией состоит в том, что функция всегда возвращает некоторое значение. Но Вы также можете использовать возвращаемые параметры для получения данных из хранимой процедуры, или даже заставить ее возвращать некий набор результатов Вашему приложению!
Текущая реализация не поддерживает никаких внешних языков. Она поддерживает синтаксис SQL:2003, но в то же время доступен целый ряд условных конструкций, итерации и конструкции обработки ошибок.
Замечание: Существовало ограничение, в соответствии с которым хранимая функция не могла получить доступ к какой-либо таблице. Это ограничение снято в марте 2005 г.
Обычно бизнес-логика приложения реализуется в виде хранимых процедур с целью достижения большей безопасности или большей переносимости. Лучше дать пользователю возможность вызвать хранимую процедуру, чем разрешать непосредственный доступ к таблицам данных.
Представление подобно таблице. Содержимое такой таблицы формируется динамически как результат работы оператора SELECT. Представления реализуются с использованием алгоритма временных таблиц MySQL, или же действуют как своего рода макрокоманды, так что когда вы осуществляете доступ к представлению, ваш запрос фактически преобразуется внутри сервера и становится частью определения представления. В этом последнем случае представление становится модифицируемым. Это значит, что для его модификации можно пользоваться командами INSERT, UPDATE и DELETE! Конечно, физически представление не может быть модифицируемым, если оно содержит группировки или агрегатные функции, поскольку в этом случае результат не является набором строк с данными.
В приложениях часто повторяются запросы, содержащие простые соединения таблиц. С помощью представлений код приложения можно сделать более простым для чтения и поддержки, особенно когда запросы становятся все более сложными. Представления позволяют сохранить работоспособность приложения после того, как вы фактически изменили структуру таблиц данных. Последнее по порядку, но не по значимости: представления позволяют вам реализовать разграничение доступа на уровне записи. Вы можете дать пользователю только к тем записям, которые содержат определенный код города, или принадлежат определенной учетной записи.
Триггер - это команда SQL (или блок таких команд), которая срабатывает по определенному действию (такому как UPDATE или DELETE), производимому над таблицей, которой триггер принадлежит. Триггер имеет доступ как к первоначальной (старой), так и к новой версиям данных строки, обрабатываемой запросом.
А теперь плохая новость: триггеры не могут получить доступ к "чужим" таблицам. Наши разработчики напряженно работают, чтобы снять это ограничение. Так что в настоящее время функциональность триггеров весьма ограничена, и мы предполагаем, что вы не будете интенсивно использовать их сейчас. Однако уже сейчас триггеры могут оказаться очень удобными, и когда ограничения будут сняты, вы сможете погрузиться в них с головой!
Об этой возможности я говорю лишь для полноты картины, поскольку она
может оказаться полезной при пользовании другими возможностями MySQL.
Если Вы посмотрите на список баз данных MySQL 5.0, то отметите появление
новой базы данных INFORMATION_SCHEMA
. Она содержит множество таблиц,
каждая из которых детально описывает определенные параметры сервера
MySQL, определения таблиц и т. д. В основном, это большое количество
метаданных, к которым Вы можете получить доступ по запросам (используя
соединения!)
База данных INFORMATION_SCHEMA
, еще одна особенность стандарта SQL:2003,
на самом деле не существует физически: сервер предоставляет
метаинформацию динамически. В предыдущих версиях MySQL некоторые из этих
данных также были доступны через различные SHOW-команды - однако, их
нельзя было использовать в обычных запросах с соединениями. В этом
подлинная мощь базы данных INFORMATION_SCHEMA
.
Эта статья содержит детальную информацию о процессе реализации MySQL, именовании версий, а также как лучше всего формировать отчеты об ошибках:
Это еще один внешний ресурс с большим количеством информации о возможностях MySQL, обсуждаемых в этой статье: http://mysql.gilfster.com/ Этот сайт поддерживается Эндрю Гилфрином (Andrew Gilfrin), очень активным и полезным членом сообщества MySQL. Спасибо, Эндрю!
"Крутые" подарки от MySQL (футболки, кружки, книги) для пользователей, проявивших наибольшую активность, непосредственно тестируя 5.0, либо информируя других пользователей о возможностях 5.0. Например:
Чтобы рассказать нам об опубликованных статьях, о web-сайтах или ваших blog'ах, пользуйтесь нашей формой обратной связи.