14 hal anu kuring hoyong terang sateuacan ngamimitian sareng MongoDB

Tarjamahan tina artikel ieu disiapkeun dina wengi mimiti kursus "Basis data non-relasional".

14 hal anu kuring hoyong terang sateuacan ngamimitian sareng MongoDB

Highlights:

  • Penting pisan pikeun ngembangkeun skéma sanajan éta opsional dina MongoDB.
  • Kitu ogé, indéks kedah cocog sareng pola skéma sareng aksés anjeun.
  • Hindarkeun ngagunakeun objék badag tur arrays badag.
  • Ati-ati dina setélan MongoDB, khususna ngeunaan kaamanan sareng reliabilitas.
  • MongoDB teu gaduh pangoptimal pamundut, janten anjeun kedah ati-ati nalika ngalaksanakeun operasi pamundut.

Abdi parantos lami damel sareng pangkalan data, tapi nembé mendakan MongoDB. Aya sababaraha hal anu kuring hoyong terang sateuacan kuring ngamimitian damel sareng éta. Lamun hiji jalma geus boga pangalaman dina widang nu tangtu, maranéhanana geus preconceived anggapan ngeunaan naon database jeung naon maranehna ngalakukeun. Dina harepan sangkan leuwih gampang pikeun batur ngartos, abdi nampilkeun daptar kasalahan umum.

Nyiptakeun server MongoDB tanpa auténtikasi

Hanjakalna, MongoDB dipasang tanpa auténtikasi sacara standar. Pikeun workstation diaksés sacara lokal, prakték ieu normal. Tapi saprak MongoDB mangrupakeun sistem multi-pamaké anu resep ngagunakeun jumlah badag memori, eta bakal leuwih hadé mun anjeun nempatkeun eta dina server kalawan saloba RAM-gancang, malah mun anjeun ngan bade nganggo eta pikeun pangwangunan. Masang dina server via port standar tiasa janten masalah, khususna upami kode JavaScript tiasa dilaksanakeun dina pamundut (contona, $where salaku gagasan pikeun suntikan).

Aya sababaraha métode auténtikasi, tapi nu panggampangna nyaéta pikeun nyetél ID pamaké / sandi. Anggo ide ieu nalika anjeun mikirkeun auténtikasi anu mewah dumasar kana LDAP. Lamun datang ka kaamanan, MongoDB kudu terus diropéa, sarta log kudu salawasna dipariksa pikeun aksés nu teu sah. Contona, kuring resep milih port béda salaku port standar.

Tong hilap ngabeungkeut permukaan serangan ka MongoDB

Daptar pariksa Kaamanan MongoDB ngandung tips alus pikeun ngurangan résiko intrusion jaringan sarta leakage data. Gampang pikeun nyikat sareng nyarios yén server pangembangan henteu peryogi tingkat kaamanan anu luhur. Nanging, éta henteu saderhana sareng ieu manglaku ka sadaya server MongoDB. Khususna, upami teu aya alesan anu kuat pikeun dianggo mapReduce, group atawa $dimana, Anjeun kudu nganonaktipkeun pamakéan kode sawenang dina JavaScript ku nulis dina file konfigurasi javascriptEnabled:false. Kusabab file data henteu énkripsi dina MongoDB standar, masuk akal pikeun ngajalankeun MongoDB sareng Pamaké Dedicated, nu boga aksés pinuh ka file, kalawan aksés kawates ngan ka dinya tur kamampuhan pikeun ngagunakeun kontrol aksés file sistem operasi urang sorangan.

Kasalahan nalika ngembangkeun sirkuit

MongoDB henteu nganggo skéma. Tapi ieu lain hartosna yén skéma teu diperlukeun. Upami anjeun ngan ukur hoyong nyimpen dokumén tanpa pola anu konsisten, nyimpen éta tiasa gancang sareng gampang, tapi nyandak deui engké tiasa sesah. damn teuas.

Artikel klasik "6 Aturan Jempol pikeun Desain Skéma MongoDB" Éta patut dibaca a, sarta fitur kawas Skéma Explorer dina alat pihak-katilu Studio 3T, éta patut ngagunakeun pikeun cék rutin sirkuit.

Ulah hilap urutan urut

Hilap urutan sortir tiasa nyababkeun langkung frustasi sareng miceunan waktos langkung seueur tibatan konfigurasi anu salah. Sacara standar ngagunakeun MongoBD diurutkeun binér. Tapi sigana moal aya mangpaatna pikeun saha waé. Kasus-sénsitip, aksen-sénsitip, sorts binér dianggap anakronisme panasaran sapanjang kalawan manik, caftans jeung kumis Curly deui dina 80s abad panungtungan. Ayeuna pamakéan maranéhanana geus unforgivable. Dina kahirupan nyata, "motor" sarua jeung "Motor". Sareng "Inggris" sareng "Inggris" mangrupikeun tempat anu sami. Huruf leutik ngan saukur hurup ageung sami sareng hurup kapital. Sareng entong ngamimitian kuring nyortir diakritik. Nalika nyieun database di MongoDB, make collation accent-insensitive jeung ngadaptar, nu luyu jeung basa jeung budaya pamaké sistem. Ieu bakal ngajantenkeun milarian data string langkung gampang.

