Tarjamahan tina artikel ieu disiapkeun dina wengi mimiti kursus
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
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
Tong hilap ngabeungkeut permukaan serangan ka MongoDB
,
atawa
. Kusabab file data henteu énkripsi dina MongoDB standar, masuk akal pikeun ngajalankeun MongoDB sareng
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.
Artikel klasik "
Ulah hilap urutan urut
Hilap urutan sortir tiasa nyababkeun langkung frustasi sareng miceunan waktos langkung seueur tibatan konfigurasi anu salah. Sacara standar ngagunakeun MongoBD
Jieun koléksi sareng dokumén ageung
MongoDB bagja janten host dokumén ageung dugi ka 16MB dina koleksi, sareng
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
MongoDB ngagaduhan anu disebut
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
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
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.
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
.
Pikeun mastikeun éntri, pastikeun logging diaktipkeun dina file konfigurasi
, 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
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
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
Milih kaluar tina ngagunakeun multi-apdet
Metode
dipaké pikeun ngarobah bagian tina hiji dokumen aya atawa sakabeh dokumen, nepi ka ngagantian lengkep, gumantung kana parameter Anjeun tangtukeun
. Anu henteu écés nyaéta yén éta moal ngolah sadaya dokumén dina koleksi kecuali anjeun nyetél pilihan
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 { 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 $null
, nu teu salawasna solusi alus.
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.
Maca deui:
sumber: www.habr.com