14 prekara sing dakkarepake sadurunge miwiti MongoDB

Terjemahan artikel disiapake ing wayah wengi wiwitan kursus "Database non-relasional".

14 prekara sing dakkarepake sadurunge miwiti MongoDB

Highlights:

  • Penting banget kanggo ngembangake skema sanajan iku opsional ing MongoDB.
  • Kajaba iku, indeks kudu cocog karo skema lan pola akses sampeyan.
  • Aja nggunakake obyek gedhe lan susunan gedhe.
  • Ati-ati karo setelan MongoDB, utamane babagan keamanan lan linuwih.
  • MongoDB ora duwe pangoptimal pitakon, mula sampeyan kudu ati-ati nalika nindakake operasi pitakon.

Aku wis nggarap database kanggo wektu sing suwe, nanging mung bubar nemokake MongoDB. Ana sawetara perkara sing dakkarepake sadurunge aku miwiti nggarap. Nalika wong wis duwe pengalaman ing lapangan tartamtu, dheweke duwe pangerten preconceived babagan database apa lan apa sing ditindakake. Kanthi pangarep-arep supaya luwih gampang dingerteni wong liya, aku nampilake dhaptar kesalahan umum.

Nggawe server MongoDB tanpa otentikasi

Sayange, MongoDB diinstal tanpa otentikasi kanthi standar. Kanggo stasiun kerja sing diakses sacara lokal, praktik iki normal. Nanging wiwit MongoDB minangka sistem multi-pangguna sing seneng nggunakake memori sing akeh, bakal luwih apik yen sampeyan nyelehake ing server kanthi RAM okehe, sanajan sampeyan mung nggunakake kanggo pangembangan. Nginstal ing server liwat port standar bisa dadi masalah, utamane yen kode javascript bisa dieksekusi ing panyuwunan (contone, $where minangka gagasan kanggo injeksi).

Ana sawetara cara otentikasi, nanging sing paling gampang yaiku nyetel ID pangguna / sandhi. Gunakake ide iki nalika sampeyan mikir babagan otentikasi sing adhedhasar LDAP. Nalika nerangake keamanan, MongoDB kudu terus dianyari, lan log kudu dicenthang kanggo akses sing ora sah. Contone, aku seneng milih port sing beda minangka port standar.

Aja lali kanggo naleni lumahing serangan kanggo MongoDB

Dhaptar Priksa Keamanan MongoDB ngandhut tips apik kanggo ngurangi risiko gangguan jaringan lan bocor data. Gampang kanggo mbusak lan ujar manawa server pangembangan ora mbutuhake keamanan sing dhuwur. Nanging, ora gampang lan iki ditrapake kanggo kabeh server MongoDB. Utamane, yen ora ana alesan sing kuat kanggo nggunakake mapReduce, group utawa $endi, sampeyan kudu mateni panggunaan kode sewenang-wenang ing JavaScript kanthi nulis ing file konfigurasi javascriptEnabled:false. Wiwit file data ora ndhelik ing MongoDB standar, iku ndadekake pangertèn kanggo mbukak MongoDB karo Panganggo khusus, sing nduweni akses lengkap menyang file, mung akses winates lan kemampuan kanggo nggunakake kontrol akses file sistem operasi dhewe.

Kesalahan nalika ngembangake sirkuit

MongoDB ora nggunakake skema. Nanging iki ora ateges skema kasebut ora dibutuhake. Yen sampeyan mung pengin nyimpen dokumen tanpa pola sing konsisten, nyimpen bisa cepet lan gampang, nanging njupuk maneh mengko bisa dadi angel. angel banget.

Artikel klasik"6 эмпиричСских ΠΏΡ€Π°Π²ΠΈΠ» для проСктирования схСм MongoDBΒ» Iku worth a diwaca, lan fitur kaya Skema Explorer ing alat pihak katelu Studio 3T, iku worth nggunakake kanggo mriksa biasa sirkuit.

Aja lali urutan urutan

Lali urutan urutan bisa nyebabake frustasi lan mbuang wektu luwih akeh tinimbang konfigurasi sing ora bener. Kanthi standar nggunakake MongoBD urutan binar. Nanging ora mungkin migunani kanggo sapa wae. Sensitif huruf cilik, aksen-sensitif, jinis biner dianggep minangka anakronisme penasaran bebarengan karo manik-manik, kaftan lan kumis kriting ing taun 80-an ing abad pungkasan. Saiki panggunaane ora bisa diapura. Ing urip nyata, "sepeda motor" padha karo "Motor". Lan "Inggris" lan "Inggris" iku panggonan sing padha. Huruf cilik mung padha karo huruf kapital. Lan aja njaluk aku miwiti ngurutake diakritik. Nalika nggawe database ing MongoDB, gunakake collation ora sensitif aksen lan ndhaftar, sing cocog karo basa lan budaya pengguna sistem. Iki bakal nggawe telusuran liwat data string luwih gampang.

