Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Базы данных. Лекции по курсу. В 4 частях. Ч.1. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
06.09.2026
Размер:
1 Мб
Скачать
Рис. 19. План выполнения SQL-запроса
Рис. 20. Операции при выполнении SQL-запроса
Выполним вертикальную фрагментацию таблицы books на две таб­лицы
books_main_info и books_description.
Будем считать, что количество строк в таблице
books_main_info со-
ставляет 200 000, размер одной строки ~145 байт, общий размер таб­лицы 35 Мбайт. Таблица
books_description содержит такое же количе-
ство строк, размер одной строки 1353 байта, общий размер таблицы 306 Мбайт.
Перепишем исходный SQL-запрос таким образом, чтобы он рабо­тал с фрагментированной таблицей
books:
select p.name, b.cnt
from publishers p
(select publisher_id, count (*) cnt
from books_main_info
group by publisher_id
) b
where b.publisher_id = p.id
51
Ниже приведены план SQL-запроса, в котором используется верти­кально фрагментированная таблица
books (рис. 21), и последователь-
ность выполняемых операций (рис. 22). Стоимость плана составляет 8395 условных единиц, время выполнения запроса ~ 216 мс.
Таким образом, вертикальная фрагментация более чем в пять раз позволила уменьшить стоимость плана выполнения SQL-запроса и в 3,5 раза уменьшить время его выполнения.
Рис. 21. План выполнения SQL-запроса с вертикально фрагментированной
таблицей books
Рис. 22. Операции при выполнении SQL-запроса с вертикально
фрагментированной таблицей books
Подводя итог, следует отметить, что язык SQL имеет как сильные, так и слабые стороны.
52
К достоинствам следует отнести:
повсеместную распространенность;
быстрое обучение в простых случаях;
связывание с различными языками программирования;
поддержка стандартов ODBC и JDBC;
высокое качество реализации языка SQL в компиляторах.
Среди недостатков надо отметить:
неполное соответствие языка реляционной модели данных (воз-
можное наличие дубликатов, необязательность первичного ключа, возможность упорядочения результатов);
недостаточно продуманный механизм неопределенных зна-
чений;
сложность формулировок и громоздкость для сложных запросов.
ВОПРОСЫ
1. Что входит в стандарт языка SQL3?
2. Что входит в международный стандарт SQL:2003?
3. От чего зависит скорость выполнения SQL-запроса?
4. Какие приемы для повышения эффективности следует использо-
вать при написании SQL-запросов?
5. Какого правила следует придерживаться при соединении таблиц
в запросах с соединениями?
6. Каковы общие рекомендации к порядку предпочтения конструк-
ций SQL-запроса (соединение
, коррелированный, некоррелированный
запрос)?
7. Почему для фильтрации записей следует использовать конструк-
цию
where, а не having?
8. Что такое
rowid-столбец?
9. Что такое рефакторинг?
10. Какова последовательность действий при выполнении SQL-
запроса посредством программы PgAdmin?
11. Какова последовательность действий при выполнении SQL-
запроса посредством программы phpPgAdmin?
12. Что такое план выполнения запроса?
53
13. Какие характеристики анализирует сервер баз данных при вы-
боре оптимального плана выполнения запроса?
14. Как пользователь может получить план выполнения запроса?
15. Что такое индексирование?
16. Каким SQL-оператором создается индекс таблицы?
17. Как выполняется горизонтальная фрагментация таблиц?
18. Как выполняется вертикальная фрагментация таблиц?
19. Каковы сильные стороны языка SQL?
20. Каковы слабые стороны языка SQL?
54
3. РАСПРЕДЕЛЕННЫЕ БАЗЫ ДАННЫХ
Под распределенной базой данных (Distributed DataBase – DDB) обычно подразумевают множество взаимосвязанных баз данных, рас­положенных на различных узлах сети компьютеров и, возможно, управляемых различными СУБД. Распределенная база данных выгля­дит с точки зрения пользователей и прикладных программ как обычная локальная.
Система управления DDB – программная система, позволяющая управлять базой данных таким образом, чтобы ее распределенность была прозрачна для пользователей.
База данных физически распределяется по узлам данных при по­мощи двух инструментов: фрагментации и репликации (синоним тер­мина репликация – тиражирование). Отношения реляционной базы данных могут быть фрагментированы на горизонтальные или верти­кальные разделы. Горизонтальная фрагментация реализуется при по­мощи операции селекции, которая направляет каждый кортеж отноше­ния
в один из разделов, руководствуясь предикатом фрагментации. Например, для отношения ответствии с территориальным распределением рабочих мест сотруд­ников.
При вертикальной фрагментации отношение делится на разделы при помощи операции проекции. Например, один раздел отношения может содержать поля
рес_сотрудника,
(рис. 23).
тель
Цель фрагментации состоит в том, что, во-первых, данные прибли­жаются к месту их наиболее интенсивного использования, что потен­циально снижает затраты на их пересылку, и, во-вторых, уменьшаются
а другой – поля Номер_сотрудника, Оклад, Руководи-
Сотрудники возможна фрагментация в со-
Employee
Номер_сотрудника, ФИО_сотрудника, Ад-
55
размеры отношений, участвующих в запросах. Если отношения содер­жат миллионы записей, это очень существенно уменьшает время обра­ботки.
Рис. 23. Горизонтальная и вертикальная фрагментация
Вторым инструментом обеспечения распределенности является ти­ражирование данных с учетом спроса на доступ к ним. В различных узлах сети могут быть приложения, выполняющие одинаковые функ­ции. В таком случае более эффективно будет поддерживать копии дан­ных на всех узлах, чем непрерывно пересылать данные между узлами (рис. 24).
Рис. 24. Тиражирование данных
Следует отметить сложность проблемы тиражирования: необходи­мо решить, что, когда и как тиражировать. Существуют различные схемы тиражирования, например, в случае банковской системы попу­лярной схемой является схема центр-филиалы.
56
3.1. СВОЙСТВА РАСПРЕДЕЛЕННОЙ БАЗЫ ДАННЫХ
В свое время К. Дэйт (C.J. Date) определил 12 свойств (качеств) идеальной распределенной базы данных.
Локальная автономия (local autonomy).
Независимость узлов (no reliance on central site).
Непрерывные операции (continuous operation).
Обработка распределенных транзакций (distributed transaction
processing).
Обработка распределенных запросов (distributed query proces-
sing).
Прозрачность распределенности (location independence).
Прозрачная фрагментация (fragmentation independence).
Прозрачное тиражирование (replication independence).
Независимость от оборудования (hardware independence).
Независимость от операционных систем (operation system
independence).
Прозрачность сети (network independence).
Независимость от баз данных (database independence).
Локальная автономия
Это качество означает, что управление данными на каждом из уз­лов распределенной системы выполняется локально. База данных, рас­положенная на одном из узлов, является компонентом распределенной системы, но в то же время каждая из них функционирует как полно­ценная локальная база данных независимо от других узлов системы.
Независимость узлов
Все узлы (data site) равноправны и независимы, а расположенные на них базы данных являются равноправными поставщиками данных в общее пространство данных.
Непрерывные операции
Это качество можно трактовать как возможность непрерывного до­ступа к данным (свойство, известное как «24 часа в сутки, семь дней в неделю») вне зависимости от их расположения и от операций, выпол-
57
няемых на локальных узлах. Лозунг: «Данные доступны всегда, а опе­рации над ними выполняются непрерывно».
Обработка распределенных транзакций
Прежде чем рассмотреть это свойство, введем классификацию ти­пов запросов.
1. Дистанционный запрос. Это единичный запрос, передаваемый на
обработку только одному серверу распределенной базы данных.
2. Дистанционная транзакция. Это транзакции, состоящая из не­скольких запросов, передаваемая единственному серверу распределен­ной базы данных.
3. Распределенная транзакция. Это транзакции, состоящая из не­скольких запросов,
передаваемая различным серверам распределенной базы данных. При этом каждый из запросов обрабатывается одним и только одним сервером.
4. Распределенный запрос. Это запрос, при обработке которого требуется участие нескольких серверов. Каждый запрос обрабатывает­ся несколькими серверами, но эта обработка остается прозрачной (не­видимой) для клиента.
Свойство обработки распределенных транзакций DDB можно трак-
товать
как возможность выполнения операций обновления распреде­ленной базы данных (INSERT, UPDATE, DELETE), не разрушающих целостность и согласованность данных.
Ниже приведен пример распределенной транзакции:
begin work
insert into local_tab . . .
insert into db1@online1:tab1 . . .
insert into db2@online2:tab2 . . .
insert into db2@online2:tab3 . . .
commit work
В приведенном фрагменте в первом операторе insert указано имя
таблицы текущей базы данных сервера-координатора,
@online2 db2
сетевые имена машин, tab1, tab2, tab3имена таблиц, db1,
имена баз данных, оператор commit work инициализирует прото-
@online1,
кол двухфазной фиксации изменений.
58
Согласованность данных достигается применением протокола двухфазной фиксации транзакций (two-phase commit protocol – 2PC протокол). Его применение гарантирует согласованное изменение дан­ных в нескольких узлах в рамках распределенной транзакции. Прото­кол двухфазной фиксации транзакций будет описан ниже.
Обработка распределенных запросов
Обработка распределенных запросов (Distributed Query – DQ) – зада­ча более сложная, нежели обработка локальных запросов, и она требует интеллектуального решения с помощью особого компонента – оптими­затора DQ. Основная цель оптимизатора DQ – повышение производи­тельности, а основными факторами, влияющими на нее, являются:
объем информации;
скорость передачи;
загрузка сети;
производительность узлов.
Ниже приведен пример распределенного запроса:
select Customer.name, Customer.address, Order.number, Order.date from
Customer@london, Order@paris
where Customer.cust_number = Order.cust_number
В запросе предполагается, что таблица Customer хранится в узле в городе
London, а таблица Order хранится узле в городе Paris (рис. 25).
Рис. 25. Расположение данных
Рассмотрим данное свойство на примере. Будем считать, что вы­полняются следующие условия.
В базе данных узла А описаны 10 000 изделий, запись о каждом из которых занимает 100 байт (общий объем таблицы 1 Мбайт), и инфор-
59
мация о комплектации этих изделий деталями (поставки). Размер таб­лицы поставок составляет 1 000 000 записей по 100 байт, т. е. всего 100 Мбайт. В узле Б имеется таблица с записями о 100 000 деталей по 100 байт, что дает общий объем 10 Мбайт (рис. 26). Будем также предпола­гать, что передача данных по сети выполняется по скоростью 1 Мбайт/с.
Задача состоит в том, чтобы получить информацию обо всех соби­раемых в Беркли изделиях, при сборке которых используются деталь с названием «Болт». При этом будем предполагать, что в Беркли собира­ется 1000 изделий, для их сборки выполнено 100 000 поставок, в число которых входит 10 типов болтов.
Рис. 26. Расположение данных в узлах распределенной базы данных
Можно записать несколько вариантов SQL-запросов решения этой задачи. Два из них приведены ниже:
60
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]