Saya tertarik mempelajari cara kerja mesin basis data (yaitu bagian dalamnya). Saya tahu sebagian besar struktur data dasar yang diajarkan dalam CS (pohon, tabel hash, daftar, dll.) Serta pemahaman yang cukup baik tentang teori kompiler (dan telah menerapkan juru bahasa yang sangat sederhana) tetapi saya tidak mengerti bagaimana cara melakukannya tentang menulis mesin basis data. Saya telah mencari tutorial tentang masalah ini dan saya tidak dapat menemukannya, jadi saya berharap orang lain dapat mengarahkan saya ke arah yang benar. Pada dasarnya, saya ingin informasi tentang yang berikut:
- Bagaimana data disimpan secara internal (yaitu bagaimana tabel diwakili, dll.)
- Bagaimana mesin menemukan data yang dibutuhkan (mis. Jalankan kueri SELECT)
- Bagaimana data dimasukkan dengan cara yang cepat dan efisien
Dan topik lain yang mungkin relevan dengan ini. Itu tidak harus menjadi basis data pada disk - bahkan basis data dalam memori baik-baik saja (jika lebih mudah) karena saya hanya ingin mempelajari prinsipal di belakangnya.
Terima kasih banyak atas bantuanmu.
sumber
Jawaban atas pertanyaan ini sangat besar. mengharapkan tesis PHD untuk menjawabnya 100%;) tetapi kita dapat memikirkan masalah satu per satu:
Cara menyimpan data secara internal: Anda harus memiliki file data yang berisi objek database Anda dan mekanisme caching untuk memuat data dalam fokus dan beberapa data di sekitarnya ke dalam RAM dengan asumsi Anda memiliki tabel, dengan beberapa data, kami akan membuat format data untuk mengubah tabel ini menjadi file biner, dengan menyetujui definisi pembatas kolom dan pembatas baris dan memastikan pola pembatas seperti itu tidak pernah digunakan dalam data Anda sendiri. yaitu jika Anda telah memilih <*> misalnya untuk memisahkan kolom, Anda harus memvalidasi data yang Anda tempatkan dalam tabel ini untuk tidak mengandung pola ini. Anda juga dapat menggunakan tajuk baris dan tajuk kolom dengan menentukan ukuran baris dan beberapa nomor pengindeksan internal untuk mempercepat pencarian Anda, dan pada awal setiap kolom memiliki panjang kolom ini seperti "Adam", 1, 11.1, "
Cara menemukan item dengan cepat mencoba menggunakan hashing dan pengindeksan untuk menunjuk pada data yang disimpan dan di-cache berdasarkan kriteria berbeda dengan mengambil contoh yang sama di atas, Anda bisa mengurutkan nilai kolom pertama dan menyimpannya di objek terpisah yang menunjuk pada baris id item yang diurutkan berdasarkan abjad. , dan seterusnya
Bagaimana mempercepat memasukkan data yang saya tahu dari Oracle adalah bahwa mereka memasukkan data di tempat sementara baik dalam RAM dan pada disk dan melakukan pembersihan secara berkala, mesin database sibuk sepanjang waktu mengoptimalkan strukturnya tetapi pada saat yang sama kita tidak ingin kehilangan data jika listrik padam seperti itu. jadi cobalah untuk menyimpan data di tempat sementara ini tanpa penyortiran, tambahkan penyimpanan asli Anda, dan nanti ketika sistem bebas menggunakan indeks Anda dan menghapus area temp ketika selesai
semoga sukses, proyek bagus.
sumber
SQLite telah disebutkan sebelumnya, tetapi saya ingin menambahkan beberapa hal.
Saya pribadi belajar banyak dengan mempelajari SQlite. Yang menarik adalah, bahwa saya tidak pergi ke kode sumber (meskipun saya hanya melihat sekilas). Saya belajar banyak dengan membaca materi teknis dan secara khusus melihat perintah internal yang dihasilkannya. Ini memiliki interpreter berbasis stack sendiri di dalam dan Anda dapat membaca P-Code yang dihasilkannya secara internal hanya dengan menggunakan menjelaskan. Dengan demikian Anda dapat melihat bagaimana berbagai konstruksi diterjemahkan ke mesin tingkat rendah (yang ternyata sangat sederhana - tetapi itu juga merupakan rahasia stabilitas dan efisiensinya).
sumber
Ada buku-buku dengan topik tempat yang baik untuk memulai adalah Sistem Basis Data: Buku Lengkap oleh Garcia-Molina, Ullman, dan Widom
sumber
Oke, saya telah menemukan situs yang memiliki beberapa informasi tentang SQL dan implementasi - agak sulit untuk menautkan ke halaman yang mencantumkan semua tutorial, jadi saya akan menautkannya satu per satu:
sumber
Saya sarankan fokus pada www.sqlite.org
Ini baru-baru ini, kecil (kode sumber 1MB), open source (sehingga Anda dapat menemukannya sendiri) ...
Buku telah ditulis tentang bagaimana penerapannya:
http://www.sqlite.org/books.html
Ini berjalan pada berbagai sistem operasi untuk komputer desktop dan ponsel sehingga bereksperimen itu mudah dan mempelajarinya akan berguna saat ini dan di masa depan.
Bahkan ada komunitas yang layak di sini: /programming/tagged/sqlite
sumber
mungkin Anda bisa belajar dari HSQLDB . Saya pikir mereka menawarkan basis data kecil dan sederhana untuk pembelajaran. Anda dapat melihat kode karena ini adalah open source.
sumber
Saya tidak yakin apakah itu akan sesuai dengan kebutuhan Anda, tetapi saya telah mengimplementasikan database berorientasi file sederhana dengan dukungan untuk simple (
SELECT, INSERT , UPDATE
) menggunakan perl.Apa yang saya lakukan adalah saya menyimpan setiap tabel sebagai file pada disk dan entri dengan pola yang jelas dan memanipulasi data menggunakan alat linux yang dibangun seperti awk dan sed. untuk meningkatkan efisiensi, data yang sering diakses di-cache.
sumber
Jika MySQL menarik minat Anda, saya juga akan menyarankan halaman wiki ini , yang telah mendapat beberapa informasi tentang cara kerja MySQL. Juga, Anda mungkin ingin melihat Memahami MySQL Internal .
Anda mungkin juga mempertimbangkan untuk melihat antarmuka non-SQL untuk mesin Database Anda. Silakan lihat di Apache CouchDB . Apa yang Anda sebut, sistem database berorientasi dokumen.
Semoga berhasil!
sumber