Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pengarang Go rqlite memberitahu anda: Betapa pentingnya algoritma apabila membangunkan perisian pangkalan data!

Pengarang Go rqlite memberitahu anda: Betapa pentingnya algoritma apabila membangunkan perisian pangkalan data!

藏色散人
藏色散人ke hadapan
2022-01-22 09:19:495018semak imbas

Artikel ini diperkenalkan oleh ruangan tutorial golang tentang "Pengarang Go rqlite memberitahu anda: Betapa pentingnya algoritma semasa membangunkan perisian pangkalan data!" 》, saya harap ia dapat membantu rakan-rakan yang memerlukan!

Menulis program pangkalan data adalah pekerjaan yang mudah. Saya telah banyak terlibat dalam pembangunan pangkalan data sumber terbuka selama dua tahun yang lalu, dan pengaturcaraan pangkalan data mungkin merupakan projek yang paling memberi inspirasi yang boleh anda lakukan sebagai pembangun perisian.

Walau bagaimanapun, apa yang benar-benar mengejutkan ialah sikap saya terhadap pangkalan data telah berubah sejak 6 tahun lalu. Daripada tidak berminat pada awalnya, saya kini mula berfikir bahawa sistem pangkalan data adalah kemuncak kejuruteraan perisian.

Tidak tahu apa yang lebih baik

Untuk kebanyakan kerjaya saya, satu-satunya pengalaman saya dengan pangkalan data ialah membaca tentangnya. Biasanya dalam konteks yang membosankan - buka mana-mana buku teks sarjana muda pada pangkalan data dan anda akan melihat apa yang saya maksudkan. Biasanya anda akan melihat jadual berikut sebagai kes penggunaan biasa pangkalan data hubungan:

ID FIRST LAST TITLE DEPARTMENT
1 Robert Kelly Director Marketing
2 Tom Burke Representative Sales
3 John Smith Vice President Sales

Bolehkah anda membaca lebih banyak perkara yang membosankan? Jika ini semua tentang pangkalan data, saya tidak mahu ada kaitan dengannya. Apa gunanya? Perisian jauh lebih sejuk daripada ini, bukan? Jadi saya benar-benar mengelakkan apa-apa kaitan dengan pangkalan data untuk masa yang lama

Anda tidak akan pernah melupakan aplikasi CRUD pertama anda

2009, selepas bertahun-tahun menulis perisian terbenam, pemacu peranti Linux dan perisian rangkaian, saya mendapati diri saya mengetuai pasukan yang perlu membina sistem berasaskan web. Anda lihat, awan AWS telah tiba dan alamat MAC teknologi pelesenan berasaskan awan tidak lagi sah. Pasukan saya perlu membina portal pelesenan untuk perkakas perisian berasaskan EC2 baharu kami. Memandangkan kami mempunyai banyak pengalaman dengan Python, kami memilih Django, berjalan pada MySQL Sesuatu yang baru berlaku. Saya sebenarnya mula bekerja dengan pangkalan data.

Memandangkan aplikasi CRUD terus berjalan merentasi dataran negara kita, saya telah menyedari betapa pentingnya pangkalan data - dan betapa pentingnya ia kepada sistem kami. Jika kami kehilangan pangkalan data, pembangunan perisian kami adalah sia-sia. Jika pangkalan data merosakkan data, peranti pelanggan kami mungkin menjadi tidak berlesen dan rangkaian mereka akan berhenti berfungsi. Jika pangkalan data tidak berfungsi dengan baik, beribu-ribu orang akan terjejas serentak. Tetapi tiada satu pun perkara ini berlaku. Pangkalan data sentiasa berfungsi . Ia tidak pernah mengecewakan kita. Saya kagum.
Kemudian saya menemui kekangan utama asing, kekangan unik, integriti rujukan, indeks, (ingat, pada masa ini saya tidak tahu apa-apa tentang perkara ini) - pangkalan data boleh membantu saya dalam pelbagai cara untuk membina sistem yang lebih mantap. Saya akhirnya menyedari bahawa pangkalan data moden hebat - pangkalan data ialah perkara yang paling membosankan di dunia sehingga anda benar-benar perlu membina sistem daripadanya.

Anda juga tidak pernah melupakan sistem carian pertama anda

