Anda di halaman 1dari 7

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 13511073@std.stei.itb.ac.id

AbstrakSalah 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 operasioperasi 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.

kategori field tertentu. Namun demikian, hal ini tidak menutup kemungkinan untuk menggunakan lebih dari satu field sebagai dasar pemberian index suatu record.

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.
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 masingmasing 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

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
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.

disebelah kanan. Banyaknya records yang dapat disimpan oleh B- tree didefinisikan sebagai n m 1 , 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.
h

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 O(log(n)) dalam melakukan proses pencarian, penambahan, maupun penghapusan record.

Pada umumnya, sebuah B-tree memiliki jumlah anak d, yang didefinisikan sebagai d [m / 2] . Dari sini didapatkan suatu persamaan tingkat kedalaman dari pohon B- tree yang dibentuk, didefinisikan dengan persamaan:

n 1 h log d ( ) 2
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

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
Makalah IF2094 Basis Data Sem. II Tahun 2012/2013

current-node := currentnode.left else current-node := currentnode.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:

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-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-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.

Gambar 3-3 Pohon B- tree dengan elemen 17

Makalah IF2094 Basis Data Sem. II Tahun 2012/2013

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 Gambar 3-6 Pohon B- tree dengan elemen 22 insertNode(n.right, key); } }

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:

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 Btree. 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-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) {

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 masingmasing blok dan melakukan rekonstruksi ulang dari pohon B- tree yang disimpan.

Makalah IF2094 Basis Data Sem. II Tahun 2012/2013

blok). Persamaan tersebut berlaku untuk semua simpul kecuali akar, karena akar dapat memiliki jumlah anak kurang dari [b / 2] , misalnya hanya mempunyai dua anak (binary).
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.

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);

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 [b / 2] m b dengan b adalah kapasitas yang dapat disimpan oleh suatu simpul (dalam hal ini, disebut
Makalah IF2094 Basis Data Sem. II Tahun 2012/2013

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,

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-4 Pohon B+ tree dengan elemen 17

Misalkan elemen selanjutnya yang ingin kita tambahkan adalah elemen 2. Maka kita harus memecah

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.

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

Gambar 4-3 Pohon B+ tree dengan elemen 4

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 [b / 2] , maka operasi penghapusan selesai dilakukan. Namun apabila jumlah elemen dalam blok kurang dari [b / 2] , 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.

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:

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

memiliki kompleksitas logaritmik O(log(n)) dalam proses pembacaan maupun pencarian record. Prinsip penyusunan indeks dalam pohonpohon 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
Gambar 5-1 Desain B+ tree Karyawan Perusahaan (Reference: http://mattfleming.com/node/192 ) [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

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}. Masingmasing 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 aplikasiaplikasi DBMS lainnya. Dari perbandingan dan uraian diatas, struktur data Btree 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
Makalah IF2094 Basis Data Sem. II Tahun 2012/2013