Akankah B-Trees dan Struktur Data Lainnya Menjadi Kuno Dengan Munculnya Drive Solid State?


15

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)


Apakah Anda bertanya apakah mereka akan menjadi usang dari sudut pandang implementasi database atau secara umum karena memiliki banyak aplikasi lain di luar aplikasi database.
Pemdas

Dari sudut pandang basis data.
Daniel Scocco

Jawaban:


21

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.


1
Menarik. Anda memberikan beberapa petunjuk yang baik (tidak ada permainan kata-kata!) Untuk mengeksplorasi topik ini lebih lanjut. Terima kasih.
Daniel Scocco

Kursus MIT ini juga memiliki informasi tentang struktur data yang tidak diketahui cache.
dan_waterworth

Hai, apakah maksud Anda bahwa B-tree akan usang, karena struktur data yang tembolok-cache, bukan karena SSD? Tetapi bagaimana dengan struktur data lainnya, seperti manajemen blok dalam DBMS?
Yang Bo

@ user955091 - Maksud saya karena struktur data yang tidak memperhatikan cache (berarti struktur pedantically yang optimal dalam model cache-lupa), tapi saya agak terlalu bersemangat tentang mereka saat itu. Struktur data lainnya tidak akan hilang dalam waktu dekat. Untuk satu hal, cache bukan satu-satunya masalah kinerja - paralelisme membuat tuntutan yang berbeda. Selain itu, perlu pemesanan berbasis kunci sering merupakan kasus khusus - biasanya, tabel hash adalah raja. Mungkin sulit untuk melihat tata letak "acak" sebagai cache-friendly, tetapi satu akses untuk mengambil item secara langsung sulit dikalahkan - Anda tidak perlu lokalitas.
Steve314

3

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:

  1. Pindahkan kepala ke lokasi yang tepat pada disk (~ 10 ms).
  2. Tunggu disk berputar (pada 10k rpm, itu berarti 167 rotasi per detik, tetapi rata-rata kita hanya menunggu setengah putaran, jadi ~ 3ms).
  3. Baca blok (~ 3ms).
  4. Ubah dalam RAM. (~ 10ns)
  5. Pindahkan kepala ke lokasi yang tepat pada disk lagi (~ 10 ms lagi).
  6. Tunggu disk berputar lagi (~ 3 ms lagi).
  7. Tulis bloknya (~ 3ms).

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:

  1. http://en.wikipedia.org/wiki/Van_Emde_Boas_tree
  2. http://bryanpendleton.blogspot.com/2009/06/cache-oblivious-data-structures.html

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.


Tabel hash adalah (biasanya) cache lupa WRT memodelkan kinerjanya, tetapi itu tidak berarti itu efisien dalam model itu. Masalahnya adalah bahwa fungsi hash biasanya dirancang untuk menyebarkan item "secara acak" - itu sebabnya tabel hash tidak teratur dan juga mengapa mereka memiliki lokalitas yang buruk. Itu berarti bahkan jika Anda dapat mengidentifikasi urutan item dengan tombol yang berdekatan, Anda tidak akan mendapat manfaat dari membaca dua atau lebih item per blok (SSD masih memblokir perangkat).
Steve314

1
Tentu saja hashing juga kadang-kadang disebut "transformasi kunci" dan transformasi tidak memiliki menjadi "acak" - mungkin itu mungkin untuk menentukan fungsi hash yang memungkinkan untuk akses sekuensial cukup efisien (tidak menghilangkan mencari informasi - hilang oleh Bagaimanapun juga, fungsi hash - tetapi meminimalkannya) dan memberikan beberapa manfaat lokalitas sambil tetap menjaga tabrakan hash tetap langka.
Steve314
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.