


Pengarang Go rqlite memberitahu anda: Betapa pentingnya algoritma apabila membangunkan perisian pangkalan data!
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.
permintaan 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. Sebarang pangkalan data penting mesti menyokong operasi asas seperti sandaran, pemulihan, pengurusan pemecahan dan pemantauan. 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. 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. Tetapi bukan itu yang berlaku. 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. 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
. 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?
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
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. Jawapannya biasanya "ia bergantung"
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.
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? Senarai Baldi Pengaturcaraan
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!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Membaca dan menulis fail dengan selamat dalam Go adalah penting. Garis panduan termasuk: Menyemak kebenaran fail Menutup fail menggunakan tangguh Mengesahkan laluan fail Menggunakan tamat masa konteks Mengikuti garis panduan ini memastikan keselamatan data anda dan keteguhan aplikasi anda.

Bagaimana untuk mengkonfigurasi pengumpulan sambungan untuk sambungan pangkalan data Go? Gunakan jenis DB dalam pakej pangkalan data/sql untuk membuat sambungan pangkalan data untuk mengawal bilangan maksimum sambungan serentak;

Data JSON boleh disimpan ke dalam pangkalan data MySQL dengan menggunakan perpustakaan gjson atau fungsi json.Unmarshal. Pustaka gjson menyediakan kaedah kemudahan untuk menghuraikan medan JSON dan fungsi json.Unmarshal memerlukan penuding jenis sasaran kepada data JSON unmarshal. Kedua-dua kaedah memerlukan penyediaan pernyataan SQL dan melaksanakan operasi sisipan untuk mengekalkan data ke dalam pangkalan data.

Perbezaan antara rangka kerja GoLang dan rangka kerja Go ditunjukkan dalam seni bina dalaman dan ciri luaran. Rangka kerja GoLang adalah berdasarkan perpustakaan standard Go dan meluaskan fungsinya, manakala rangka kerja Go terdiri daripada perpustakaan bebas untuk mencapai tujuan tertentu. Rangka kerja GoLang lebih fleksibel dan rangka kerja Go lebih mudah digunakan. Rangka kerja GoLang mempunyai sedikit kelebihan dalam prestasi dan rangka kerja Go lebih berskala. Kes: gin-gonic (rangka Go) digunakan untuk membina REST API, manakala Echo (rangka kerja GoLang) digunakan untuk membina aplikasi web.

Laluan Pembelajaran Backend: Perjalanan Eksplorasi dari Front-End ke Back-End sebagai pemula back-end yang berubah dari pembangunan front-end, anda sudah mempunyai asas Nodejs, ...

Pergi bahasa berfungsi dengan baik dalam membina sistem yang cekap dan berskala. Kelebihannya termasuk: 1. Prestasi Tinggi: Disusun ke dalam Kod Mesin, Kelajuan Berjalan Cepat; 2. Pengaturcaraan serentak: Memudahkan multitasking melalui goroutine dan saluran; 3. Kesederhanaan: sintaks ringkas, mengurangkan kos pembelajaran dan penyelenggaraan; 4. Cross-Platform: Menyokong kompilasi silang platform, penggunaan mudah.

Perpustakaan mana yang dibangunkan oleh syarikat besar atau projek sumber terbuka yang terkenal? Semasa pengaturcaraan di GO, pemaju sering menghadapi beberapa keperluan biasa, ...

Dalam sistem Debian, giliran log Go biasanya bergantung pada perpustakaan pihak ketiga, dan bukannya ciri-ciri yang datang dengan perpustakaan standard GO. Lumberjack adalah pilihan yang biasa digunakan. Ia boleh digunakan dengan pelbagai kerangka log (seperti ZAP dan Logrus) untuk merealisasikan putaran automatik dan pemampatan fail log. Berikut adalah konfigurasi sampel menggunakan perpustakaan Lumberjack dan ZAP: Packagemainimport ("gopkg.in/natefinch/lumberjack.v2" "go.uber.org/zap" "go.uber.org/zap/zapcor
