Как сделать распределенную базу данных mysql

Добавил пользователь Morpheus
Обновлено: 05.10.2024

MySQL — реляционная система управления базами данных с открытым исходным. Простота использования и низкий порог входа сделал ее одной из популярных свободно распространяемых систем управления базами данных. MySQL используется как во многих небольших проектах (например, сайтах на WordPress), так и в высоконагруженных корпоративных системах.

В этой статье мы рассмотрим особенности установки MySQL на операционную систему Windows и расскажем о создании пользователей, оптимальной настройке производительности, устранении неполадок и о многом другом.

Подготовка Windows-сервера к установке MySQL

После этого в списке лицензий появится лицензия Windows Server 2019 Standard.

Через несколько минут сервер перейдет в состояние Active и к нему можно будет подключиться по протоколу RDP.

После создания сервера, ему автоматически присваивается пароль учетной записи Administrator. Под этой учетной записью мы и подключаемся по RDP.

После выполненных подготовительных действий, можно приступать к установке MySQL на Windows-сервер.

Установка MySQL

Перед началом установки скачаем дистрибутив из специального раздела на официальном сайте MySQL. Нажимаем кнопку Go to Download Page.

После перехода на страницу загрузки выбираем опцию Windows (x86, 32-bit), MSI Installer (mysql-installer-community) и нажимаем на кнопку Download. Это на самом деле 64-битная версия СУБД, которая отмечена вендором как 32-битная. В результате мы получим установочный пакет, который затем можно установить на сервер даже без подключения к интернету.

Также можно скачать версию mysql-installer-web-community, которая представляет собой автоматический установщик и работает при наличии подключения сервера к интернету. На серверах все же не часто можно встретить свободный доступ к интернету. После загрузки дистрибутива приступим к его установке.

Дистрибутив должен появиться в папке с загрузками. Теперь можем его выполнить из контекстного меню и начать установку.

В появившемся представлении выбираем в меню Full для установки всех компонентов СУБД. Для работы с базой данных будет достаточно установить Server Only. В примере мы выбрали Full, т.к. считаем, что для знакомства с базой данных дополнительно понадобится визуальная консоль для управления MySQL Workbench. Также будут полезны примеры данных, с которыми можно сразу начинать работу для эффективного изучения работы СУБД. Также есть возможность выбрать для установки отдельные элементы, выбрав в меню пункт Custom. Нажимаем кнопку Next.

На следующем экране появятся системные требования к установке, выполнив которые, установщик приведет систему в соответствие с ними. Нажмем на кнопку Execute.

После установки дополнительных пакетов нажимаем кнопку Next. Пакеты в статусе Manual являются опциональными и не будут препятствовать нормальной работе СУБД.

На следующем экране будут показаны устанавливаемые компоненты. Проверяем статус готовности к установке каждого компонента и нажимаем на кнопку Execute.

После установки компонентов убедимся в наличии статуса Complete по каждому из них. После этого нажмем на кнопку Next для перехода к следующему экрану.

На следующем представлении установщик предлагает выполнить конфигурацию компонентов MySQL Server, MySQL Router и Samples and Examples. Нажимаем кнопку Next.

В выпадающем меню Config Type выбираем Development Computer, т.к. установка выполняется в целях демонстрации. Для подключения к базе данных будем использовать протокол TCP/IP. Другие два варианта подключения, помимо TCP/IP, лучше использовать при локальном подключении, т.е. когда приложение установлено на том же сервере, что и база данных.

Например, метод подключения Shared Memory более производителен, он помогает избегать использование сетевого стека. Заметим, что в производственных средах метод подключения через TCP/IP более предпочтителен, т.к. приложение может иметь тенденцию к росту. Использование этого протокола в распределенной среде упрощает выявление и диагностику нештатного взаимодействия базы данных и приложения. Остальное оставляем по умолчанию и нажимаем кнопку Next.

На следующем экране выбираем тип аутентификации. Воспользуемся рекомендацией вендора, выберем пункт Use Strong Password Encryption for Authentication. Переключение на Use Legacy Authentication Method можем рассматривать только если драйвера приложения не поддерживают подключение к 8 версии MySQL. Нажимаем кнопку Next и переходим к следующему экрану.

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