Nggawe koleksi kanthi dokumen gedhe

MongoDB seneng dadi tuan rumah dokumen gedhe nganti 16MB ing koleksi, lan GridFS Dirancang kanggo dokumen gedhe sing luwih gedhe tinimbang 16 MB. Nanging mung amarga dokumen gedhe bisa diselehake ing kono, ora apik kanggo nyimpen ing kono. MongoDB bakal paling apik yen sampeyan nyimpen dokumen individu sing ukurane sawetara kilobyte, dianggep kaya baris ing tabel SQL sing amba. Dokumen gedhe bakal dadi sumber masalah produktivitas.

Nggawe dokumen kanthi susunan gedhe

Dokumen bisa ngemot array. Paling apik yen jumlah unsur ing array adoh saka nomer papat digit. Yen unsur ditambahake menyang larik kanthi kerep, bakal ngluwihi dokumen sing ngemot lan kudu ngalih, sing tegese bakal perlu nganyari indeks uga. Nalika ngindeks maneh dokumen kanthi larik gedhe, indeks kasebut asring ditimpa, amarga ana cathetan, sing nyimpen indeks. Re-indeksasi iki uga dumadi nalika dokumen dilebokake utawa dibusak.

MongoDB ana sing diarani "faktor pengisian", sing nyedhiyakake papan kanggo tuwuh dokumen kanggo nyilikake masalah iki.
Sampeyan bisa uga mikir yen sampeyan bisa nindakake tanpa indeksasi array. Sayange, kekurangan indeks bisa nyebabake sampeyan duwe masalah liyane. Wiwit dokumen dipindai saka wiwitan nganti rampung, nggoleki unsur ing pungkasan larik bakal luwih suwe, lan umume operasi sing ana gandhengane karo dokumen kasebut bakal dadi alon-alon.

Aja lali yen urutan tahapan ing agregasi penting

Ing sistem basis data kanthi pangoptimal pitakon, pitakon sing sampeyan tulis minangka panjelasan babagan apa sing sampeyan pengin entuk, dudu carane entuk. Mekanisme iki dianggo kanthi analogi karo pesenan ing restoran: biasane sampeyan mung pesen sajian, lan ora menehi instruksi rinci marang juru masak.

Ing MongoDB, sampeyan nglatih juru masak. Contone, sampeyan kudu nggawe manawa data liwat reduce minangka awal sabisa ing pipo nggunakake $match ΠΈ $project, lan ngurutake mung sawise reduce, lan telusuran kelakon ing urutan sing dikarepake. Duwe pangoptimal pitakon sing ngilangi karya sing ora perlu, ngurutake langkah kanthi optimal, lan milih jinis gabung bisa ngrusak sampeyan. Kanthi MongoDB, sampeyan duwe kontrol luwih akeh kanthi biaya sing gampang.

Piranti kaya Studio 3T Kab bakal nyederhanakake pambangunan pitakon agregasi ing MongoDB. Fitur Editor Aggregation ngidini sampeyan ngetrapake pernyataan pipa siji-sijine, lan mriksa data input lan output ing saben tahapan kanggo nyederhanakake debugging.

Nggunakake Rekaman Cepet

Aja nyetel pilihan nulis MongoDB kanthi kacepetan dhuwur nanging linuwih. Mode iki "file-lan-lali" misale jek cepet amarga printah bali sadurunge nulis dumadi. Yen sistem crash sadurunge data ditulis menyang disk, iku bakal ilang lan mungkasi munggah ing negara inconsistent. Untunge, MongoDB 64-bit wis ngaktifake logging.

Mesin panyimpenan MMAPv1 lan WiredTiger nggunakake logging kanggo nyegah iki, sanajan WiredTiger bisa pulih nganti konsisten pungkasan. titik kontrol, yen logging dipateni.

Journaling mesthekake yen database ing negara konsisten sawise Recovery lan nahan kabeh data nganti ditulis ing log. Frekuensi rekaman dikonfigurasi nggunakake parameter commitIntervalMs.

Kanggo mesthekake entri kasebut, priksa manawa logging diaktifake ing file konfigurasi (storage.journal.enabled), lan frekuensi rekaman cocog karo jumlah informasi sing bisa ilang.

Ngurutake tanpa indeks

Nalika nggoleki lan nglumpukake, asring perlu ngurutake data. Muga-muga iki rampung ing salah sawijining tahap pungkasan, sawise nyaring asil kanggo nyuda jumlah data sing diurutake. Lan sanajan ing kasus iki, sampeyan kudu ngurutake indeks. Sampeyan bisa nggunakake indeks siji utawa senyawa.