Jieun koléksi sareng dokumén ageung

MongoDB bagja janten host dokumén ageung dugi ka 16MB dina koleksi, sareng GridFS Dirancang pikeun dokumén badag leuwih badag batan 16 MB. Tapi ngan kusabab dokumén badag bisa ditempatkeun di dinya, nyimpen aranjeunna aya teu mangrupakeun ide nu sae. MongoDB bakal dianggo pangalusna lamun nyimpen dokumén individu anu ukuranana sababaraha kilobytes, ngubaran eta leuwih kawas baris dina tabel SQL lega. Dokumén ageung bakal janten sumber masalah produktivitas.

Nyieun dokumén kalawan arrays badag

Dokumén bisa ngandung arrays. Hadé pisan mun éta jumlah elemen dina Asép Sunandar Sunarya jauh ti angka opat-angka. Upami elemen sering ditambahkeun kana arrays, éta bakal ngalegaan dokumén anu ngandung éta sareng kedahna pindah, nu hartina bakal diperlukeun update indexes teuing. Nalika ngindeks ulang dokumén kalayan sajumlah ageung, indéks bakal sering ditimpa, sabab aya catetan, nu nyimpen indéks na. Indéks ulang ieu ogé lumangsung nalika dokumén diselapkeun atanapi dihapus.

MongoDB ngagaduhan anu disebut "faktor eusian", nu nyadiakeun rohangan pikeun dokumén tumuwuh pikeun ngaleutikan masalah ieu.
Anjeun panginten tiasa mikir yén anjeun tiasa ngalakukeun tanpa indexing Asép Sunandar Sunarya. Hanjakalna, kurangna indéks tiasa nyababkeun anjeun ngagaduhan masalah anu sanés. Kusabab dokumén diseken ti mimiti nepi ka rengse, neangan elemen dina tungtung array bakal nyandak leuwih lila, sarta lolobana operasi pakait sareng dokumen ieu bakal lalaunan.

Tong hilap yén urutan tahapan dina agrégat penting

Dina sistem database sareng pangoptimal pamundut, patarosan anu anjeun tulis mangrupikeun panjelasan naon anu anjeun pikahoyong, sanés kumaha kéngingkeun éta. Mékanisme ieu dianggo ku analogi sareng pesenan di réstoran: biasana anjeun ngan saukur mesen piring, sareng henteu masihan petunjuk anu lengkep ka juru masak.

Dina MongoDB, anjeun ngalatih juru masak. Contona, Anjeun kudu mastikeun yén data ngaliwatan reduce salaku awal mungkin dina pipa ngagunakeun $match и $project, sarta asihan lumangsung ngan sanggeus reduce, sarta yén pilarian lumangsung dina persis urutan rék. Ngabogaan pangoptimal pamundut anu ngaleungitkeun padamelan anu teu perlu, sacara optimal ngaruntuykeun léngkah, sareng milih jinis gabung tiasa ngarusak anjeun. Kalayan MongoDB, anjeun gaduh langkung kontrol dina biaya genah.

Alat sapertos Studio 3T bakal simplify pangwangunan queries aggregation di MongoDB. Fitur Editor Aggregation ngidinan Anjeun pikeun nerapkeun pernyataan pipeline hiji tahap dina hiji waktu, sarta mariksa data input jeung kaluaran dina unggal tahap pikeun simplify debugging.

Ngagunakeun Rékam Gancang

Henteu pernah nyetél pilihan nyerat MongoDB pikeun gaduh kacepetan anu luhur tapi réliabilitas rendah. Mode ieu "file-jeung-hilap" sigana gancang sabab paréntah dipulangkeun sateuacan nyerat lumangsung. Lamun sistem ngadat saméméh data ditulis kana disk, éta bakal leungit tur mungkas nepi dina kaayaan inconsistent. Kabeneran, 64-bit MongoDB parantos logging diaktipkeun.

Mesin panyimpen MMAPv1 sareng WiredTiger nganggo logging pikeun nyegah ieu, sanaos WiredTiger tiasa pulih dugi ka konsisten terakhir. titik kontrol, upami logging ditumpurkeun.

Journaling ensures yén database aya dina kaayaan konsisten sanggeus recovery sarta nahan sakabeh data nepika ditulis ka jurnal. Frékuénsi rekaman dikonpigurasi nganggo parameter commitIntervalMs.

Pikeun mastikeun éntri, pastikeun logging diaktipkeun dina file konfigurasi (storage.journal.enabled), sarta frékuénsi rekaman pakait jeung jumlah informasi nu bisa mampuh leungit.

Asihan tanpa indéks

Nalika milarian sareng ngahijikeun, sering aya kabutuhan pikeun nyortir data. Hayu urang ngarepkeun ieu dilakukeun dina salah sahiji tahap ahir, saatos nyaring hasilna pikeun ngirangan jumlah data anu diurutkeun. Komo dina hal ieu, pikeun asihan anjeun bakal butuh indéks. Anjeun tiasa make indéks tunggal atawa sanyawa.

Upami teu aya indéks anu cocog, MongoDB bakal ngalakukeun tanpa éta. Aya wates mémori 32 MB dina ukuran total sadaya dokumén dina operasi asihan, sareng upami MongoDB ngahontal wates ieu, éta bakal ngalungkeun kasalahan atanapi uih deui recordset kosong.

Pilarian tanpa rojongan indéks

Pilarian queries ngalakukeun fungsi nu sarupa jeung operasi JOIN di SQL. Pikeun damel anu saé, aranjeunna peryogi indéks nilai konci anu dianggo salaku konci asing. Ieu teu atra sabab pamakéan teu reflected di explain(). Indéks sapertos kitu salian ti indéks anu ditulis dina explain(), anu dina gilirannana dipaké ku operator pipa $match и $sort, nalika aranjeunna papanggih di awal pipa. Indexes ayeuna bisa nutupan sagala tahapan pipa agrégasi.

Milih kaluar tina ngagunakeun multi-apdet

Metode db.collection.update() dipaké pikeun ngarobah bagian tina hiji dokumen aya atawa sakabeh dokumen, nepi ka ngagantian lengkep, gumantung kana parameter Anjeun tangtukeun update. Anu henteu écés nyaéta yén éta moal ngolah sadaya dokumén dina koleksi kecuali anjeun nyetél pilihan multi pikeun ngapdet sadaya dokumén anu minuhan kriteria pamundut.

Tong hilap pentingna urutan konci dina tabel hash

Dina JSON, hiji obyék diwangun ku kumpulan unordered ukuran enol atawa leuwih pasangan ngaran / nilai, dimana ngaran mangrupa string jeung nilai mangrupa string, angka, boolean, null, objék, atawa Asép Sunandar Sunarya.

Hanjakalna, BSON nempatkeun seueur tekenan kana tatanan nalika milarian. Dina MongoDB, urutan konci dina objék diwangun-di urusan, i.e. { firstname: "Phil", surname: "factor" } - ieu teu sarua jeung { { surname: "factor", firstname: "Phil" }. Nyaéta, anjeun kedah nyimpen urutan pasangan nami/nilai dina dokumén anjeun upami anjeun hoyong mastikeun mendakanana.

Tong lieur "Henteu" и "teu tangtu"

ajen "teu tangtu" éta pernah valid dina JSON, nurutkeun standar resmi JSON (ECMA-404 Bagéan 5), sanajan dipaké dina JavaScript. Sumawona, pikeun BSON éta luntur sareng dirobih kana $null, nu teu salawasna solusi alus. Hindarkeun ngagunakeun "teu tangtu" dina MongoDB.

pamakean $limit() tanpa $sort()

Sering pisan nalika anjeun nuju ngembangkeun di MongoDB, éta mangpaat pikeun ningali conto hasil anu bakal dipulangkeun tina pamundut atanapi agrégasi. Pikeun tugas ieu anjeun peryogi $limit(), tapi kedahna henteu aya dina kode ahir iwal anjeun nganggo sateuacanna $sort. montir Ieu diperlukeun sabab disebutkeun Anjeun teu bisa ngajamin urutan hasilna, jeung anjeun moal bisa reliably nempo data. Di luhureun hasil anjeun bakal nampi éntri anu béda-béda gumantung kana asihan. Pikeun tiasa dipercaya, patarosan sareng agrégasi kedah deterministik, nyaéta, ngahasilkeun hasil anu sami unggal waktos dieksekusi. Kode nu ngandung $limit(), tapi henteu $sort, moal deterministik sarta salajengna bisa ngabalukarkeun kasalahan anu bakal hese dilacak.

kacindekan

Hiji-hijina jalan pikeun kuciwa sareng MongoDB nyaéta ngabandingkeun langsung kana jinis database anu sanés, sapertos DBMS, atanapi dugi ka dianggo dumasar kana ekspektasi anu tangtu. Ieu kawas ngabandingkeun jeruk jeung garpu. Sistem pangkalan data nyayogikeun tujuan anu khusus. Hadé pisan mun saukur ngarti tur ngahargaan béda ieu keur diri. Ieu bakal éra mun tekanan pamekar MongoDB ngaliwatan jalur nu maksa aranjeunna turun jalur DBMS. Abdi hoyong ningali cara anyar jeung metot pikeun ngajawab masalah heubeul, kayaning mastikeun integritas data jeung nyieun sistem data anu tahan ka gagal jeung serangan jahat.

Perkenalan MongoDB ngeunaan transactionality ACID dina versi 4.0 mangrupikeun conto anu saé pikeun ngenalkeun perbaikan penting dina cara anu inovatif. Transaksi multi-dokumen sareng multi-pernyataan ayeuna atom. Ieu oge mungkin pikeun nyaluyukeun waktos diperlukeun pikeun acquire konci na nungtungan transaksi nyangkut, kitu ogé ngarobah tingkat isolasi.

14 hal anu kuring hoyong terang sateuacan ngamimitian sareng MongoDB

Maca deui:

sumber: www.habr.com

Tambahkeun komentar