На следующем экране установщик предлагает запускать MySQL Server в виде Windows-сервиса и установить его имя. Это самый приемлемый вариант, т.к. в противном случае запуск MySQL придется выполнять из командной строки. Чекбокс Start the MySQL Server at System Startup оставляем по умолчанию, чтобы база данных запускалась вместе с запуском сервера. В разделе Run Windows Service as… оставим значение Standard System Account, т.к. нет никаких причин запускать сервис MySQL от специализированной учетной записи. В некоторых случаях это бывает необходимо. Нажимаем кнопку Next.

Следующий этап — выполнение конфигурации в автоматическом режиме. Нажимаем кнопку Execute.

После выполнения конфигурации в автоматическом режиме все этапы должны быть помечены зеленой галочкой. Нажимаем кнопку Finish.

Следующий этап — конфигурирование MySQL Router и встроенных примеров. Нажимаем Next.

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

На следующем экране установщик предложит выполнить конфигурирование примеров — их загрузку в БД. Нажимаем Next.

После этого появится экран с полем для ввода реквизитов доступа к БД и кнопкой для тестирования подключения — Check. Вводим логин и пароль, которые задавали ранее и нажмем кнопку. После подтверждения успешного подключения нажмем на кнопку Next.

На следующем экране будет предложено проверить уже установленных в БД примеров и установить их (запустить скрипты). Нажимаем кнопку Execute.

После успешной проверки и установки нажимаем кнопку Finish.

На этом установка завершена. Перед нажатием на кнопку Finish выберем чекбокс напротив Start MySQL Workbench after setup, что позволит автоматически запустить соответствующую консоль управления.

Консоль запущена и можно переходить к работе с СУБД MySQL Server и ее дополнительной настройке.

Проверка работоспособности MySQL

После подключения к БД MySQL в окне для ввода запроса введем select 1 from dual и в результате в ответе получим 1. В нижней части рабочей области в поле Output зеленой галочкой отмечен успешный статус выполнения запроса.

Также мы можем перейти на вкладку Schemas и обнаружим тестовые данные, которые были загружены в базу данных во время установки. Из контекстного меню выполним запрос в таблицу film_actor. В ответе получим значения столбцов actor_id, film_id и last_update.

Базовая настройка MySQL

После проверки корректности исполнения запросов, добавим новую пользовательскую учетную запись. Для этого на вкладке Administration перейдем в представление Users and Privileges. Нажмем на кнопку Add Account и заполним поля Login Name, Password и Confirm Password. Остальное оставим без изменений.

Еще один важный экран — Options File. Располагается также на вкладке Administration. Здесь можно в графическом интерфейсе изменять переменные, которые задаются в конфигурационном файле my.ini.

В MySQL Workbench можно также следить за производительностью базы данных. Отдельные метрики сгруппированы для удобства просмотра. Здесь присутствуют следующие группы: Memory Usage, Hot Spots for I/O, High Cost SQL Statements, Database Schema Statistics, Wait Event Times, InnoDB Statistics и User Resource Use.

Заключение

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

Цель: познакомиться с особенностями организации сервера баз данных MySQL, методами создания баз данных на данном сервере и методами доступа к данным с использованием языка PHP.

Задачи:

Оглавление

Сервер MySQL на настоящий момент наиболее распространен при организации динамических сайтов или порталов в сети Интернет. Причин такой популярности несколько:

  • Доступность и открытый код программного обеспечения.
  • Многоплатформенность. Система написана на C и C++. Базовая платформа Solaris 2.7-2.8, SuSE Linux 7.1 (ядро 2.4, ReiserFS), но работает также в AIX, BSDI, DEC Unix, FreeBSD, HP-UX, Linux 2.0, Mac OS X, NetBSD, OpenBSD, OS/2, SGI Irix, SunOS, SCO OpenServer, SCO UnixWare, Tru64, Win9x, NT, Win2000.
  • Работает как многопотоковая система. Имеет прикладной интерфейс практически для всех систем и языков программирования, применяемых для разработки Web-приложений: C, C++, Java, Eiffel, Perl, PHP, Python, Tcl. Имеются ODBC-драйверы.
  • Организация быстрого доступа к данным, что особенно важно для Web. Таблицы организованы в виде B-tree (сбалансированных деревьев) со сжатием индекса. До 32 индексов на таблицу. До 16 колонок на индекс. Длина индекса до 500 байт. Допускает очень большие размеры таблиц: есть примеры использования MySQL с 60 000 таблиц и 5 миллиардами строк.
  • Поддерживает 6 типов организации таблиц: ISAM, MyISAM, BerkeleyBD(BDB), MERG, HEAP.
  • В версиях (начиная с 4.1) с таблицами типа InnoDB работают транзакции. Блокировки выполняются на уровне строк.

