Analisis B-Tree Dan B+Tree Indexed File
Click here to load reader
-
Upload
iskandar-setiadi -
Category
Documents
-
view
712 -
download
5
description
Transcript of 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
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
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
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.
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.
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,
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:
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