Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
Лабораторная работа № 1
Тема: Распределенные базы данных
Задание
1. На основе БД, разработанной в рамках курса «Базы данных», создать распределённую базу в двух вариантах:
1) разделив таблицы БД на две группы по какому-либо смысловому признаку. Например, если имеется база данных «Спортивный клуб», то в первую группу можно отнести таблицы, используемые для административной работы: список спортсменов, список тренеров, список баз и т. д., а во вторую группу таблицы для соревнований: график соревнований, участие спортсменов в соревнованиях и т. д.
2) проведя оптимальное размещение таблиц базы по двум узлам. Задачу линейного программирования можно решать любым подходящим алгоритмом с использованием любого существующего ПО. Оптимальное размещение следует рассчитывать, исходя из того, что суммарный объём узлов (b(1) + b(2)) равен 1.5 * суммарный объём всех таблиц.
2. Реализовать генератор данных больших объемов. С помощью этого генератора заполнить оба варианта разбиения баз данных большим числом данных. Должны быть таблицы, имеющие несколько сотен записей, и таблицы, имеющие несколько тысяч записей. При этом должна сохраняться целостность как локальных БД, так и глобальной распределённой БД.
3. Оценить эффективность каждого варианта по набору SQL-запросов, имеющемуся в задании. Посчитать время выполнения каждого из запросов к базе данных и суммарное время работы по двум базам для каждого разбиения и сделать выводы.
Пояснения
http://ami. *****/~vms/method3/Method1_pgs. htm - Язык структурных запросов SQL
http://ami. *****/phpPgAdmin - Программа phpPgAdmin
http://ami. *****/~vms/method2m/index. htm (глава 4, задания) - Номера и описания вариантов
Для размещения таблиц использовать базы данных (PostgreSQL): students51 и students52.
Для восстановления Вашей базы и по другим техническим вопросам обращайтесь к Петрову Роману Владимировичу.
Для воссоздания Вашей базы данных на новом рабочем сервере необходимо выполнить команду через терминал (putty):
new_schema схема students51
new_schema схема students52
psql students51 –f dump. sql
В случае, если базы данных имеются у нескольких человек в бригады, то можно взять любую из них. База данных должна состоять не менее, чем из 8 таблиц.
Набор SQL-запросов для оценки эффективности должен состоять не менее, чем из 7-и запросов. Эти 7 запросов должны быть написаны для каждого из двух вариантов разбиения. Из этих 7-и запросов не менее пяти должны быть распределенными, т. е. обращаться сразу к двум базам данных.
Итог работы
Отчёт по лабораторной работе должен включать в себя:
– титульный лист;
– описание использованной вами базы с точки зрения предметной области;
– структура базы данных на языке SQL с указанием имен и типов полей всех таблиц;
– ER-диаграмма, на которой должны быть показаны все связи между таблицами базы и показаны графически два варианта разбиения базы;
– количество записей в каждой таблице, сгенерированных вашим генератором;
– SQL-запросы для обоих вариантов разбиения баз данных;
– среднее время выполнения запросов (в мс) для обоих разбиений базы данных для каждого запроса и суммарное время выполнения запросов на обоих разбиениях;
– вывод, объясняющий, почему время работы в одном из двух разбиений оказалось меньшим (большим, равным), чем в другом.
Замечание: текст генератора данных в отчёте можно не приводить.
Критерии оценивания качества работы
1. Полнота набора SQL-запросов для оценки эффективности:
1 – не менее 7 запросов, из которых не менее 5 распределённых;
0 – не менее 3 запросов, из которых не менее 2 распределённых.
Л. р. не принимается – менее 3 запросов или менее 2 распределённых.
2. Наличие ER-диаграммы с изображёнными разбиениями таблиц по узлам:
1 – есть;
0 – нет.
3. Содержание отчёта:
1 – отчёт включает все требуемые разделы;
0 – отчёт включает не все требуемые разделы.
4. Глубина понимания материала лабораторной работы каждым членом бригады:
1 – быстрые и правильные ответы на все вопросы;
0 – не на все вопросы ответы правильные и быстрые.
Л. р. не принимается – на половину вопросов ответы неправильные.
Выполнение запросов к распределённой базе данных
В PostgreSQL запросы между базами данных реализуются с использованием библиотеки dblink следующим образом:
dblink(text connstr, text sql)
где:
connstr
Cтрока соединения вида:
"dbname=<имя_вашей_базы> user=<ваш_логин> password=<ваш_пароль>"
sql
SQL-выражение, запускаемое на удалённой машине. Например:
"select * from customer"
Пример использования:
select * from ttt. t1, public. dblink('dbname=students52 user=user1 password=password1','select * from t2') as t2(t21 text, t22 text) where t1.t12=t2.t21;
Примечание. Предполагается, что запрос выполняется с базы students51.
Методические указания для поиска оптимального размещения таблиц по узлам
Пусть:
- число узлов в сети
- число таблиц БД
- общее число запросов к БД
- j-ый узел в сети
- l-ая таблица
- объем l-ой таблицы, где
- максимальный размер одной строки данных таблицы
(в байтах),
- число строк l-ой таблицы
- объем памяти узла
для размещения таблицы
- i-ый запрос
- объем пересылаемых данных из таблицы
при выполнении i-ого запроса. Определим
, где
- размер одной строки данных (в байтах) таблицы
, пересылаемой при выполнении i-ого запроса,
- число строк l-ой таблицы
- интенсивность появления i-ого запроса, инициированного из узла ![]()
определяется произвольно на основе экспертной оценки пользователя и показывает, как часто запрос i будет вызываться из узла ![]()

- интенсивность пересылаемых данных при выполнении i-ого запроса
- целевая функция, которую нужно оптимизировать
При ограничениях:
- каждая таблица может находиться только в одном узле
- суммарный объем таблиц в узле не должен превышать объем узла

Преобразуем целевую функцию:

Первая компонента в последнем равенстве – константа, которая может быть опущена, т. к. нас интересуют только значения переменных.
Для базы данных необходимо составить следующие таблицы значений
Таблица значений ![]()
| 1 | … | … | … |
|
1 | |||||
… | |||||
… | |||||
… | |||||
|
Таблица значений ![]()
| 1 | … | … | … |
|
1 | |||||
… | |||||
… | |||||
… | |||||
|
Таблица значений ![]()
| 1 | … | … | … |
|
Таблица значений ![]()
| 1 | … | … | … |
|