Сервер MySQL поддерживает в основном стандарт SQL92 (SQL2), но имеются ряд расширений к этому стандарту, а именно:

  • дополнительные типы полей MEDIUMINT, SET, ENUM и различные модификации BLOB и TEXT;
  • дополнительные атрибуты полей AUTO_INCREMENT, BINARY, NULL, UNSIGNED и ZEROFILL;
  • по умолчанию строки сравниваются независимо от регистра;
  • дополнительное ключевое слово LIMIT, которое позволяет ограничить количество строк в результате запроса;
  • дополнительные ключевые слова TEMPORARY и IF NOT EXISTS при создании/удалении таблиц;
  • ключ DELAYED при создании/замене строк;
  • ключ LOW_PRIORITY при манипуляции со строками;
  • оператор SHOW;
  • строки можно заключать не только в апострофы, но и в кавычки;
  • SET OPTION;
  • синонимы операторов OR (||) и AND (&&) и MOD (%);
  • функция LAST_INSERT_ID();
  • REGEXP — команда использования регулярных выражений;
  • собственные функции: IT_COUNT(), CASE, ELT(), FROM_DAYS(), FORMAT(), IF(), PASSWORD(), ENCRYPT(), md5(), ENCODE(), DECODE(), PERIOD_ADD(), PERIOD_DIFF(), TO_DAYS(), or WEEKDAY();
  • оператор REPLACE вместо DELETE + INSERT;
  • присвоение значений переменным в выражениях;
  • комментарии в стиле C и sh;
  • множество других мелких улучшений и несовместимостей, которые не позволят вам легко перейти с MySQL на другую СУБД.

Отсутствующие возможности стандарта ANSI SQL92:

  • до версии 4.1 было невозможно использовать подзапросы и одновременно заданные условия в части Where и Having;
  • до версии 5.1 отсутствуют хранимые процедуры и триггеры (триггеры не планируются совсем);
  • отсутствует поддержка представлений views.

Mysql поддерживает весьма широкий диапазон типов данных. Основные из них приведены в табл. 1.1.

Таблица 1.1: Список допустимых типов данных для сервера MySQL

Наименование

Описание

BIGINT [(length)]
[UNSIGNED]
[ZEROFILL]

Двоичный объект (максимальная длина 65535 байт)

Строка фиксированной длины (1 , , );

При установке сервера в начальной конфигурации на нем есть универсальный пользователь-администратор с максимальными возможностями ‘root’ и пустым паролем. Конечно, в реальной работе желательно сразу после установки изменить данного пользователя, защитив тем самым сервер. Но в нашем случае, мы можем написать скрипт, который подключается к серверу с данным именем и проверить корректность данного подключения.

Warning: mysql_connect(): Access denied for user 'root1'@'localhost' (using password: NO) in p:\home\kts\www\db_0.php on line 5

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

  • mysql_errno возвращает численный код ошибки выполнения последней операции с MySQL или 0, если соединение прошло успешно;
  • mysql_error возвращает строку разъяснения смысла ошибки последней операции с MySQL.

Поэтому желательно каждый раз при обращении к серверу БД проводить анализ корректности выполнения операции и принимать соответствующие меры, а именно:

Для аварийного принудительного завершения процесса на php существуют 2 оператора: exit() и die(). В скобках может быть передана текстовая строка, соответствующая данной ситуации. В операторах работы с БД чаще используется последний оператор.

