Теория СУБД
- Теория СУБД
- ЗА ТАБЛИЦАМИ — НАШЕ БУДУЩЕЕ!
- СВЯЗЫВАЕМ ДАННЫЕ
- ОБЪЕКТНЫЙ РАЙ
- ЛОКАЛЬНАЯ БАЗА
- СЕТЕВАЯ БАЗА ДАННЫХ
- КЛИЕНТ-СЕРВЕР
- ТРЕТИЙ УРОВЕНЬ
- ЛОГИКА
- ВИДЫ СТРУКТУР БАЗ
- ОБЗОР РЫНКА
- РАЗВИТИЕ ТЕХНОЛОГИЙ БД
- БАЗЫ ЗНАНИЙ И ЭКСПЕРТНЫЕ СИСТЕМЫ
- АНАЛИЗ ДАННЫХ И OLAP-ТЕХНОЛОГИИ
- ХРАНИЛИЩА ДАННЫХ И КОРПОРАТИВНАЯ ПАМЯТЬ
- ИСТОРИЯ РАЗВИТИЯ ИНТЕРФЕЙСОВ ДОСТУПА К БАЗАМ ДАННЫХ
- ЧТО ДАЛЬШЕ?
|
Обломавшись с сетевыми базами, монотонную модель наконец-то решили разделить на два уровня — приложение и база данных. Теперь база данных — это не просто таблица с данными, а целый движок, в задачи которого входит не только хранение данных, но и обработка запросов.
В технологии клиент-сервер драйвер уже изменил свое назначение, и теперь он уже должен только знать, как подключится к серверу и передать ему запрос. Остальное перекладывается на плечи сервера. Такая технология намного сокращает трафик, особенно при хорошем программировании. Допустим, пользователю нужно увидеть все данные, в которых имя определенной колонки содержит слова на букву "А". Клиен ту достаточно направить серверу всего лишь такой текст:
SELECT *
FROM Имя таблицы
WHERE Колонка LIKE ‘А%’
Я думаю, не надо даже считать, сколько кило занимает этот текст и как долго он будет отправляться по сети. Даже через медный провод с железом на 2400бод все произойдет практически мгновенно.
Сервер базы данных, получив запрос, разбирает его и придумывает для себя оптимальный план выполнения, в данном случае — поиска нужных строк.
Получив нужные данные, сервер возвращает только их и ничего больше. Таким образом, клиент в любой момент может запросить у сервера нужные данные и не будет необходимости гонять по сети всю базу данных. При хорошо построенном приложении и оптимальных запросах клиент сможет работать с базой данных любого размера даже через модем в 56 Кбит/с. Неплохо? Главное — запрашивать только то, что нужно, и маленькими кусками.
ОСОБЕННОСТИ КЛИЕНТ-СЕРВЕРА
Возможности клиент-серверных баз данных зависят от производителя. Самые простые возможности предоставляют такие базы, как MySQL. В них сервер имеет встроенный движок обработки запросов и основные возможности по обеспечению безопасности и распределению прав.
В более солидных клиент-серверных базах (MS SQL Server, Oracle и т.д.)
есть следующие дополнительные возможности:
1. вьюшки — более подробно обсуДим в статье по безопасности;
2. триггеры — функции, которые могут вызываться на определенные события (вставка, изменение и удаление данных), в этих функциях может производиться какая-то логика по обеспечению целостности данных;
3. репликация — объединение баз данных (допустим, у фирмы есть два офиса и в каждом из них своя база; настроив репликацию, обе базы могут автоматически сливаться в одну в главном офисе или обмениваться изменениями по расписанию);
хранимые процедуры и функции, которые выполняются на сервере по мизерному запросу клиента и могут содержать целые подпрограммы с логикой, которые будут выполнять какие-либо действия; для написания таких программ используется уже не просто язык SQL, а его расширение — Transact-SQL (для MS баз) и PL/SQL (для Oracle и др.).
Список возможностей зависит от конкретной базы данных, ее наворо-ченности и может быть больше или меньше.
ИНДЕКСЫ НА СЕРВЕРЕ
Из-за наличия в серверных базах данных управления транзакциями, про проблемы с индексами можно забыть. Допустим, пользователь добавил запись. В этот момент начинается транзакция (неявная), в течение которой производятся все необходимые действия по сохранению данных. Если что-то пошло неправильно и сохранение не прошло до конца, все изменения откатываются и ничего в работе сервера не нарушается.
Транзакции могут быть и явными, если программист сам указывает, где начало и конец, и если в них может выполняться несколько операций изменения или добавления данных. В этом случае сервер при возникновении ошибки в указанном блоке откатит любые изменения всех операций, сделанные во время выполнения явной транзакции.
В локальных базах данных индексы хранятся линейно. Это как колонка из упорядоченных данных, и для строк это то же самое, что выстроить все слова по алфавиту. Конечно же, такой индекс упрощает поиск. Когда происходит сканирование по индексу и когда программа видит, что уже пошло слово больше, чем задано в условии поиска, сканирование может прекращаться и не придется просматривать всю базу данных. Например, поищем слово "Абажур". Оно будет где-то в начале, и чтобы его найти, нужно просканировать всего лишь начало таблицы, не дальше, чем все слова на букву А. За счет того, что данные упорядочены, мы можем быть уверенными, что все остальные слова будут на буквы Б, В и т.д.
В случае с серверной базой индексы чаще всего (в зависимости от базы и типа индекса) хранятся немного подругому — в виде дерева. Сколько слов надо проверить для поиска слова "якорь" в базе данных при линейном индексе? По сути, практически все. При древовидном хранении индекса — не более чем для слова "Абажур". Для пояснения древообразного индекса рассмотрим классическую задачу (в реальности все немного сложнее, но идея такая же). В самом верху дерева хранится алфавит. Программа находит букву А и спускается на уровень ниже. Здесь она находит все слова на буквы А, Б и двигается еще ниже. И так — пока не найдется нужное слово
Таким образом, даже если нужное слово находится в самом конце, его поиск будет ненамного дольше, чем поиск слова из начала таблицы.