1. Universitatea Tehnică “Gheorghe Asachi” Iaşi
Facultatea de Automatică şi Calculatoare
Catedra de Automatică
Sisteme de Gestiune a Bazelor de Date
Distribuite
-Partiţionarea în SQL Server 2012-
Student: Răzvan-Adrian Onofrei
Îndrumător:Șef Lucr.dr.ing. Florin OSTAFI
2. Prezentarea proiectului
Proiectul îşi propune:
Implementarea unei baze de date relaţionale
Explicarea şi implementarea tehnicii de partiţionare a
tabelelor
Creearea unei aplicaţii care să exemplifice conceptul de
sistem de gestiune a bazelor de date partiţionate
3. Conceptul de bază de date relaţională
O bază de date este o colecţie de date organizată
(structurată). O bază de date are, în principal,
următoarele roluri: stocare (memorare) şi organizarea
datelor (structurare).
Ca şi utilitate, bazele de date ne permit memorarea unor
cantităţi mari de date,regăsirea datelor pe baza unor
criterii de căutare dar şi prelucrarea unor volume mari de
date (filtrare, ordonare, agregare).
În bazele de date relaţionale datele sunt văzute ca şi
atribute ale entităţilor reale şi sunt stocate în tabele
legate între ele prin relaţii.
Acest mod de structurare a datelor permite eliminarea
redundanţei, astfel încât stocarea şi modificarea unei
informaţii se face într-un singur loc. Din punct de vedere
funcţional această structură permite regăsirea, filtrarea,
ordonarea şi agregarea datelor, în mod natural.
5. Particularităţi ale bazei de date
În tabelul Clienţi datele se inserează automat atunci
când un client îşi face cont
Între tabelele Autogări şi Curse observăm două relaţii
de tipul 1÷n. Aceste relaţii corespund cheilor străine
PlecareAutogarăId şi SosireAutogarăId din tabelul Curse
Pe câmpul Durată din tabelul clienţi avem aplicat un
trigger care se execută automat la opetaţii de insert sau
update asupra tabelului şi care calculează automat
durata cursei
6. Particularităţi ale bazei de date
insert into curse values(7,4 ,'05:00:00', 5,
'06:30:00',null,'Teisa');
7. Partiţionarea
Partiţionarea este o tehnică utilă ce permite obiectelor de
dimensiuni mari din cadrul unei baze de date să fie
împărţite în componente mai mici mult mai uşor de
utilizat
Am hotărât ca cheia de partiţionare să fie numele
companiei. Tabelele partiționate sunt: Autobuze, Curse
și Rezervări. Am presupus existența a trei companii de
transport: Massaro, Priscom și Teisa. Partiţionarea
tabelelor de mai sus se face după o schemă de
partiţionare care foloseşte 4 grupuri de fişiere, dar efectiv
doar 3(corespund celor 3 companii de transport). Ultimul
grup, PRIMARY, este necesar schemei de partiţionare,
dar rămâne nepopulat.
8. Partiţionarea
Funcţia de partiţie este baza logică a oricărei partiţionări
de tabele, pentru că ea determină împărţirea pe partiţii a
datelor din tabele.
USE [Autogari]
GO
CREATE PARTITION FUNCTION [NumeCompaniePFN](nvarchar(50)) AS RANGE LEFT FOR VALUES (N'Massaro',
N'Priscom', N'Teisa')
GO
Schema de partiţie este baza logică peste care se
partiţionează tabelele.
USE [Autogari]
GO
CREATE PARTITION SCHEME [NumeCompaniePScheme] AS PARTITION [NumeCompaniePFN] TO ([Priscom],
[Teisa], [Massaro], [PRIMARY])
GO
Se folosesc la declarare 4 grupuri de fişiere, dar după
cum s-a menţionat, ultimul va rămâne necompletat,
pentru că funcţia creata este de tip RANGE LEFT
9. Studiu de caz
Pentru a exemplifica partiţionarea vom rula funcţiile
[AlegeAutobuzePartition] și [AlegeCursePartition] pentru
compania Priscom. Funcțiile folosesc ID-ul autobuzelor
și respectiv al curselor, de aceea este necesar să
interogăm cele două tabele în prealabil.
select * from Autobuze; select IdCurse,AutobuzeId,
Durata,NumeCompanie from
Curse;
10. Studiu de caz
După cum se observă compania Priscom deține
autobuzul cu id-ul 9 și efectuează cursa cu id-ul 7. Deci
parametrii de intrare ai celor două funcții vor fi 9
respectiv 7.
Pentru firma Priscom s-a alocat partiția cu numărul 2. Asta
înseamnă că toate înregistrările din tabelele Autobuze și
Curse care se referă la această firmă se află pe partiția
numărul 2.
11. Studiu de caz
Pentru a observa mai bine cum sunt împarţite datele pe
partiţii vom rula urmatoarea interogare pe tabelul
autobuze:
select * from Autobuze; SELECT
$PARTITION.NumeCompaniePFN(NumeCompanie)
AS Partition, COUNT (*) AS [COUNT] FROM
dbo.autobuze GROUP BY
$PARTITION.NumeCompaniePFN(NumeCompanie)O
RDER BY Partition ;
12. Avantaje şi dezavantaje ale partiţionării
+Deşi tabelul este văzut ca un tot unitar mentenanţa se
poate face şi la nivel de partiţie
+Partiţiile individuale pot exista pe diferite sub sisteme
hardware
-Complexitatea