Menjelang 2012, saya mengetuai pasukan yang membina sistem pengindeksan dan carian besar berdasarkan pangkalan data nilai kunci yang besar, dengan elasticsearch pada terasnya . Ia membuka mata untuk melihat apa yang sistem seperti Elasticsearch boleh lakukan - teknologi yang dibina berdasarkan pengindeksan bertaraf dunia - walaupun dengan terabait data log di bawahnya.
Sekarang saya telah melihat walaupun pangkalan data dan sistem carian gagal, tetapi saya terpesona dengan teknologi pangkalan data. Menjelang 2014, saya menyertai pasukan kecil berdedikasi yang membangunkan teras [pangkalan data siri masa sumber terbuka] (github.com/influxdata/influxdb).

Algoritma yang saya pelajari sangat berguna Sangat penting

Hanya dalam pembangunan pangkalan data, analisis Big O benar-benar menjadi hidup. Pangkalan data adalah salah satu daripada beberapa aplikasi yang pengaturcara masih perlu menggelung, mengisih dan menapis berjuta-juta objek. Ini adalah salah satu daripada beberapa tempat di mana banyak bahan membosankan yang dipelajari dalam kelas CS adalah penting.

Ini tidak berlaku dengan banyak pembangunan perisian lain. Menulis firmware boot ROM? Tidak, algoritma tidak pernah penting kepada saya. Pemacu peranti penala? Perisian pengurusan peranti rangkaian? Hampir semua disiplin ini memerlukan kemahiran dan pengetahuan yang berbeza. Selalunya, saya hanya membincangkan kerumitan masa larian dalam temu bual.

Tetapi dengan pembangunan pangkalan data, ini semua berubah. Sungguh mengagumkan untuk melihat sistem mengembalikan hasil yang betul, tetapi hanya untuk sebahagian kecil daripada masa yang dilakukan sebelum ini disebabkan oleh perubahan dalam algoritma, dan melihatnya berlaku dalam kod anda, dalam sistem yang anda bina.


Prestasi juga penting

Terdapat kisah lama dalam perisian yang berlaku seperti ini: seorang pengaturcara menulis beberapa kod yang berjalan sepuluh kali lebih pantas daripada versi sebelumnya. Dia menunjukkannya, tetapi seseorang menunjukkan bahawa data yang dihasilkannya berbeza sedikit daripada data yang betul. "Tetapi ia sepuluh kali lebih pantas," kata pengaturcara itu. "Nah, jika ia tidak perlu betul, saya boleh membuat versi yang tidak mengambil ruang sama sekali dan berjalan dengan pantas tidak terhingga," jawab yang lain.

Kisah moral ini sentiasa memberi impak yang besar kepada saya. Menjadi betul sentiasa lebih penting daripada perkara lain. Memang betul. Tetapi ia juga membawa saya untuk percaya bahawa projek adalah bernilai semata-mata kerana ia menghasilkan hasil yang betul.


Dengan pangkalan data, ini tidak berlaku.

Prestasi bukan sekadar ciri. Ini adalah

permintaan
. Mereka yang sanggup membayar untuk pangkalan data sering berbuat demikian kerana mereka mempunyai jumlah data yang besar. Jika pangkalan data tidak berfungsi dengan baik dalam situasi ini—jika ia tidak mengembalikan hasil dengan cepat dan cekap—maka ia mungkin tidak berfungsi sama sekali.

Adakah anda fikir sistem penulisan adalah rumit?

Saya rasa perkara yang paling mengejutkan saya tentang membangunkan pangkalan data ialah betapa kompleksnya enjin pertanyaan. Saya mempunyai banyak pengalaman membina sistem yang menulis dan menyimpan data ke cakera. Membuat sistem ini berfungsi dengan baik boleh menjadi cabaran yang besar.
Tetapi kerumitan ini biasanya jauh lebih rendah daripada enjin pertanyaan. Sistem pertanyaan yang fleksibel - membina sistem dengan berkesan untuk menjawab soalan apabila anda tidak tahu apakah soalan itu - memerlukan pemikiran reka bentuk yang serius. Perancang pertanyaan mestilah sah. Sistem pertanyaan mesti menyokong banyak keperluan ortogon—penapisan mengikut dimensi tertentu, mengumpulkan mengikut dimensi lain, menggabungkan data daripada jadual yang berbeza—dan kadangkala menyokong data daripada sumber luaran. Akhir sekali, sistem pertanyaan mesti cekap dan berprestasi baik. Ini membawa kepada ketegangan antara abstraksi dan pengoptimuman dalam reka bentuk dan pelaksanaan, yang memerlukan kemahiran sebenar untuk mengurus dengan baik.

