Analisis B-Tree Dan B+Tree Indexed File

7

Click here to load reader

description

IF 2034 - Basis Data B- Tree dan B+ Tree (Definisi, Struktur fisik, Operasi serta Aplikasinya)

Transcript of Analisis B-Tree Dan B+Tree Indexed File

Page 1: Analisis B-Tree Dan B+Tree Indexed File

Makalah IF2094 Basis Data – Sem. II Tahun 2012/2013

Analisis B- Tree dan B+ Tree Indexed File

Iskandar Setiadi (13511073)

Program Studi Teknik Informatika

Sekolah Teknik Elektro dan Informatika

Institut Teknologi Bandung, Jl. Ganesha 10 Bandung 40132, Indonesia

[email protected]

Abstrak—Salah satu metode yang sering digunakan

dalam pengorganisasian file adalah indexed file

organization. Pada metode ini, setiap record disusun

berdasarkan kunci (key) tertentu. Dua jenis struktur

data yang sering digunakan dalam implementasi

indexed file adalah B- tree dan B+ tree. Pada makalah

ini, kita akan menganalisis struktur fisik serta operasi-

operasi query dari kedua data struktur diatas. Selain

itu, kita akan melakukan studi kasus terhadap

masalah-masalah dunia nyata yang dapat diselesaikan

dengan metode pengorganisasian file ini.

Index Terms— B- Tree, B+ Tree, Indexed File,

Organisasi File, Basis Data.

I. PENDAHULUAN

Permasalahan dalam pengorganisasian file di dunia

nyata beragam jenisnya. Setiap pemodelan organisasi

file yang dirancang bertujuan untuk memudahkan

manipulasi data seperti menyimpan, membaca, maupun

mengupdate record dalam rentang waktu yang cepat

serta fleksibel. Indexed file adalah suatu model

penyimpanan data dengan pemberian indeks untuk

masing-masing records yang disimpan. Namun

demikian, representasi data struktur yang digunakan

akan menentukan kecepatan dari setiap operasi record

yang dilakukan. Dianalogikan dengan proses

searching, pencarian dalam struktur data binary search

tree akan lebih cepat dilakukan dibandingkan

pencarian dalam struktur data linear array. Pada

makalah ini, kita akan menganalisis dua jenis struktur

data yang digunakan dalam indexed file, yaitu B- tree

dan B+ tree.

II. INDEXED FILE ORGANIZATION

Indexed File Organization adalah suatu metode

pemodelan yang menyimpan file menggunakan sistem

index. Setiap record yang akan disimpan diberikan

suatu nilai index tertentu (biasanya numerik) untuk

memudahkan pengaksesan data secara acak. Pada

umumnya, nilai index diberikan berdasarkan suatu

kategori field tertentu. Namun demikian, hal ini tidak

menutup kemungkinan untuk menggunakan lebih dari

satu field sebagai dasar pemberian index suatu record.