Yen ora ana indeks sing cocog, MongoDB bakal nindakake tanpa. Ana watesan memori 32 MB ing ukuran total kabeh dokumen ing operasi ngurutake, lan yen MongoDB tekan watesan iki, banjur bakal mbuwang kesalahan utawa bali пустой Π½Π°Π±ΠΎΡ€ записСй.

Telusuri tanpa dhukungan indeks

Panelusuran pitakon nindakake fungsi sing padha karo operasi JOIN ing SQL. Kanggo bisa paling apik, padha kudu indeks saka Nilai saka tombol digunakake minangka kunci asing. Iki ora ketok amarga panggunaan ora dibayangke ing explain(). Indeks kasebut minangka tambahan kanggo indeks sing ditulis ing explain(), sing banjur digunakake dening operator pipa $match ΠΈ $sort, nalika ketemu ing awal pipa. Indeks saiki bisa nutupi tahap apa wae pipa agregasi.

Milih metu saka nggunakake multi-nganyari

Cara db.collection.update() digunakake kanggo ngganti bagean saka dokumen sing wis ana utawa kabeh dokumen, nganti panggantos lengkap, gumantung saka parameter sing sampeyan nemtokake update. Sing ora jelas yaiku ora bakal ngolah kabeh dokumen ing koleksi kasebut kajaba sampeyan nyetel pilihan kasebut multi kanggo nganyari kabeh dokumen sing cocog karo kritΓ©ria panyuwunan.

Aja lali pentinge urutan tombol ing tabel hash

Ing JSON, obyek kasusun saka koleksi unordered ukuran nol utawa luwih jeneng / pasangan nilai, ngendi jeneng iku senar lan nilai iku senar, nomer, boolean, null, obyek, utawa array.

Sayange, BSON menehi akeh penekanan ing urutan nalika nggoleki. Ing MongoDB, urutan kunci ing obyek sing dibangun prakara, i.e. { firstname: "Phil", surname: "factor" } - iki ora padha { { surname: "factor", firstname: "Phil" }. Tegese, sampeyan kudu nyimpen urutan pasangan jeneng/nilai ing dokumen sampeyan yen sampeyan pengin yakin nemokake.

Aja bingung "Batal" ΠΈ "ora ditetepake"

Nilai "ora ditetepake" ora tau bener ing JSON, miturut standar resmi JSON (ECMA-404 Bagean 5), sanajan digunakake ing JavaScript. Menapa malih, kanggo BSON iku lungse lan diowahi kanggo $null, sing ora tansah dadi solusi sing apik. Aja nggunakake "ora ditetepake" ing MongoDB.

Gunakake $limit() tanpa $sort()

Cukup asring nalika sampeyan lagi berkembang ing MongoDB, migunani kanggo ndeleng conto asil sing bakal bali saka pitakon utawa agregasi. Kanggo tugas iki sampeyan kudu $limit(), nanging mesthine ora ana ing kode pungkasan kajaba sampeyan nggunakake sadurunge $sort. Mekanik iki perlu amarga yen ora, sampeyan ora bisa njamin urutan asil, lan sampeyan ora bisa andal ndeleng data. Ing sisih ndhuwur asil sampeyan bakal entuk macem-macem entri gumantung saka ngurutake. Kanggo bisa dipercaya, pitakon lan agregasi kudu deterministik, yaiku, ngasilake asil sing padha saben dieksekusi. Kode sing ngemot $limit(), nanging ora $sort, ora bakal deterministik lan bisa nyebabake kesalahan sing bakal angel dilacak.

kesimpulan

Siji-sijine cara kanggo kuciwa karo MongoDB yaiku mbandhingake langsung karo jinis database liyane, kayata DBMS, utawa nggunakake adhedhasar pangarepan tartamtu. Kayane mbandingake jeruk karo garpu. Sistem basis data nyedhiyakake tujuan tartamtu. Sing paling apik kanggo ngerti lan ngormati prabΓ©dan kasebut dhewe. Iku bakal isin kanggo meksa pangembang MongoDB liwat dalan sing meksa wong mudhun path DBMS. Aku pengin ndeleng cara anyar lan menarik kanggo ngatasi masalah lawas, kayata njamin integritas data lan nggawe sistem data sing tahan kanggo kegagalan lan serangan angkoro.

Introduksi MongoDB babagan transaksialitas ACID ing versi 4.0 minangka conto sing apik kanggo ngenalake perbaikan penting kanthi cara sing inovatif. Transaksi multi-dokumen lan multi-statement saiki dadi atom. Sampeyan uga bisa nyetel wektu sing dibutuhake kanggo entuk kunci lan mungkasi transaksi sing macet, uga ngganti tingkat isolasi.

14 prekara sing dakkarepake sadurunge miwiti MongoDB

Waca liyane:

Source: www.habr.com

Add a comment