Dalam dunia nyata, ia mesti dikendalikan

Sebarang pangkalan data penting mesti menyokong operasi asas seperti sandaran, pemulihan, pengurusan pemecahan dan pemantauan.
Jika saya, sebagai pengendali yang serius, tidak boleh menyandarkan pangkalan data anda, saya tidak boleh menggunakannya, semudah itu. Tidak kira seberapa cepat pangkalan data menerima penulisan. Semasa pertanyaan, tidak kira betapa kecil jejak ingatannya. Jika saya tidak dapat melindungi data dalam pangkalan data daripada kegagalan di luar kawalan anda, pencipta pangkalan data, saya tidak akan dapat menjalankannya dengan selesa.
Sudah tentu, terdapat banyak cara untuk membuat sandaran pangkalan data tanpa kerjasama pangkalan data. Tetapi kaedah terbina dalam biasanya yang terbaik. Ini juga cadangan saya untuk rqlite v2.0 Jika saya mahu sesiapa menggunakan rqlite dengan serius, saya perlu menyelesaikan masalah dunia sebenar di mana sistem boleh gagal sepenuhnya dan ketinggalan data untuk masa yang lama.

Oleh itu, apabila mereka bentuk dan melaksanakan pangkalan data, bina sokongan operasi dari awal. Jadikan ia bahagian asas reka bentuk anda. Pengguna anda akan berterima kasih kerananya.

Jawapannya biasanya "ia bergantung"

Apabila anda mula bekerja dengan pangkalan data, terutamanya sebagai pengendali, anda sering bertanya soalan: bolehkah sistem Apakah indeks kadar? Seberapa cepat ia bertindak balas kepada pertanyaan? Berapa banyak ruang cakera yang saya perlukan? Seberapa besar serpihan boleh dan masih berfungsi? Bagaimana saya boleh mempercepatkannya? Semua bertanya tanpa sebarang keraguan. Saya pernah buat sendiri.
Mungkin anda boleh bercakap dengan pengaturcara pangkalan data dan bertanya soalan ini kepada mereka. Dan jawapan yang sering anda—mungkin pernah—dapat ialah: Itu terpulang kepada anda. Anda perlu menanda aras, anda perlu mengukur . Ini boleh menjengkelkan untuk didengar dan mungkin kelihatan seperti anda mengelak daripada tanggungjawab.

Tetapi bukan itu yang berlaku.
Sekarang, apabila saya mendengar soalan seperti ini, saya tersenyum. Terlalu naif.
Kadar pengindeksan mungkin bergantung pada saiz data, bukan hanya bilangan dokumen atau titik data. Ini mungkin bergantung pada pemprosesan kelompok, kekeruhan data, sama ada pangkalan data dikelompokkan, lajur dan medan mana dalam data diindeks, sama ada data baharu atau kemas kini kepada data sedia ada, mesin yang digunakan pangkalan data, RAM, prestasi IO, dan replikasi yang digunakan.
Pembolehubah yang mengawal prestasi tidak pernah berakhir.
Untuk pertanyaan, ia mungkin bergantung pada julat masa data siri masa. Ia bergantung pada bilangan rekod yang dipukul, bilangan medan yang ditanya, sama ada imbasan julat terlibat, sama ada data diindeks, jenis indeks yang digunakan, bilangan serpihan yang boleh diakses dan sama ada data itu setempat. dan ciri mesin. Adakah ia dalam stok? Adakah ia sedang menjalani penyelenggaraan? Adakah rangkaian sibuk?

Jadi jawapannya sentiasa, Terpulang. Pereka pangkalan data jujur. Mereka boleh mengetahui segala-galanya tentang sistem yang mereka bina dan masih tidak tahu jawapan kepada soalan anda.

Senarai Baldi Pengaturcaraan

Jika ada satu nasihat untuk pembangun yang ingin meningkatkan kemahiran pengaturcaraan mereka, ia adalah untuk menyertai pasukan pembangunan pangkalan data. Kemahiran pengaturcaraan saya telah meningkat dengan pesat kerana pembangunan pangkalan data - ia merupakan pengalaman pengekodan yang mengagumkan.

Alamat asal: https://www.philipotoole.com/what-i-learned-from-programming-a-database/

Alamat terjemahan: https://learnku .com/go/t/64605

Atas ialah kandungan terperinci Pengarang Go rqlite memberitahu anda: Betapa pentingnya algoritma apabila membangunkan perisian pangkalan data!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:learnku.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam