Dalam b-tree Anda bisa menyimpan kunci dan data di internal dan node leaf , tetapi di b + tree Anda harus menyimpan data di node leaf saja .
Apakah ada keuntungan melakukan hal di atas dalam pohon b +?
Mengapa tidak menggunakan b-tree daripada b + tree di mana-mana, karena secara naluri mereka tampak lebih cepat?
Maksud saya, mengapa Anda perlu mereplikasi kunci (data) dalam pohon b +?
database
data-structures
simplfuzz
sumber
sumber
Jawaban:
Gambar di bawah ini membantu menunjukkan perbedaan antara pohon B + dan pohon B.
Keuntungan dari pohon B +:
Keuntungan dari pohon B:
sumber
Keuntungan utama dari pohon B + di atas pohon B adalah mereka memungkinkan Anda untuk mengemas lebih banyak pointer ke node lain dengan menghapus pointer ke data, sehingga meningkatkan fanout dan berpotensi mengurangi kedalaman pohon.
Kerugiannya adalah tidak ada out awal ketika Anda mungkin menemukan kecocokan di simpul internal. Tetapi karena kedua struktur data memiliki fanout yang besar, sebagian besar pertandingan Anda akan berada pada node daun, membuat rata-rata pohon B + lebih efisien.
sumber
B + Trees jauh lebih mudah dan berkinerja lebih tinggi untuk melakukan pemindaian penuh, seperti dalam melihat setiap bagian data yang diindeks pohon, karena simpul terminal membentuk daftar tertaut. Untuk melakukan pemindaian penuh dengan B-Tree Anda perlu melakukan traversal pohon lengkap untuk menemukan semua data.
B-Pohon di sisi lain bisa lebih cepat ketika Anda melakukan pencarian (mencari sepotong data tertentu dengan kunci) terutama ketika pohon berada di RAM atau penyimpanan non-blok lainnya. Karena Anda dapat meningkatkan node yang biasa digunakan di pohon, ada sedikit perbandingan yang diperlukan untuk mendapatkan data.
sumber
sumber
Contoh dari konsep sistem Database ke-5
B + -tree
pohon-B yang sesuai
sumber
Clearview bucket
keMianus Bucket
. Lagipula tidak masuk akal untuk melakukan itu karena di antara keduanya Anda memilikiDowntown bucket
yang banyak dicari jika Anda ingin melakukan Pemindaian Indeks dalam B-tree (membutuhkan pengulangan jejak). Dimana kamu mendapatkan ini?Tentukan "lebih cepat". Secara asimtotik mereka hampir sama. Perbedaannya terletak pada bagaimana mereka menggunakan penyimpanan sekunder. Artikel Wikipedia tentang pohon - B dan pohon B + terlihat cukup dapat dipercaya.
sumber
Adegoke A, Amit
Saya kira satu hal penting yang Anda lewatkan adalah perbedaan antara data dan petunjuk sebagaimana dijelaskan di bagian ini.
Pointer: pointer ke node lain.
Data: - Dalam konteks indeks basis data, data hanyalah penunjuk ke data nyata (baris) yang berada di tempat lain.
Oleh karena itu dalam kasus B tree setiap node memiliki tiga kunci informasi, pointer ke data yang terkait dengan kunci dan pointer ke node anak.
Dalam B + tree internal node menyimpan kunci dan pointer ke simpul anak, sedangkan leaf node menyimpan kunci dan pointer ke data terkait. Ini memungkinkan lebih banyak jumlah kunci untuk ukuran node tertentu. Ukuran node ditentukan terutama oleh ukuran blok.
Keuntungan memiliki lebih banyak kunci per node dijelaskan di atas sehingga saya akan menghemat usaha pengetikan saya.
sumber
B + Trees sangat bagus dalam penyimpanan berbasis blok (mis: hard disk). dengan mengingat hal ini, Anda mendapatkan beberapa keuntungan, misalnya (dari atas kepala saya):
fanout tinggi / kedalaman rendah: itu berarti Anda harus mendapatkan lebih sedikit blok untuk mendapatkan data. dengan data yang bercampur dengan pointer, setiap pembacaan mendapat pointer yang lebih sedikit, jadi Anda perlu lebih banyak upaya untuk sampai ke data
penyimpanan blok sederhana dan konsisten: simpul dalam memiliki N pointer, tidak ada yang lain, simpul daun memiliki data, tidak ada yang lain. yang membuatnya mudah untuk mengurai, men-debug dan bahkan merekonstruksi.
Kepadatan kunci yang tinggi berarti node teratas hampir pasti pada cache, dalam banyak kasus semua node batin cepat di-cache, sehingga hanya akses data yang harus pergi ke disk.
sumber
Dalam B + Tree, karena hanya pointer yang disimpan di node internal, ukurannya menjadi jauh lebih kecil daripada node internal B tree (yang menyimpan kedua data + kunci). Oleh karena itu, indeks pohon B + dapat diambil dari penyimpanan eksternal dalam satu disk baca, diproses untuk menemukan lokasi target. Jika sudah menjadi pohon B, pembacaan disk diperlukan untuk setiap proses pengambilan keputusan. Saya harap saya menjelaskan maksud saya! :)
sumber
**
** ref: Struktur Data Menggunakan C // Penulis: Aaro M Tenenbaum
http://books.google.co.in/books?id=X0Cd1Pr2W0gC&pg=PA456&lpg=PA456&dq=drawback+of+B-Tree+is+the+difficulty+of+Traversing+the+keys+ollowently&source=bl&ots=pGsQSE F9MY7zEXYAMVKl_Sg4W-0LTRor8 & hl = en & sa = X & ei = nD5AUbeeH4zwrQe12oCYAQ & ved = 0CDsQ6AEwAg # v = onepage & q = kekurangan% 20 dari% 20B-% pohon% 20% karena%%% karena% 20% karena%% sulit karena% 20% karena% 20% karena%% sulit karena% 20% karena% 20% naik% karena% 20% sulit karena% 20% naik% karena% 20% naik.
sumber
Ambil satu contoh - Anda memiliki tabel dengan data besar per baris. Itu berarti setiap instance objek adalah Big.
Jika Anda menggunakan pohon B di sini maka sebagian besar waktu dihabiskan memindai halaman dengan data - yang tidak berguna. Dalam database itulah alasan menggunakan B + Trees untuk menghindari pemindaian data objek.
B + Pohon memisahkan kunci dari data.
Tetapi jika ukuran data Anda kurang dari maka Anda dapat menyimpannya dengan kunci yang merupakan apa yang dilakukan B tree.
sumber
Perbedaan utama antara B-tree dan B + tree adalah bahwa B-tree menghilangkan penyimpanan berlebihan dari nilai-nilai kunci pencarian. Karena kunci pencarian tidak diulang dalam B-tree, kita mungkin tidak dapat menyimpan indeks menggunakan lebih sedikit node pohon daripada dalam indeks pohon B + yang sesuai. Namun, karena kunci pencarian yang muncul di node non-daun tidak muncul di tempat lain di B-tree, kami dipaksa untuk menyertakan bidang penunjuk tambahan untuk setiap kunci pencarian di simpul non-daun. Ini adalah keuntungan ruang untuk B-tree, karena pengulangan tidak terjadi dan dapat digunakan untuk indeks besar.
sumber
Pohon B + adalah pohon seimbang di mana setiap jalur dari akar pohon ke daun memiliki panjang yang sama, dan setiap simpul pohon tanpa daun memiliki antara [n / 2] dan [n] anak-anak, di mana n adalah diperbaiki untuk pohon tertentu. Ini berisi halaman indeks dan halaman data. Pohon biner hanya memiliki dua anak per simpul orangtua, pohon B + dapat memiliki jumlah variabel anak untuk setiap simpul induk
sumber
Salah satu kemungkinan penggunaan pohon B + adalah bahwa pohon ini cocok untuk situasi di mana pohon tumbuh sangat besar sehingga tidak sesuai dengan memori yang tersedia. Dengan demikian, Anda biasanya mengharapkan untuk melakukan beberapa I / O.
Itu sering terjadi bahwa pohon B + digunakan bahkan ketika itu sebenarnya cocok dengan memori, dan kemudian manajer cache Anda mungkin menyimpannya di sana secara permanen. Tapi ini adalah kasus khusus, bukan yang umum, dan kebijakan caching terpisah dari pemeliharaan pohon B +.
Juga, dalam pohon B +, halaman daun dihubungkan bersama dalam daftar yang ditautkan (atau daftar yang ditautkan dua kali lipat), yang mengoptimalkan traversal (untuk pencarian rentang, pengurutan, dll.). Jadi jumlah pointer adalah fungsi dari algoritma spesifik yang digunakan.
sumber