Banyak (mungkin sebagian besar?) Aplikasi database saat ini menggunakan B-Trees dan variasi untuk menyimpan data, karena struktur data ini mengoptimalkan operasi baca, tulis, dan cari pada hard disk (dan operasi ini pada gilirannya memainkan peran penting dalam efisiensi keseluruhan database).
Haruskah Solid State Drive (SSD) benar-benar lebih baik daripada hard disk tradisional (HDD), dapatkah kita mengatakan bahwa B-Trees dan variasi akan menjadi usang, memberikan ruang untuk struktur data yang lebih efisien beroperasi pada memori akses langsung? Jika demikian, akan seperti apa struktur itu? (misalnya, tabel hash, pohon AVL)
database
data-structures
Daniel Scocco
sumber
sumber
Jawaban:
B-Trees paling sering digunakan untuk indeks basis data pada hard disk, tetapi mereka memiliki kelebihan bahkan sebagai struktur data dalam memori, mengingat hirarki memori modern dengan beberapa lapisan cache dan dengan memori virtual. Bahkan jika memori virtual ada pada SSD, itu tidak akan berubah.
Saya menggunakan perpustakaan multiway tree B + -style di memori yang saya tulis cukup banyak di C ++. Ini dapat memiliki keuntungan kinerja - alasannya pada awalnya ditulis adalah untuk mencoba menggunakan cache lebih baik - tetapi saya harus mengakui itu sering tidak berfungsi seperti itu. Masalahnya adalah trade-off yang berarti item harus bergerak dalam node pada sisipan dan penghapusan, yang tidak terjadi pada pohon biner. Juga, beberapa hacking coding tingkat rendah yang saya gunakan untuk mengoptimalkannya - yah, mereka mungkin membingungkan dan mengalahkan optimizer, kebenaran mengatakan.
Bagaimanapun, bahkan jika basis data Anda disimpan pada SSD, itu masih merupakan perangkat penyimpanan berorientasi blok, dan masih ada keuntungan menggunakan B-Trees dan pohon multi-jalur lainnya.
TETAPI sekitar sepuluh tahun yang lalu, algoritma cache-lupa dan struktur data diciptakan. Ini tidak menyadari ukuran dan struktur cache dll - mereka membuat (asymptotically) penggunaan sebaik mungkin dari setiap hirarki memori. B-Trees perlu "disetel" ke hirarki memori tertentu untuk memanfaatkan yang terbaik (meskipun mereka bekerja cukup baik untuk variasi yang cukup luas).
Cache lupa struktur data belum sering terlihat di alam liar, jika sama sekali, tapi sudah waktunya mereka membuat pohon biner dalam memori yang biasa menjadi usang. Dan mereka juga terbukti bermanfaat untuk hard disk dan SSD juga, karena mereka tidak peduli apa ukuran halaman cache-size atau hard-disk.
Tata letak Van Emde Boas sangat penting dalam struktur data yang tidak memperhatikan cache.
Kursus algoritma OpenCourseware MIT mencakup beberapa cakupan struktur data yang tidak diketahui oleh cache.
sumber
A priori, ya, sebagian besar mesin basis data harus ditulis ulang karena B-Tree tidak akan lagi menjadi struktur data yang paling efisien untuk menyimpan data, mengingat bahwa lokalitas sangat penting dalam hard drive di mana disk bergerak perlahan dan data diambil dalam blok, artinya setiap perubahan pada data perlu:
Itu 10 + 3 + 3 + 10 + 3 + 3 = 34 ms
Rata-rata, melakukan hal yang sama pada SSD hanya 1 ms, terlepas dari posisi pada disk.
Dan karena hashtable jauh lebih cepat, kita bisa berpikir hashtable akan menjadi pengganti yang lebih baik.
Satu-satunya masalah adalah bahwa hashtable tidak mempertahankan pesanan dan oleh karena itu tidak mungkin untuk menemukan berikutnya dan sebelumnya seperti yang dilakukan Van Emde Boas.
Lihat:
Mengapa menemukan yang berikutnya dan yang sebelumnya itu penting? Bayangkan mendapatkan semua elemen lebih besar dari x dan lebih kecil dari z, Anda perlu menggunakan indeks dengan find sebelumnya dan temukan berikutnya.
Yah, satu-satunya masalah adalah bahwa kami belum menemukan hashtable dengan kemampuan menjaga pesanan. Mungkin ukuran bucket di B-tree akan menjadi penting, tetapi hal itu dapat diselesaikan dengan algoritma cache cache yang terlupakan.
Jadi saya akan mengatakan ini adalah masalah terbuka.
sumber