This article explains about fragmentation types in distributed databases.
Let's start the article by defining distributed database - A distributed database is a database in which storage devices are not all attached to a common processor. It may be stored in multiple computers, located in the same physical location; or may be dispersed over a network of interconnected computers. (source wiki) One of the strongest fault tolerance techniques of a distributed database is data replication, which is a process of storing separate copies of the database or tables at two or more sites.
Understanding Vertical and Horizontal fragmentation
Vertical fragmentation
- Vertical fragmentation is a subset of attributes.
- Basically, vertical fragmentation splits tables by columns
Horizontal Fragmentation
- Horizontal Fragmentation is a subset of tuples (rows).
- Horizontal Fragmentation splits tables by rows.
Example
Let's say I have one global table (e.g. Customer Table)
![global]()
Vertical fragmentation would be like this: (Here, we are storing 2 columns at one fragment and 3 columns at another fragment, however, id is important at both sites because it's a primary key)
![vertical]()
Horizontal fragment looks like this: (Here, we are diving fragment based on some condition such that all data with gender male will reside at one fragment and others at different fragment).
![horizontal]()
Understanding with an example
am using SQL Plus to perform these operations. I have two machines m1 and m2; on m1 I am creating global table whereas on m2 I am storing fragment values.
Vertical Fragmentaion
There is one global table and the secondary table is given as
This is for tblCust
Global
create table tblCust_glo
(
Cid varchar2(10) primary key,
Cname varchar2(10) not null,
Ctype varchar2(10) not null,
Cmob integer not null
);
Secondary
create table tblCust_1
(
Cid varchar2(10) primary key,
Cname varchar2(10) not null,
Ctype varchar2(10) not null
);
Creating link from one node to another
CREATE DATABASE LINK
Create database link linker
connect to scott identified by
tiger using ‘IT_78’;
Here IT_78 is net service name of my machine.
You can create it by visiting this link.
Trigger
create or replace trigger trigCust_glo
after insert on tblCust_glo
for each row
begin
insert into tblCust_1@linker
values(:new.Cid,:new.Cname,:new.Ctype);
end;
/
This is for tblVehical.
Global
create table tblVehicle_glo
(
Vid varchar2(10) primary key,
Vclass varchar2(10) not null,
Vrgis varchar2(10) not null,
Vodo integer not null,
Vmeter integer not null,
Vstatus varchar2(10) not null
);
Secondary
create table tblVehicle_1
(
Vid varchar2(10) primary key,
Vclass varchar2(10) not null,
Vmeter integer not null,
Vstatus varchar2(10) not null
);
--Trigger:-
create or replace trigger trigVeh_glo
after insert on tblVehicle_glo
for each row
begin
insert into tblVehicle_1@linker
values(:new.Vid,:new.Vclass,:new.Vmeter,:new.Vstatus);
end;
/
Horizontal Fragmentation
Create table customer_horizontal as
(select * from tblCust_glo@linker Where Ctype='Premium')
Summary
So some of the advantages of using fragment are parallelism, balanced storage, disjointedness and efficiency. It also increases the reliability and availability.