Принимаемые меры несколько изменят текст скрипта и он теперь будет выглядеть следующим образом:

В случае, если в данном скрипте будет сделан второй вызов mysql_connect() с теми же аргументами, никакая новая связь не установится, вместо этого будет возвращен идентификатор уже открытой связи.

Как только выполнение сценария закончится, связь с сервером закроется. Однако связь с сервером может быть явно закрыта более ранним вызовом функции mysql_close(). Эта функция закрывает текущую открытую связь. В качестве необязательного аргумента ей может быть передан идентификатор связи. Когда это необходимо? Применение оператора явного закрытия связи с сервером MySQL требуется тогда, когда последующая обработка информации не связана с обращением к серверу, но содержит сложный и объемный алгоритм, который займет существенное время и ресурсы при обработке. В этом случае, чтобы не задерживать выполнение других параллельных процессов, которые обращаются к серверу MySQL, резонно закрыть соединение как можно раньше.

Функция mysql_pconnect открывает устойчивое или постоянное соединение с MySQL-сервером. Она имеет те же параметры, что и ранее рассматриваемая функция.

Функция mysql_pconnect() действует очень похоже на mysql_connect() с двумя важными различиями.

Во-первых, при соединении, функция должна сначала попытаться найти (устойчивую) связь, которая уже открыта тем же хостом, именем пользователя и паролем. Если она обнаруживается, возвратится ее идентификатор вместо открытия нового соединения.

Функцию mysql_pconnect() следует применять в тех приложениях PHP, в которых за короткий промежуток времени производится много соединений с сервером MySQL с использованием одного и того же пользователя. В этом случае функция mysql_pconnect() устраняет накладные расходы, связанные с созданием и открытием соединения.

Следует помнить, что функция mysql_pconnect() работает только в конфигурации PHP как модуля web-сервера.

После соединения с сервером вы можете с использованием специальныой функции создать там БД. Для этого служит функция Mysql_create_db( [, ]).

Параметрами функции являются:

  • имя создаваемой БД — строка символов;
  • идентификатор соединения — целое положительное число. Является необязательным параметром. При отсутствии данного указателя новая БД создается в текущем соединении.

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки. База данных также может быть создана и исполнением запроса, как мы уже рассматривали в интерактивном режиме с использованием административной консоли. Но аналогичный запрос может быть сформирован и прямо в скрипте и там же выполнен. Функции по исполнению запросов мы рассмотрим далее. А в этом разделе нам имеет смысл рассмотреть еще функцию — удаление БД с сервера:

msql_drop_db ( [, ] )

Возвращаемое значение TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Параметры подключения к серверу могут быть переданы не только в виде символьных констант, но и в виде переменных. Так как при создании собственной системы управлении контентом, вы будете размещать ее на неизвестном сервере под заранее неизвестным именем, которое вам будет предоставлено провайдером хостинга, то резонно вынести эти параметры в отдельный файл, который будет пригружаться командой INCLUDE, и в котором мы зададим конкретные значения этим параметрам. Тогда в случае перемещения системы на новый адрес нам требуется только поменять данный файл, все остальные скрипты останутся без изменения. Конечно, такое решение может быть признано наиболее стабильным. Файл с параметрами назовем common.php

Теперь наш скрипт изменится следующим образом:

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

Наиболее характерным сценарием работы с сервером баз данных после выполнение операций подключения является выбор конкретной БД и выполнение уже в этой базе различный запросов. Операция выбора БД выполняется функцией mysql_select_db().

Функция возвращает TRUE при успешном выполнении и FALSE при возникновении ошибки.

Обязательным параметром является имя базы данных, оно передается как символьная строка.

Необязательным параметром является идентификатор соединения link_identifier, который получен в результате корректного выполнения функции mysql_connect(). Если этот параметр не указан, то выбирается текущая связь.

Выбрана база данных 1.

1 в данном случае интерпретируется как TRUE.

Невозможно открыть БД kts.

Любой запрос к БД готовится как стандартный SQL-запрос в виде символьной строки, которая всегда заключается в двойные кавычки.

