Saya perlu mempelajari cara kerja database agar dapat menggunakannya secara lebih efisien, dan cara belajar saya adalah dengan melakukannya.
Saya ingin membuat sistem basis data saya sendiri. Saya tidak bermaksud membuat pseudo-database yang akan menggunakan kueri untuk mengurai file; ini hanya akan menjadi antarmuka sistem file dengan bahasa permintaan. Saya berbicara tentang struktur aktual dari mesin basis data. Dan karena apa yang ada dalam pikiran saya bukanlah relasional atau berorientasi dokumen ("berorientasi simpul", jika itu ada), saya akan membutuhkan sumber daya apa saja untuk abstrak dan tingkat setinggi mungkin.
Jadi bagaimana cara saya membuat itu? Sumber daya / tutorial / buku apa yang dapat saya baca untuk mengerti?
Bahasa tidak menjadi masalah sedikitpun. Idealnya, kode tersebut adalah pseudo-code untuk menggambarkan konsep, tidak terikat pada bahasa tertentu, tetapi apa pun bisa dilakukan. Saya tidak dapat menemukan apa pun tentang masalah ini di google (karena saya sangat buta huruf pada subjek, mungkin saya tidak memasukkan pencarian yang tepat).
Jika sumber daya seperti itu tidak tersedia, maka saya kira sesuatu tentang cara membuat klien setidaknya akan menjadi langkah ke arah yang benar.
sumber
I studied open-source DBs, but their codebase is too huge
: Jika sesuatu seperti redis atau flockdb terlalu besar untuk Anda baca, saya tidak melihat bagaimana Anda akan mengatasi penulisan atau memiliki database.Jawaban:
Mulai di sini. Ketika berhadapan dengan aplikasi yang kompleks seperti database (bahkan database sederhana adalah aplikasi yang kompleks), Anda harus terbiasa dengan sejarah domain dan terminologi yang tepat dan setidaknya memiliki ide arsitektur tingkat tinggi. Anda bisa mulai dari artikel Wikipedia tentang Basis Data . Menghabiskan beberapa hari membaca semua artikel tentang konsep terkait dan berbagai jenis database.
Selanjutnya, Anda memilih Relational atau NoSQl. Jika Anda memilih NoSQL, Anda harus memilih satu jenis NoSQL. Itu sangat penting, Anda tidak akan menemukan dokumen arsitektur yang membahas semua keluarga basis data yang berbeda. Tidak masalah yang mana yang Anda pilih, cukup pilih yang mana dan pilih saja.
Ya ya (sayangnya), karena setelah Anda memilih keluarga basis data, Anda harus mulai mengeksplorasi kode dari basis data sumber terbuka dari keluarga itu. Ada beberapa pedoman umum tentang apa yang harus dicari:
Beberapa contoh yang sesuai:
Dapatkan sumbernya, kompilasi dan mainkan. Anda tidak harus mengirimkan tambalan atau apa pun yang disukai, cukup jelajahi kodenya dan buat perubahan kecil di sana-sini untuk melihat apa yang terjadi. Ini adalah proses tambahan, semakin Anda bermain-main dengannya semakin mudah untuk memahami apa yang dilakukan kode. Jika proyek pertama yang Anda pilih tampaknya sangat sulit untuk dipahami, lanjutkan ke yang berikutnya.
Pilihan hebat lainnya adalah berkonsentrasi pada pembuatan mesin untuk MySQL, seperti yang disarankan @NB dalam jawaban sebelumnya .
Jika Anda mencapai titik di mana Anda dapat melakukan sesuatu yang berguna dengan basis kode, terlibat dalam komunitas proyek, itulah cara termudah untuk menemukan sumber daya yang lebih rinci tentang konsep-konsep yang terlibat.
Dan akhirnya, mulailah mengerjakan basis data Anda. Pada awalnya Anda hanya bisa menulis klon yang sangat diperkecil dari kode yang telah Anda jelajahi. Tidak harus asli, beberapa proyek besar dimulai sebagai klon atau garpu.
Ada beberapa buku:
Dan beberapa ratus lainnya, ditambah segudang makalah akademis yang dapat Anda lacak dengan mudah melalui Google. Anda perlu menentukan apa yang ingin Anda lakukan terlebih dahulu, dan kemudian mencari buku. Terlibat dengan komunitas sesama penulis basis data juga akan membantu Anda mempersempit daftar buku dan mungkin mendapatkan saran yang jauh lebih baik daripada yang di atas.
Semoga berhasil! Saya mengharapkan komentar dengan tautan ke repositori Anda setelah selesai. Dan jika Anda belum pernah selesai, pastikan Anda meninggalkan komentar yang mengingatkan saya bahwa saya masih belum menyelesaikan kompilator yang saya mulai tulis pada tahun 2001.
sumber
I'm expecting a comment with a link to your repository when you're done
: pasti! Terima kasih sekali lagi, untuk Anda dan semua orang, ini benar-benar menggembirakan.Anda harus melakukannya dan berhenti berpikir terlalu banyak. Menikmati proses belajar dan antusiasme adalah hadiah.
Bertanya kepada orang lain apakah itu ide yang bagus tentu bukan strategi yang baik . Jika saya mendengarkan semua katak, saya masih akan bekerja di Ikea hari ini mendorong kereta belanja dari parkir ke stasiun.
Anda tidak perlu membenarkan diri sendiri seperti yang dilakukan Ayende dalam posting yang menarik itu . Pertanyaannya adalah:
Jika Anda menikmati prosesnya, jangan khawatir tentang tujuannya, Anda sudah menang.
sumber
"(" berorientasi simpul ", jika itu ada)". - Ini mungkin mengapa Anda tidak menemukan banyak!
Selami versi 0.1 dan lihat di mana Anda dapatkan. Anda dapat belajar lebih banyak dari mencoba menghasilkan apa yang Anda inginkan dari menanyakan apa yang "harus" Anda lakukan. Berikan beberapa hari lalu tinjau dari mana Anda mendapatkannya.
Sekitar 18 tahun yang lalu saya menulis sistem basis data dasar (untuk kesenangan, mencari angka) dengan indeks btree dan belajar banyak sekali.
sumber
MySQL memiliki struktur mesin penyimpanan pluggable, mungkin ide untuk memeriksa bagaimana mesin dibuat bekerja untuk MySQL.
sumber
Kedengarannya seperti proyek yang hebat. Tampaknya tujuan Anda bukan untuk membuat perangkat lunak produksi, tetapi untuk mempelajari tentang basis data dan proses menciptakan sistem basis data.
Saya tidak berpikir Anda perlu melakukan banyak riset. Sepertinya tujuannya adalah untuk mendapatkan pengalaman tentang apa yang terjadi dalam menciptakan sistem basis data berbasis simpul.
Inilah cara saya memulai:
Setelah dasar-dasar ini berfungsi, Anda akan memiliki lebih banyak wawasan tentang apa yang sulit atau bermasalah. Kemudian Anda dapat melakukan riset tentang hal itu, menemukan beberapa perbaikan, dan mengintegrasikannya.
sumber
Menulis basis data Anda sendiri "untuk memahami cara kerjanya" adalah satu-satunya alasan bagus untuk melakukannya (karena basis data gila sulit dilakukan dengan benar, dan sulit dibuktikan dengan benar). Anda gila, tetapi dengan cara yang baik!
Untuk melihat bagaimana hal itu dilakukan, saya sarankan melihat SQLite. Sumber SQLite hanya sekitar 1.3MB terkompresi, dan ini merupakan basis data transaksional yang sepenuhnya sesuai ACID. Ini juga domain publik dan penulis utama adalah orang baik yang saya yakin akan dengan senang hati menjawab pertanyaan Anda. (Saya pikir bit paling sulit datang dalam cara untuk benar-benar melakukan informasi ke disk; membujuk OS dan perangkat keras untuk berhenti berbohong dan benar-benar menulis transaksi SEKARANG sangat sulit dan mengapa saya sangat senang saya tidak perlu menulis DB.)
sumber
Beli buku:
http://www.springer.com/computer/database+management+%26+information+retrieval/book/978-1-84628-394-9
Indeks adalah aspek terpenting dari basis data saat ini. Pelajari alternatif yang ada seperti pohon biner.
Baca juga tentang produk kartesius yang merupakan cara untuk menghitung seberapa rumit gabungannya.
sumber
Pelajari aljabar relasional.
Temukan mesin DB kecil, pelajari sumbernya.
Nggak. Anda perlu belajar cara menggunakan database secara efisien. Anda mungkin menjadi pengemudi yang lebih baik jika Anda memahami cara mobil Anda bekerja, tetapi Anda akan menjadi pengemudi yang jauh lebih baik jika Anda benar-benar fokus pada mengemudi.
Ambil rute tradisional: ambil kursus, baca buku, peer review, ajukan pertanyaan, gunakan indeks luke .
sumber
Learn relational algebra.
Dengan asumsi op tertarik pada basis data relasional tentu saja ...