Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив1 / docx57 / Lab 3-4.docx
Скачиваний:
24
Добавлен:
01.08.2013
Размер:
46.05 Кб
Скачать

Часть вторая. Демонстрация независимости от фрагментации

Исходные данные - БД в 1НФ

  1. Выполнить горизонтальную фрагментацию БД (SQL-скрипт) по некоторому критерию;

Критерий: телефоны, оканчивающиеся на четную цифру будут хранится на ноутбуке, нечетную – на нетбуке.

    1. Создать таблицу на ноутбуке tels1

/* Создаём таблицу */

CREATE TABLE tels1 (tel CHAR(8) NOT NULL PRIMARY KEY,typ CHAR(1) NOT NULL,postcode INT,place VARCHAR(64), street VARCHAR(64), house VARCHAR(16), flatroom INT,own VARCHAR(96));

/* Помещаем в неё строки с номерами телефонов, оканчивающимися на чётную цифру */

INSERT INTO tels1 SELECT * FROM NETBOOK.stasya.dbo.tels WHERE tel LIKE '%[02468]';

На нетбуке tels2

/* Создаём таблицу с номерами телефонов */

CREATE TABLE tels2 (tel CHAR(8) NOT NULL PRIMARY KEY,typ CHAR(1) NOT NULL,postcode INT,place VARCHAR(64), street VARCHAR(64), house VARCHAR(16), flatroom INT,own VARCHAR(96)); /* Создаём таблицу номеров телефонов */

/* Помещаем в таблицу номера телефонов, оканчивающиеся на нечётную цифру */

INSERT INTO tels2 SELECT * FROM tels WHERE tel LIKE '%[1359]';

    1. Создать синонимы для таблицы нетбука

/* Создаём синоним */

CREATE SYNONYM tels2 FOR NETBOOK.stasya.dbo.tels2;

Создать синонимы для таблицы ноутбука

/* Создаём синоним */

CREATE SYNONYM tels1 FOR NOTEBOOK.stasya.dbo.tels1;

    1. Создать скрипт выборки данных

/* Тестовый скрипт выборки данных - выбирает информацию о случайном номере телефона из БД */

DECLARE @tel VARCHAR(8); /* Переменная - случайный номер телефона */

DECLARE @i INTEGER; /* Переменная - итерация */

/* Переменная - временная таблица. Без неё MS SQL останавливает выборку данных... */

DECLARE @t TABLE(tel CHAR(8) NOT NULL,typ CHAR(1) NOT NULL,postcode INT,place VARCHAR(64), street VARCHAR(64), house VARCHAR(16), flatroom INT,own VARCHAR(96));

SET @i=0; /* устанавливаем счётчик итераций в 0 */

WHILE (@i<10000) /* пока счётчик меньше 10000 выполняем выборку информации */

BEGIN

/* Получаем случайный номер телефона */

SET @tel=CAST(round(RAND()*14+21,0) AS VARCHAR(2))+'-'+CAST(round(RAND()*89+10,0) AS VARCHAR(2))+'-'+CAST(round(RAND()*89+10,0) AS VARCHAR(2));

/* Делаем выборку данных из распределённой БД и вставку во временную таблицу строки с информацией о номере телефона */

INSERT INTO @t SELECT * FROM tels1 WHERE tel=@tel UNION SELECT * FROM tels2 WHERE tel=@tel;

/* Удаляем строку из временной таблицы */

DELETE FROM @t;

/* Увеличиваем номер итерации на 1 */

SET @i=@i+1;

END;

1 узел (ноутбук)

2 узел (нетбук)

2 мин 22 сек

2 мин 42 сек

2 мин 17 сек

2 мин 29 сек

2 мин 20 сек

2 мин 28 сек

2 мин 22 сек

2 мин 30 сек

Среднее время выполнения:

2 мин 2 сек

2 мин 3 сек

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

  1. Выполнить вертикальную фрагментацию БД (SQL-скрипт) по некоторому критерию

Расположение столбцов таблицы

Нетбук

Ноутбук

Номер телефона - tel

Номер дома - houses

Номер квартиры - flatroom

Город - place

Улица - street

Номер телефона - tel

Тип - typ

Индекс - postcode

Владелец - own

    1. Создание и заполнение таблиц

На ноутбуке

/* Создаём таблицу с номерами телефонов: тип абонента, почтовый код, владелец */

CREATE TABLE tels_left (tel CHAR(8) NOT NULL PRIMARY KEY,typ CHAR(1) NOT NULL,postcode INT,own VARCHAR(96));

/* Заполняем таблицу */

INSERT INTO tels_left SELECT tel,typ,postcode,own FROM NETBOOK.stasya.dbo.tels;

На нетбуке

/*Создаём таблицу номеров телефонов с городом, улицей, номером дома и квартирой */

CREATE TABLE tels_right (tel CHAR(8) NOT NULL PRIMARY KEY,place VARCHAR(64), street VARCHAR(64), house VARCHAR(16), flatroom INT);

/* Заполняем созданную таблицу */

INSERT INTO tels_right SELECT tel,place,street,house,flatroom FROM tels;

    1. Создать синонимы

На ноутбуке

/* Создаём синонимы */

CREATE SYNONYM tels_right FOR NETBOOK.stasya.dbo.tels_right;

На нетбуке

/* Создаём синонимы */

CREATE SYNONYM tels_left FOR NOTEBOOK.stasya.dbo.tels_left;

    1. Скрипт выборки данных

/* Тестовый скрипт выборки данных - выбирает информацию о слуайном номере телефона из БД */

DECLARE @tel VARCHAR(8); /* Переменная - случайный номер телефона */

DECLARE @i INTEGER; /* Переменная - итерация */

/* Переменная - временная таблица. Без неё MS SQL останавливает выборку данных... */

DECLARE @t TABLE(tel CHAR(8) NOT NULL,typ CHAR(1) NOT NULL,postcode INT,place VARCHAR(64), street VARCHAR(64), house VARCHAR(16), flatroom INT,own VARCHAR(96));

SET @i=0; /* устанавливаем счётчик итераций в 0 */

WHILE (@i<10000) /* пока счётчик меньше 10000 выполняем выборку информации */

BEGIN

/* Получаем случайный номер телефона */

SET @tel=CAST(round(RAND()*14+21,0) AS VARCHAR(2))+'-'+CAST(round(RAND()*89+10,0) AS VARCHAR(2))+'-'+CAST(round(RAND()*89+10,0) AS VARCHAR(2));

/* Делаем выборку данных из распределённой БД и вставку во временную таблицу строки с информацией о номере телефона */

INSERT INTO @t SELECT tels_left.tel,typ,postcode,place,street,house,flatroom,own FROM tels_left INNER JOIN tels_right ON tels_left.tel=tels_right.tel WHERE tels_left.tel=@tel;

/* Удаляем строку из временной таблицы */

DELETE FROM @t;

/* Увеличиваем номер итерации на 1 */

SET @i=@i+1;

END;

1 узел (ноутбук)

2 узел (нетбук)

2 мин 16 сек

2 мин 38 сек

2 мин 15 сек

2 мин 21 сек

2 мин 9 сек

2 мин 28 сек

2 мин 13 сек

2 мин 25 сек

Среднее время выполнения:

2 мин 13 сек

2 мин 28 сек

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

Соседние файлы в папке docx57