Gambar 2-1 Desain Indexed File Organization (Reference: http://tle.tafevc.com.au )

Pada gambar 2-1 diatas, masing-masing records

dalam table record diinisialisasi dengan suatu nilai

index. Masing-masing dari index tersebut menyimpan

alamat (address) dari record yang dikenalinya. Sebagai

contoh, alamat “Index to A” menyimpan alamat dari

“Record 3”.

Salah satu keuntungan pemodelan ini adalah running

time yang cepat. Misalkan kita memiliki 10.000

records yang ingin disimpan, dengan ukuran masing-

masing record adalah 100 bytes. Setiap blok

penyimpanan mampu menampung 512 bytes. Dengan

demikian, setiap blok mampu menyimpan 5 records.

Dengan jumlah records yang kita miliki, dibutuhkan

2.000 blok untuk menyimpan semua records diatas.

Asumsikan bahwa setiap index memerlukan 8 bytes

untuk penyimpanan serta 8 bytes untuk pointer (Total

16 bytes). Dari uraian tersebut, setiap blok mampu

menyimpan 32 buah indeks. Penyimpanan indeks dari

10.000 records memerlukan 313 buah blok.

Pencarian tanpa indexed file (menggunakan

algoritma linear search) memerlukan traversal ke

Page 2: Analisis B-Tree Dan B+Tree Indexed File

Makalah IF2094 Basis Data – Sem. II Tahun 2012/2013

seluruh blok penyimpanan sehingga rata-rata jumlah

blok yang harus diakses adalah 2.000 / 2 = 1.000 blok.

Pencarian menggunakan binary search dalam

pemodelan indexed file memerlukan 2log(313) = 9

pencarian blok. Contoh diatas menunjukkan bahwa

penyimpanan menggunakan indexed file jauh lebih

cepat dibandingkan penyimpanan basis data tanpa

pemodelan yang baik.

III. STRUKTUR DATA DAN OPERASI-OPERASI

RECORD B- TREE

A. Struktur Fisik B- tree

B- tree merupakan suatu bentuk generalisasi dari

struktur data Binary Search Tree, yaitu pohon yang

dapat memiliki lebih dari dua buah simpul (node).

Struktur data ini memiliki kompleksitas logaritmik

(log( ))O n dalam melakukan proses pencarian,

penambahan, maupun penghapusan record.

Gambar 3-1 Struktur B-Tree (Reference: http://ozark.hendrix.edu )

Gambar 3-1 diatas merupakan bentuk dari

penyimpanan record dari struktur data B- tree. Kita

mendifinisikan akar (root) sebagai bagian teratas dari

sebuah pohon, daun (leaf) sebagai bagian paling bawah

dari sebuah pohon, ayah (parent) dan anak (child)

masing-masing sebagai bagian pohon yang saling

terhubung & memiliki kedalaman n & (n+1) secar

berurutan. Untuk mempermudah pembahasan, kita

mengasumsikan bahwa setiap bagian records telah

diberikan suatu nilai kunci (key) berupa indeks

tertentu.

Perbedaan mendasar BST dengan B- tree adalah

setiap simpul dapat memiliki lebih dari dua anak.

Sebagai contoh, blok yang beranggotakan {9,11}

memiliki 3 buah anak, yaitu {1,4}, {9,10}, dan

{11,12}. Prinsip dasar pembangunan struktur data ini

sama dengan BST, yaitu indeks yang lebih kecil berada

disebelah kiri dan indeks yang lebih besar berada

disebelah kanan.

Banyaknya records yang dapat disimpan oleh B- tree

didefinisikan sebagai 1hn m , dengan m adalah

banyaknya kunci yang dimiliki suatu blok dan h

merupakan tingkat kedalaman dari pohon tersebut. Hal

ini tentunya jauh lebih menguntungkan dibandingkan

Binary Search Tree, karena perbedaan jumlah records

yang dapat disimpan berbanding eksponensial dengan

banyaknya anak yang dapat dimiliki suatu simpul.

Pada umumnya, sebuah B-tree memiliki jumlah anak

d, yang didefinisikan sebagai [ / 2]d m . Dari sini

didapatkan suatu persamaan tingkat kedalaman dari

pohon B- tree yang dibentuk, didefinisikan dengan

persamaan:

1log ( )

2d

nh

Lamanya proses pencarian (searching) dari pohon ini

sebanding dengan tingkat kedalamannya, atau dapat

dituliskan sebagai O(h).

Keuntungan dalam menggunakan struktur data ini

adalah kita cukup mengakses blok yang menyimpan

indeks dari masing-masing records. Hal ini

dikarenakan akses langsung ke media penyimpanan

sekunder (hard disk) jauh lebih lambat dibandingkan

pemrosesan langsung. Memori yang digunakan dalam

menyimpan indeks (yang berfungsi sebagai kunci) dari

suatu record memiliki ukuran memori yang lebih kecil

dibandingkan pembacaan langsung suatu record secara

keseluruhan.

B. Operasi Read B- tree

Operasi read dilakukan untuk membaca isi dari

suatu record yang tersimpan dalam B- tree. Prinsip

dasar dalam pembacaan adalah dengan menggunakan

teknik Binary Search dalam BST, yaitu

membandingkan nilai indeks yang dicari dengan

indeks posisi saat ini.

Algoritma berikut merupakan algoritma yang

digunakan dalam BST (dengan simplifikasi child

masing-masing simpul berjumlah 2):

algorithm Find(key, root):

current-node := root

while current-node is not Nil do

if current-node.key = key then

return current-node

else if key < current-node.key then

Page 3: Analisis B-Tree Dan B+Tree Indexed File

Makalah IF2094 Basis Data – Sem. II Tahun 2012/2013

current-node := current-

node.left

else

current-node := current-

node.right

Pada gambar 3-1 diatas, misalkan kita ingin mencari

alamat record dengan indeks 12. Proses pencarian

yang terjadi adalah {13} {9,11} {11, 12}. Kita

cukup mengakses 3 blok dengan 4 kali perbandingan

yaitu {13}, {9,11}, serta traversal yang terjadi pada

blok {11, 12}. Setelah indeks 12 ditemukan, misalkan

indeks 12 berisi alamat pointer 0x100. Maka proses

selanjutnya yang dilakukan untuk membaca isi record

adalah mengakses blok yang memiliki address 0x100

tersebut.

C. Operasi Insert B- tree

Operasi insert ini dilakukan untuk menambahkan

indeks suatu record baru yang ingin disisipkan

kedalam B- tree. Secara garis besar, proses

penambahan ini dibagi menjadi 3 langkah:

1. Menggunakan proses search (seperti read)

untuk mencari posisi dari indeks yang akan

disisipkan

2. Menambahkan indeks ini sebagai bagian dari

simpul pada posisi tersebut

3. Jika jumlah indeks yang dapat ditampung suatu

blok masih mencukupi, maka proses selesai.

Jika jumlah indeks yang dapat ditampung suatu

blok tidak mencukupi, maka kita harus

merekonstruksi pohon tersebut agar seimbang

(balanced) dengan elemen baru yang berhasil

disisipkan.

Perhatikan contoh dibawah ini:

Gambar 3-2 Pohon B- tree Awal

Misalkan kita ingin menambahkan elemen 17

kedalam pohon tersebut. Kita cukup menambahkan 17

ke daun bagian tengah, yang menghasilkan gambar

berikut:

Gambar 3-3 Pohon B- tree dengan elemen 17

Jumlah indeks yang dimiliki blok tersebut masih

mencukupi, sehingga proses insert yang dilakukan

selesai dan pohon tetap seimbang. Selanjutnya,

misalkan kita ingin menambahkan elemen 6 kedalam

pohon (gambar 3-3) tersebut. Perhatikan bahwa blok

kiri dari daun {10,50} sudah penuh, sehingga kita

harus merekonstruksi pohon tersebut.

Kiri = {2,3}

Tengah = {5}

Kanan = {6,7}

Gambar 3-4 Pohon B- tree dengan elemen 6

Gambar 3-4 diatas menunjukkan bahwa pohon

tersebut membagi blok {2,3,5,6,7} menjadi 2 buah

blok baru, yang masing-masing beranggotakan {2,3}

sebagai simpul kiri, {6,7} sebagai simpul kanan, dan

{5} sebagai ayah (parent) kedua simpul. Demikian

pula ketika kita ingin menambahkan elemen 21. Kita

cukup membagi blok {17,22,44,45} diatas menjadi 2

buah blok baru, seperti yang dapat dilihat pada gambar

3-5 dibawah ini.

Gambar 3-5 Pohon B- tree dengan elemen 22

Perhatikan gambar 3-5 diatas. Perhatikan bahwa

simpul akar (root node) telah penuh terisi. Ketika kita

ingin menambahkan elemen (indeks) baru, misalnya

67, maka kita harus memecah blok {55,66,68,70}

menjadi 2 buah blok baru.

Page 4: Analisis B-Tree Dan B+Tree Indexed File

Makalah IF2094 Basis Data – Sem. II Tahun 2012/2013

Gambar 3-6 Pohon B- tree dengan elemen 22

Perhatikan gambar 3-6 diatas. Karena alamat yang

disimpan oleh elemen berindeks 67 tidak lagi muat untuk

disimpan pada blok {5,10,22,50}, maka kita perlu

memecah blok tersebut menjadi 2 blok baru dan

menambah tingkat kedalaman pohon tersebut.

Kiri = {5,10}

Tengah = {22}

Kanan = {50, 67}

Hasil akhir penambahan (insert) dapat dilihat pada

gambar 3-7 dibawah ini:

Gambar 3-7 Hasil Akhir Insert pada Pohon B- tree

Secara ringkas, algoritma dari penyisipan (insert)

suatu pohon dapat dituliskan sebagai berikut:

public void insertNode(Node n, double

key) //ditulis dalam bahasa Java

{

if (n == null)

n = new Node(key);

else if (key < n.key)

{

if (n.left == null)

n.left = new Node(key);

else

insertNode(n.left, key);

}

else if (key > n.key)

{

if (n.right == null)

n.right = new Node(key);

else

insertNode(n.right, key);

}

}

Algoritma diatas ditulis dengan simplifikasi bahwa

pohon memiliki dua buah anak untuk setiap simpulnya.

Prinsip Binary Search Tree tersebut dapat

diimplementasikan dengan cara yang sama pada B-

tree.

D. Operasi Penghapusan B- tree

Operasi delete dilakukan untuk menghapus record

yang tersimpan pada B- tree. Sama halnya seperti

operasi insert, kita mencari posisi elemen yang akan

dihapus dan melakukan rekonstruksi ulang apabila

diperlukan. Algoritma yang digunakan dalam operasi

ini tidak akan dibahas secara mendetail pada makalah

ini.

Sebagai contoh, kita ingin menghapus elemen 3 dari

gambar 3-8 dibawah ini.

Gambar 3-8 Pohon B- tree dengan elemen 3

Ketika elemen 3 tersebut dihapus, perhatikan bahwa

kita perlu merekonstruksi ulang simpul kiri dengan

simpul bagian tengah. Salah satu teknik yang dapat

digunakan adalah menghitung kapasitas masing-

masing blok dan melakukan rekonstruksi ulang dari

pohon B- tree yang disimpan.

Page 5: Analisis B-Tree Dan B+Tree Indexed File

Makalah IF2094 Basis Data – Sem. II Tahun 2012/2013

Gambar 3-9 Pohon B- tree tanpa elemen 3

Gambar 3-9 diatas adalah pohon B- tree setelah

elemen 3 dihapus. Perhatikan bahwa pohon tersebut

direkonstruksi ulang dengan simpul {2,5,6,7} di bagian

kiri dan {17,22,44,45} di bagian kanan.

IV. STRUKTUR DATA DAN OPERASI-OPERASI

RECORD B+ TREE

A. Struktur Fisik B+ tree

Salah satu struktur data lain yang sering digunakan

dalam indexed file adalah B+ tree. Struktur data ini

mirip dengan B- tree, dengan perbedaan setiap simpul

hanya menyimpan kunci (bukan alamat pointer) dan

setiap daun dihubungkan dengan daun lainnya. Semua

alamat indeks disimpan pada simpul terbawah atau

daun dari pohon B+ tree. Dengan demikian, semua

elemen daun akan mencakup semua records yang

disimpan oleh basis data tersebut.

Oleh karena semua data disimpan pada daun,

struktur ini sangat sering digunakan dalam manajemen

file systems. Daun dapat dianalogikan sebagai suatu

media penyimpanan yang berisikan data, sedangkan

bagian ayah (parent) merupakan blok-blok pencari dari

alamat suatu data tertentu.

Gambar 4-1 Struktur B+ tree

(Reference: http://infolab.stanford.edu )

Gambar 4-1 diatas merepresentasikan struktur dari

B+ tree. Perhatikan bahwa akar dari pencarian

{24,65,88} ditulis kembali dibagian anak-nya yaitu

{2,10}, {24,45}, {65,72}, dan {88,93}. Selain itu,

masing-masing blok pada daun dihubungkan dengan

alamat pointer ke blok daun selanjutnya.

Jumlah anak yang dapat dimiliki suatu simpul

didefinisikan dengan m melalui persamaan

[ / 2]b m b dengan b adalah kapasitas yang dapat

disimpan oleh suatu simpul (dalam hal ini, disebut

blok). Persamaan tersebut berlaku untuk semua simpul

kecuali akar, karena akar dapat memiliki jumlah anak

kurang dari [ / 2]b , misalnya hanya mempunyai dua

anak (binary).

Salah satu keuntungan dari penggunaan struktur B+

Tree adalah kemudahan dalam penanganan record

baru yang ingin ditambahkan maupun record yang

ingin dihapus, karena semua alamat menuju record

disimpan pada daun / tingkat terbawah dari pohon.

Selain itu, adanya linked list pada bagian daun

membuat akses data dari satu pencarian ke pencarian

lainnya lebih efisien.

B. Operasi Read B+ tree

Operasi pembacaan (read) yang dilakukan mirip

dengan operasi pembacaan B- tree. Perbedaannya

adalah binary search yang dilakukan berjumlah

konstan, yaitu sampai daun dari pohon.

Algoritma berikut merepresentasikan pencarian

record pada B+ tree dengan asumsi tidak ada dua nilai

yang sama:

Function: search (k)

return tree_search (k, root);

Function: tree_search (k, node)

if node is a leaf then

return node;

switch k do

case k < k_0

return tree_search(k, p_0);

case k_i ≤ k < k_{i+1}

return tree_search(k, p_i);

case k_d ≤ k

return tree_search(k, p_d);

Sebagai contoh, misalkan kita ingin mencari alamat

record dengan indeks 10. Proses pencarian yang terjadi

adalah {24,65,88} {2,10}. Prinsipnya, proses

pencarian yang terjadi menggunakan metode Binary

Search Tree. Perbedaannya adalah pencarian yang

dilakukan dalam B+ tree mungkin menggunakan

traversal melalui pointer ke blok selanjutnya yang

dimiliki oleh bagian daun.

C. Operasi Insert B+ tree

Operasi insert dilakukan untuk menambahkan

record baru kedalam B+ tree. Perlu diperhatikan

bahwa posisi penyimpanan alamat pada B+ tree

disimpan pada bagian daun. Seperti pada bagian 3C,

Page 6: Analisis B-Tree Dan B+Tree Indexed File

Makalah IF2094 Basis Data – Sem. II Tahun 2012/2013

penambahan elemen pada pohon berprinsip pada

Binary Search Tree, yaitu elemen-elemen yang

nilainya lebih kecil diletakkan disebelah kiri dan

elemen-elemen yang nilainya lebih besar diletakkan

disebelah kanan.

Perhatikan contoh berikut ini:

Gambar 4-2 Pohon B+ tree Awal

Misalkan kita ingin menambahkan elemen 4 kedalam

pohon yang terdapat pada gambar 4-2. Karena blok

{1,3} masih memiliki 1 bagian kosong, maka kita

dapat langsung menambahkan elemen 4 kedalam blok

tersebut, seperti yang terlihat pada gambar 4-3 dibawah

ini.

Gambar 4-3 Pohon B+ tree dengan elemen 4

Elemen selanjutnya yang ingin kita tambahkan ke

pohon diatas adalah elemen 17. Perhatikan bahwa

kedua blok yang terdapat pada bagian daun pohon

diatas telah penuh, maka kita harus membuat blok baru

dengan susunan berikut:

Kiri = {1,3,4}

Tengah = {5,12}

Kanan = {17,18}

Hasil akhir operasi insert dari elemen 17 dapat

dilihat pada gambar 4-4 berikut:

Gambar 4-4 Pohon B+ tree dengan elemen 17

Misalkan elemen selanjutnya yang ingin kita

tambahkan adalah elemen 2. Maka kita harus memecah

blok {1,3,4} diatas menjadi 2 blok baru, yaitu {1,2}

dan {3,4}. Gambar 4-5 dibawah ini merupakan hasil

akhir dari proses insert yang dilakukan terhadap B+

tree: Gambar 4-5 Pohon B+ tree dengan elemen 2

D. Operasi Penghapusan B+ tree

Seperti operasi delete pada B- tree, pertama-tama

kita akan mencari posisi dari indeks yang akan kita

hapus. Jika setelah penghapusan jumlah elemen dalam

blok masih lebih dari [ / 2]b , maka operasi

penghapusan selesai dilakukan. Namun apabila jumlah

elemen dalam blok kurang dari [ / 2]b , maka kita

harus mendistribusikan masing-masing elemen

kedalam blok lainnya (operasi penggabungan).

Algoritma untuk operasi penghapusan B+ tree tidak

akan dibahas secara mendetail pada makalah ini.

V. IMPLEMENTASI B-TREE DAN B+TREE

Implementasi dari struktur data B- tree dan B+ tree

sangat bervariatif. Sebagai contoh, beberapa file system

format seperti FAT pada MS-DOS, HFS+ pada Apple,

NTFS pada Windows, serta Ext4 pada Linux

menggunakan prinsip data struktur ini. Penyimpanan

file dipetakan menjadi suatu susunan indeks yang

disusun menjadi B- tree / B+ tree, yang bertujuan

untuk memudahkan pencarian data dalam media

penyimpanan sekunder.

Dalam basis data, kita akan mengambil suatu studi

kasus basis data karyawan suatu perusahaan. Misalkan

kita ingin menggunakan nama karyawan sebagai field

penyusunan indeks dari pohon B+ Tree. Perhatikan

gambar 5-1 dibawah ini:

Page 7: Analisis B-Tree Dan B+Tree Indexed File

Makalah IF2094 Basis Data – Sem. II Tahun 2012/2013

Gambar 5-1 Desain B+ tree Karyawan Perusahaan

(Reference: http://mattfleming.com/node/192 )

Pada gambar diatas, perhatikan bahwa nama-nama

setiap karyawan diurutkan berdasarkan blok nama

alphabetik. Akar dari pohon tersebut adalah {Di, Lu,

Rh} yang memiliki 4 buah anak yaitu {B, C, Cr}, {F,

H, Kar}, {N, P, Ph}, dan {Sam, St, Su}. Masing-

masing indeks dalam blok daun (leaf) dapat digunakan

untuk memanggil alamat asli dari penyimpanan

records tersebut.

Masing-masing ROWID dari gambar 5-1 diatas

dapat memiliki field-field lainnya, seperti misalnya

alamat, jabatan, tanggal lahir, dan sebagainya yang

disimpan sebagai satu record. Dengan memberikan

indeks terhadap suatu record (disusun berdasarkan

suatu kategori field), maka proses pencarian,

penambahan, maupun penghapusan suatu record dapat

berlangsung lebih cepat. Selain itu, indexed file

menggunakan B- tree dan B+ tree juga sering

digunakan dalam aplikasi-aplikasi manajemen sistem

basis data (DBMS) seperti BTreeDB maupun aplikasi-

aplikasi DBMS lainnya.

Dari perbandingan dan uraian diatas, struktur data B-

tree cocok digunakan untuk pemrosesan data dengan

jumlah record yang dapat ditampung oleh media

penyimpanan primer, sedangkan struktur data B+ tree

digunakan untuk pemrosesan data yang jumlah record

nya sangat banyak sehingga harus ditampung oleh

media penyimpanan sekunder seperti hard disk.

VI. KESIMPULAN

Salah satu teknik pemodelan yang sering digunakan

dalam pengelolaan basis data adalah indexed file.

Indexed file memberikan suatu kunci berupa indeks

untuk setiap record yang ingin disimpan. Dua struktur

data yang sering digunakan dalam pemodelan ini

adalah B- tree dan B+ tree. Kedua struktur pohon ini

memiliki kompleksitas logaritmik O(log(n))

dalam proses pembacaan maupun pencarian

record. Prinsip penyusunan indeks dalam pohon-

pohon tersebut adalah Binary Search Tree.

Teknik pemodelan ini memiliki aplikasi yang

beragam, seperti pengelolaan media

penyimpanan sekunder (hard disk), penyimpanan

data-data karyawan maupun inventarisasi

perusahaan, dan pembuatan DBMS (DataBase

Management System).

REFERENCES

[1] Gio Wiederhold, 2001. Database Design, Second Edition.

USA : McGraw-Hill

[2] Silberschatz, Korth, Sudarshan, 2001. Database System

Concepts, Fourth Edition. USA : McGraw-Hill

[3] http://en.wikipedia.org/wiki/B-tree, diakses 25 Februari

2013 pukul 22.30

[4] http://en.wikipedia.org/wiki/B%2B_tree, diakses 25

Februari 2013 pukul 22.45

[5] http://www.cs.uga.edu/~eileen/2720/Notes/Btrees.ppt,

diakses 25 Februari 2013 pukul 23.05

[6] http://cayfer.bilkent.edu.tr/~cayfer/ctp108/indexed.htm,

diakses 25 Februari 2013 pukul 23.50

[7] http://webdocs.cs.ualberta.ca/~holte/T26/ins-b-tree.html,

diakses 26 Februari 2013 pukul 02.00

[8] www.cbcb.umd.edu/confcour/CMSC424/B+-tree.pdf,

diakses 26 Februari 2013 pukul 06.00