Особенности реализации оператора SELECT в языке SQL для сервера MYSQL состоят в следующем:

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

Из этого учебного пособия вы узнаете, как создавать среду для работы базы данных MySQL (она называется инстанс), подключаться к ней и удалять инстанс БД. Эти операции будут выполнены с помощью сервиса Amazon Relational Database Service (Amazon RDS). Все действия, описанные в данном учебном пособии, доступны на уровне бесплатного пользования.

Щелкните здесь, и в новом окне браузера откроется Консоль управления AWS. При этом пошаговое руководство останется открытым. Когда экран загрузится, найдите пункт RDS в списке Database (База данных) и нажмите его, чтобы открыть консоль Amazon RDS.

Как выглядит Консоль AWS

(Щелкните, чтобы увеличить.)

rds-1

Шаг 1. Создание инстанса БД MySQL

На этом этапе с помощью Amazon RDS будет создан инстанс БД MySQL класса db.t2.micro с хранилищем на 20 ГБ и активацией автоматического резервного копирования (срок хранения копий равен одному дню). Напоминаем, что все эти операции доступны на уровне бесплатного пользования.

а) В правом верхнем углу консоли Amazon RDS выберите параметр Region (Регион) и укажите регион, в котором требуется создать инстанс БД.

Примечание. Ресурсы облака AWS расположены в высокодоступных центрах обработки данных по всему миру. Каждый регион содержит несколько местоположений, называемых зонами доступности. Пользователи могут самостоятельно выбирать регион, в котором будут работать их ресурсы Amazon RDS.

rds-2-location

(Щелкните, чтобы увеличить.)

rds-2-location

б) В разделе Create database (Создать базу данных) выберите Create database (Создать базу данных).

rds-3-instances

(Щелкните, чтобы увеличить.)

rds-3-instances

в) Теперь можно выбрать ядро СУБД. Для выполнения заданий этого учебного пособия щелкните значок MySQL, выберите Only enable options eligible for RDS Free Usage Tier (Включить только настройки уровня бесплатного пользования RDS) и щелкните Next (Далее).

rds-5-selectMySQL

(Щелкните, чтобы увеличить.)

rds-5-selectMySQL

г) Теперь требуется выполнить настройку инстанса БД. В представленном ниже списке приводятся примеры параметров, которые можно использовать в данном руководстве.

Характеристики инстанса

Нажмите Next (Далее).

rds-6-devtest

(Щелкните, чтобы увеличить.)

rds-6-devtest

д) Вы находитесь на странице Configure Advanced Settings (Настройка дополнительных параметров), где можно указать дополнительную информацию, необходимую RDS для запуска инстанса БД MySQL. В представленном ниже списке приводятся примеры параметров для инстанса БД.

  • Virtual Private Cloud (VPC): выберите Default VPC (VPC по умолчанию). Дополнительную информацию о VPC см. в разделе Amazon RDS и Amazon Virtual Private Cloud (VPC).
  • Subnet Group (Группа подсетей): выберите группу подсетей default (По умолчанию). Дополнительную информацию о группах подсетей см. в разделе Работа с группами подсетей БД.
  • Public accessibility (Общий доступ): выберите Yes (Да). Инстансу базы данных будет присвоен IP-адрес, что позволит подключаться к базе данных непосредственно с пользовательского устройства.
  • Availability Zone (Зона доступности): выберите значение No Preference (Нет предпочтений). Для получения дополнительной информации см. раздел Регионы и зоны доступности.
  • VPC security groups (Группы безопасности VPC): выберите Create new VPC security group (Создать новую группу безопасности VPC). Будет создана группа безопасности, поддерживающая соединение между IP-адресом используемого устройства и созданной базой данных.

Настройки базы данных

  • Database Name (Имя базы данных): введите имя базы данных, которое может содержать от 1 до 64 буквенно-цифровых символов. Если имя не указано, Amazon RDS не сможет автоматически создать базу данных на основе нового инстанса БД.
  • Port (Порт): сохраните значение по умолчанию – 3306.
  • DB Parameter Group (Группа параметров БД): сохраните значение по умолчанию – default.mysql5.6. Дополнительную информацию см. в разделе Работа с группами параметров БД.
  • Option group (Группа настроек): выберите значение по умолчанию default:mysql5.7. С помощью групп настроек в Amazon RDS активируются и настраиваются дополнительные возможности. Дополнительную информацию см. в разделе Работа с группами настроек.
  • IAM DB authentication (Аутентификация IAM БД): выберите Disable (Отключить). С помощью этой настройки можно управлять данными для доступа к базе данных с использованием пользователей и групп AWS IAM.

