Analisis B- Tree dan B+ Tree Indexed File Iskandar Setiadi (13511073) Program Studi Teknik Informatika Informatika Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung, Jl. Ganesha 10 Bandung 40132, Indonesia
[email protected]
Salah satu metode yang sering digunakan Abstrak — Salah dalam pengorganisasian file adalah indexed file organization. Pada metode ini, setiap record disusun berdasarkan kunci (key) tertentu. Dua jenis struktur
kategori field tertentu. Namun demikian, hal ini tidak menutup kemungkinan untuk menggunakan lebih dari satu field satu field sebagai sebagai dasar pemberian index suatu record .
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.
I ndex Terms — B- Tree, B+ Tre Tree, I nde ndexed F ile il e, Organisasi File, Basis Data.
I. PENDAHULUAN Gambar 2-1 Desain Indexed File Organization
Permasalahan dalam pengorganisasian file di dunia (Reference: http://tle.tafevc.com.au (Reference: http://tle.tafevc.com.au ) ) nyata beragam jenisnya. Setiap pemodelan organisasi file yang dirancang bertujuan untuk memudahkan Pada gambar 2-1 diatas, masing-masing records manipulasi data seperti menyimpan, membaca, maupun dalam table record diinisialisasi dengan suatu nilai mengupdate record dalam rentang waktu yang cepat index. index. Masing-masing dari index tersebut menyimpan serta fleksibel. Indexed file adalah suatu model alamat (address (address)) dari record yang record yang dikenalinya. Sebagai penyimpanan data dengan pemberian indeks untuk contoh, alamat “Index to A” menyimpan alamat dari masing-masing records yang disimpan. Namun “Record 3”. demikian, representasi data struktur yang digunakan akan menentukan kecepatan dari setiap operasi record Salah satu keuntungan pemodelan ini adalah running yang dilakukan. Dianalogikan dengan proses time yang cepat. Misalkan kita memiliki 10.000 searching , pencarian dalam struktur data binary search records yang ingin disimpan, dengan ukuran masingtree akan lebih cepat dilakukan dibandingkan masing record adalah 100 bytes. bytes. Setiap blok pencarian dalam struktur data linear array. array. Pada penyimpanan mampu menampung 512 bytes. bytes. Dengan makalah ini, kita akan menganalisis dua jenis struktur demikian, setiap blok mampu menyimpan 5 records. records. data yang digunakan dalam indexed file, file, yaitu B- tree Dengan jumlah records yang kita miliki, dibutuhkan dan B+ dan B+ tree. tree. 2.000 blok untuk menyimpan semua records diatas.
II. I NDEXED F ILE O RGANIZATION Indexed File Organization adalah suatu metode pemodelan yang menyimpan file menggunakan sistem index. 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 – Data – Sem. Sem. II Tahun 2012/2013
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) search) memerlukan traversal ke
seluruh blok penyimpanan sehingga rata-rata jumlah blok yang harus diakses adalah 2.000 / 2 = 1.000 blok. Pencarian menggunakan binary search dalam 2 pemodelan indexed file memerlukan log(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 R ECORD B- T REE
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
Pada umumnya, sebuah B-tree memiliki jumlah anak d, yang didefinisikan sebagai d [m / 2] . Dari sini
A. Struktur Fisik B- tree didapatkan suatu persamaan tingkat kedalaman dari B- tree merupakan suatu bentuk generalisasi dari struktur data Binary Search Tree, yaitu pohon yang pohon B- tree yang dibentuk, didefinisikan dengan dapat memiliki lebih dari dua buah simpul (node). persamaan: Struktur data ini memiliki kompleksitas logaritmik n 1 ) h log d ( melakukan proses pencarian, O(log( n)) dalam 2
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
Makalah IF2094 Basis Data – Sem. II Tahun 2012/2013
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
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.
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.
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
Makalah IF2094 Basis Data – Sem. II Tahun 2012/2013
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.
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
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:
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 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)
{
Makalah IF2094 Basis Data – Sem. II Tahun 2012/2013
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.
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 R ECORD B+ T REE 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.
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)
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.
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.
Gambar 4-4 Pohon B+ tree dengan elemen 17
Misalkan elemen selanjutnya yang ingin kita tambahkan adalah elemen 2. Maka kita harus memecah
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.
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 [b / 2] , maka operasi penghapusan selesai dilakukan. Namun apabila jumlah elemen dalam blok kurang dari [b / 2] , maka kita
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:
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-T REE DAN B+T REE 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 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).
R EFERENCES 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}. 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. K ESIMPULAN 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
[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