Terjemahan artikel disiapake ing wayah wengi wiwitan kursus
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
Ana sawetara cara otentikasi, nanging sing paling gampang yaiku nyetel ID pangguna / sandhi. Gunakake ide iki nalika sampeyan mikir babagan otentikasi sing adhedhasar
Aja lali kanggo naleni lumahing serangan kanggo MongoDB
,
utawa
. Wiwit file data ora ndhelik ing MongoDB standar, iku ndadekake pangertèn kanggo mbukak MongoDB karo
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.
Artikel klasik"
Aja lali urutan urutan
Lali urutan urutan bisa nyebabake frustasi lan mbuang wektu luwih akeh tinimbang konfigurasi sing ora bener. Kanthi standar nggunakake MongoBD
Nggawe koleksi kanthi dokumen gedhe
MongoDB seneng dadi tuan rumah dokumen gedhe nganti 16MB ing koleksi, lan
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
MongoDB ana sing diarani
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
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
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.
Journaling mesthekake yen database ing negara konsisten sawise Recovery lan nahan kabeh data nganti ditulis ing log. Frekuensi rekaman dikonfigurasi nggunakake parameter
.
Kanggo mesthekake entri kasebut, priksa manawa logging diaktifake ing file konfigurasi
, 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
Yen ora ana indeks sing cocog, MongoDB bakal nindakake tanpa. Ana watesan memori 32 MB ing ukuran total kabeh dokumen ing
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
Milih metu saka nggunakake multi-nganyari
Cara
digunakake kanggo ngganti bagean saka dokumen sing wis ana utawa kabeh dokumen, nganti panggantos lengkap, gumantung saka parameter sing sampeyan nemtokake
. Sing ora jelas yaiku ora bakal ngolah kabeh dokumen ing koleksi kasebut kajaba sampeyan nyetel pilihan kasebut
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 { 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 $null
, sing ora tansah dadi solusi sing apik.
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.
Waca liyane:
Source: www.habr.com