Эта настройка недоступна на уровне бесплатного пользования. Дополнительную информацию см. в разделе Шифрование ресурсов Amazon RDS.

Резервное копирование

  • Backup Retention Period (Срок хранения резервных копий): в этом поле можно выбрать количество дней, в течение которого сохраняются резервные данные. В данном случае выберите значение 1 day (1 день).
  • Backup Window (Окно резервного копирования): задайте значение по умолчанию – No Preference (Нет предпочтений).
  • Enhanced Monitoring (Расширенный мониторинг): выберите Disable enhanced monitoring (Отключить расширенный мониторинг), чтобы остаться на уровне бесплатного пользования. В случае активации расширенного мониторинга в режиме реального времени становятся доступны метрики для операционной системы (ОС), на которой работает инстанс БД. Дополнительную информацию см. в разделе Просмотр метрик инстанса БД.

Performance Insights

Для выполнения заданий этого учебного пособия выберите Disable Performance Insights (Отключить Performance Insights).

Обслуживание

  • Auto minor version upgrade (Автоматическое промежуточное обновление версии): выберите Enable auto minor version upgrade (Включить автоматическое промежуточное обновление версии), чтобы получать автоматические обновления, как только они станут доступны.
  • Maintenance Window (Окно обслуживания): выберите No preference (Нет предпочтений).

Защита от удаления

Отключите параметр Enable deletion protection (Включить защиту от удаления) для выполнения заданий этого учебного пособия. Если этот параметр включен, базу данных невозможно удалить.

Учебное пособие по MySQL Workbench

База данных

Данные в MySQL управляются в базах данных в виде таблиц, которые также состоят из строк и столбцов. Что такое схема? Схема отличается от баз данных, поскольку она не имеет всех привилегий, которые имеет база данных, она имеет только привилегии таблиц, строк и столбцов, которые определяют структуру базы данных.

В этой статье мы объясним, что такое схема, как она работает и каковы различия между схемой и базой данных.

Что такое схема (schema)?

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

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

Сравнение базы данных и схемы

База данных Схема
Хранит данные в таблицах Обеспечивает логическое представление базы данных на основе таблиц
DML (язык модификации данных) используется для управления данными в базе данных. DDL (язык определения данных) используется для управления представлением таблиц.
Данные можно редактировать в любое время Модификации не поддерживаются
Он включает таблицы, схемы и все другие ограничения базы данных. Он включает только структуры таблиц и привилегии, относящиеся к таблицам.
Занимает память на сервере Не занимает памяти

Какие бывают типы схем

Схемы можно разделить на два типа в зависимости от их функций, как показано на диаграмме ниже.

Схемы можно разделить на два типа в зависимости от их функций

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

Как схема работает в MySQL

Обычный сервер хранит у себя все данные и обслуживает все клиентские запросы. Схема взаимодействия между сервером и клиентами изображена на рисунке. Серверные данные располагаются на одном или нескольких физических дисках. Чтобы сделать запрос, клиент устанавливает соединение с сервером. Сервер анализирует инструкции, выполняет их, извлекает данные и возвращает результаты запроса. По мере возрастания нагрузки производительность сервера снижается. Чтобы избежать этого, задействуют дополнительные ресурсы, например, наращивают память, ставят дополнительные процессоры и даже сетевые платы. Эта стратегия эффективна, если клиенты расположены в непосредственной близости от сервера, — например, несколько серверов приложений взаимодействуют с одной СУБД. Но в тех архитектурах, где сервер и клиенты удалены друг от друга, производительность обратно пропорциональна расстоянию.


Рисунок 2.5.2.1 – Обычный сервер баз данных

Решением этой проблемы являются распределенные базы данных (РБД), которые сегментируют хранимую информацию и перемещают отдельные ее блоки ближе к нужным клиентам. Способов организации таких баз данных много. Можно разместить таблицы на разных компьютерах или использовать несколько идентичных хранилищ. Во втором случае серверы взаимодействуют друг с другом для поддержания синхронизации. Если на одном из серверов происходит обновление данных, оно распространяется и на все остальные серверы.

К недостаткам распределенных баз данных можно отнести то, что возрастает сложность управления ими. Но преимуществ все же больше. Главное из них — повышение производительности. Данные быстрее обрабатываются несколькими серверами, а кроме того, данные располагаются ближе к тем пользователям, которые чаще с ними работают.

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

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

Распределенные базы данных трудно проектировать и обслуживать. Порядок работы в системе может со временем поменяться что повлечет за собой изменение схемы хранения данных. Как клиенты, так и серверы должны уметь обрабатывать запросы к данным, которые не расположены в ближайшей системе. Плохо спроектированная РБД может демонстрировать меньшую производительность, чем одиночный сервер.

РБД состоит из трех основных частей: клиентов, модуля обработки транзакций и хранилища данных. Сервер обычно берет на себя задачи обработки транзакций и хранения данных, хотя в полностью распределенной базе данных за решение этих задач отвечают разные аппаратные компоненты. Обратимся к рисунку. Здесь три клиента взаимодействуют с двумя модулями обработки транзакций, которые, в свою очередь, работают с двумя хранилищами. Клиенты посылают свои запросы модулям, а те определяют, в каком из хранилищ находятся требуемые данные.


Рисунок 2.5.2.2 – Распределенные серверы

В идеальном случае, клиенты не знают, является система распределенной или нет. Они лишь посылают ей запросы, а система возвращает клиентам результаты этих запросов. Как она это делает, клиентов не интересует. На практике распределенные базы данных проявляют разную "прозрачность". В крайнем случае РБД хранится на нескольких независимых серверах, а клиентскому приложению приходится выбирать сервер в зависимости от того, какую информацию требуется получить. Это подразумевает, что таблицы, находящиеся на разных серверах, не имеют никаких внутренних связей. Естественно, такая организация РБД лишь изредка оказывается полезной.

Система управления распределенными базами данных, или РСУБД, предоставляет клиентам унифицированный интерфейс доступа к данным, благодаря которому возникает иллюзия единого сервера. Если данные находятся в разных местах, РСУБД посылает запросы и обновления в соответствующие хранилища. В зависимости от того, с каким хранилищем ведется работа, производительность системы может оказаться разной, но, по крайней мере, клиентам не приходится самим заниматься выбором сервера.

Если данные реплицируются между несколькими серверами, клиент в общем случае может предпочесть тот или иной сервер. В подобной схеме все серверы хранят одни и те же данные. Специальный модуль может помогать клиентам в выборе серверов, осуществляя выравнивание нагрузки. РСУБД отвечает за выполнение транзакций в многосерверной среде, но в любой момент времени два сервера не могут быть синхронизированы между собой.

В РБД применяется несколько схем распределения данных. В случае репликации каждый сервер хранит весь объем данных. Для этого требуется, чтобы РСУБД дублировала транзакции, позволяя всем клиентам видеть согласованный образ базы данных. В случае несимметричного разделения данных выбирается уровень сегментации. На самом высоком уровне расщеплению подвергаются отдельные базы данных, но не таблицы. Каждая таблица целиком находится в каком-то одном месте. На более низком уровне таблицы расщепляются по строкам или столбцам. Например, при горизонтальном расщеплении отдельные подмножества записей помещаются в разные хранилища, а при вертикальном расщеплении подмножества формируются на основании столбцов.

Отложенная синхронизация

Создать точную копию базы данных MySQL довольно просто. Способы резервного копирования баз данных описывались в лекции "Устранение последствий катастроф". Что касается восстановления данных, то это можно сделать на любом сервере. Располагая такими средствами, несложно реализовать распределенную базу данных, которая синхронизируется через достаточно большие промежутки времени, например, раз в день.

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

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

Читайте также: