14 nga mga butang nga gusto nako mahibal-an sa wala pa magsugod sa MongoDB

Ang paghubad sa artikulo giandam sa bisperas sa pagsugod sa kurso "Dili-relasyon nga mga database".

14 nga mga butang nga gusto nako mahibal-an sa wala pa magsugod sa MongoDB

Mga Pangunang Punto:

  • Hinungdanon kaayo ang paghimo og schema bisan kung kini opsyonal sa MongoDB.
  • Ingon usab, ang mga indeks kinahanglan nga mohaum sa imong schema ug mga pattern sa pag-access.
  • Likayi ang paggamit sa dagkong mga butang ug dagkong mga array.
  • Pag-amping sa mga setting sa MongoDB, labi na kung bahin sa seguridad ug kasaligan.
  • Ang MongoDB walay query optimizer, mao nga kinahanglan ka nga mag-amping sa paghimo sa mga operasyon sa pangutana.

Nagtrabaho ko sa mga database sa dugay nga panahon, apan bag-o lang nadiskobrehan ang MongoDB. Adunay pipila ka mga butang nga gusto nako mahibal-an sa wala pa ako magsugod sa pagtrabaho niini. Kung ang usa ka tawo adunay kasinatian na sa usa ka piho nga natad, sila adunay daan nga mga ideya bahin sa kung unsa ang mga database ug kung unsa ang ilang gibuhat. Sa paglaum nga mas sayon ​​​​alang sa uban nga masabtan, akong gipresentar ang usa ka lista sa kasagarang mga sayop.

Paghimo og MongoDB server nga walay panghimatuud

Ikasubo, ang MongoDB gi-install nga wala’y panghimatuud pinaagi sa default. Alang sa usa ka workstation nga gi-access sa lokal, kini nga praktis normal. Apan tungod kay ang MongoDB usa ka multi-user system nga ganahan mugamit ug dako nga memory, mas maayo kung ibutang nimo kini sa server nga adunay daghang RAM kutob sa mahimo, bisan kung gamiton ra nimo kini alang sa kalamboan. Ang pag-install sa server pinaagi sa default port mahimong problema, labi na kung ang bisan unsang javascript code mahimong ipatuman sa hangyo (pananglitan, $where isip usa ka ideya alang sa mga injections).

Adunay ubay-ubay nga mga pamaagi sa pag-authenticate, apan ang pinakasayon ​​mao ang pagbutang og user ID/password. Gamita kini nga ideya samtang naghunahuna ka bahin sa nindot nga panghimatuud nga gibase sa LDAP. Kung bahin sa seguridad, ang MongoDB kinahanglan nga kanunay nga gi-update, ug ang mga troso kinahanglan kanunay nga susihon alang sa dili awtorisado nga pag-access. Pananglitan, ganahan kong mopili ug laing pantalan isip default port.

Ayaw kalimti ang pagbugkos sa imong pag-atake sa MongoDB

MongoDB Security Checklist Naglangkob sa maayong mga tip alang sa pagkunhod sa peligro sa pagsulod sa network ug pag-leakage sa datos. Sayon nga wagtangon kini ug isulti nga ang usa ka server sa pag-uswag wala magkinahanglan usa ka taas nga lebel sa seguridad. Bisan pa, dili kini yano ug kini magamit sa tanan nga mga server sa MongoDB. Sa partikular, kung walay mapugsanon nga rason sa paggamit mapReduce, group o $asa, kinahanglan nimong i-disable ang paggamit sa arbitraryong code sa JavaScript pinaagi sa pagsulat sa configuration file javascriptEnabled:false. Tungod kay ang mga file sa datos wala ma-encrypt sa standard MongoDB, makatarunganon nga ipadagan ang MongoDB Gipahinungod nga Gumagamit, nga adunay hingpit nga pag-access sa mga file, nga adunay limitado nga pag-access lamang niini ug ang abilidad sa paggamit sa kaugalingon nga mga kontrol sa pag-access sa file sa operating system.

Sayop samtang nagpalambo sa sirkito

Ang MongoDB wala mogamit ug schema. Apan wala kini magpasabut nga ang laraw wala kinahanglana. Kung gusto nimo nga tipigan ang mga dokumento nga walay bisan unsang makanunayon nga sumbanan, ang pagtipig niini mahimong dali ug sayon, apan ang pagkuha niini sa ulahi mahimong lisud. grabe kalisud.

Klasikong artikulo "6 Mga Lagda sa Kumagko alang sa MongoDB Schema Design" Kini angay nga basahon, ug mga bahin sama Schema Explorer sa ikatulo nga partido nga himan Studio 3T, kini angay nga gamiton alang sa regular nga pagsusi sa mga sirkito.

Ayaw kalimti ang pagkasunud-sunod

Ang pagkalimot sa han-ay sa paghan-ay mahimong makapahinabog dugang kasagmuyo ug makausik ug daghang oras kay sa bisan unsang lain nga sayop nga pag-configure. Pinaagi sa default MongoBD gigamit binary nga matang. Apan dili tingali kini mapuslanon ni bisan kinsa. Ang case-sensitive, accent-sensitive, binary nga mga matang giisip nga talagsaon nga mga anachronism uban sa mga beads, caftans ug curly mustaches balik sa 80s sa miaging siglo. Karon ang ilang paggamit dili mapasaylo. Sa tinuud nga kinabuhi, ang "motorsiklo" parehas sa "Motorsiklo". Ug ang "Britain" ug "Britain" parehas nga lugar. Ang usa ka gamay nga letra mao lamang ang uppercase nga katumbas sa usa ka capital letter. Ug ayaw ako pagsugod sa paghan-ay sa mga diacritics. Kung maghimo ug database sa MongoDB, gamita ang accent-insensitive collation ug magparehistro, nga katumbas sa pinulongan ug kultura sa tiggamit sa sistema. Kini makapasayon ​​sa pagpangita pinaagi sa string data.

Paghimo mga koleksyon nga adunay dagkong mga dokumento

Malipayon ang MongoDB nga mag-host sa dagkong mga dokumento hangtod sa 16MB sa mga koleksyon, ug GridFS Gidisenyo alang sa dagkong mga dokumento nga mas dako pa sa 16 MB. Apan tungod kay ang dagkong mga dokumento mahimong ibutang didto, ang pagtipig niini didto dili maayo nga ideya. Ang MongoDB labing maayo kung imong tipigan ang indibidwal nga mga dokumento nga pipila ka kilobytes ang gidak-on, pagtratar kanila sama sa mga laray sa lapad nga lamesa sa SQL. Ang dagkong mga dokumento mahimong tinubdan sa mga problema pagka-produktibo.

Paghimo og mga dokumento nga adunay dagkong mga arrays

Ang mga dokumento mahimong adunay mga array. Labing maayo kung ang gidaghanon sa mga elemento sa array layo sa upat ka digit nga numero. Kung ang mga elemento idugang kanunay sa usa ka array, kini molapas sa dokumento nga adunay sulod niini ug kinahanglan nga lihok, nga nagpasabot nga kini gikinahanglan update index usab. Kung gi-indeks pag-usab ang usa ka dokumento nga adunay daghang laray, ang mga indeks kanunay nga ma-overwrite, tungod kay adunay rekord, nga nagtipig sa indeks niini. Kini nga pag-indeks usab mahitabo usab kung ang usa ka dokumento gisal-ot o gitangtang.

Ang MongoDB adunay gitawag "fill factor", nga naghatag og luna alang sa mga dokumento nga motubo aron mamenosan kini nga problema.
Mahimong maghunahuna ka nga mahimo nimo nga wala ang pag-index sa array. Ikasubo, ang kakulang sa mga indeks mahimo’g hinungdan nga adunay uban nga mga problema. Tungod kay ang mga dokumento gi-scan gikan sa pagsugod hangtod sa pagkahuman, ang pagpangita sa mga elemento sa katapusan sa array magdugay, ug kadaghanan sa mga operasyon nga adunay kalabotan sa ingon nga dokumento mahimong hinay.

Ayaw kalimti nga ang pagkasunud-sunod sa mga yugto sa usa ka panagsama hinungdanon

Sa usa ka sistema sa database nga adunay usa ka query optimizer, ang mga pangutana nga imong gisulat mao ang mga pagpasabut kung unsa ang gusto nimo makuha, dili kung giunsa kini makuha. Kini nga mekanismo naglihok pinaagi sa pagtandi sa pag-order sa usa ka restawran: kasagaran nag-order ka lang usa ka pinggan, ug wala maghatag detalyado nga panudlo sa magluto.

Sa MongoDB, gitudloan nimo ang tigluto. Pananglitan, kinahanglan nimo nga sigurohon nga ang datos moagi reduce sa sayo kutob sa mahimo sa pipeline sa paggamit $match и $project, ug ang paghan-ay mahitabo lamang pagkahuman reduce, ug nga ang pagpangita mahitabo sa tukma nga han-ay nga imong gusto. Ang pagbaton ug query optimizer nga magwagtang sa wala kinahanglana nga trabaho, maayo nga pagsunud sa mga lakang, ug pagpili sa mga tipo sa pag-apil mahimong makadaot kanimo. Uban sa MongoDB, ikaw adunay labaw nga kontrol sa gasto sa kasayon.

Mga himan sama sa Studio 3T mopasimple sa pagtukod sa aggregation nga mga pangutana sa MongoDB. Ang feature sa Aggregation Editor nagtugot kanimo sa paggamit sa mga pipeline nga pahayag sa usa ka yugto sa usa ka higayon, ug pagsusi sa input ug output data sa matag yugto alang sa mas sayon ​​nga pag-debug.

Paggamit sa Dali nga Pagrekord

Ayaw ibutang ang mga opsyon sa pagsulat sa MongoDB nga adunay taas nga tulin apan ubos nga kasaligan. Kini nga mode "file-ug-kalimot" daw paspas tungod kay ang sugo gibalik sa wala pa mahitabo ang pagsulat. Kung ang sistema nahagsa sa wala pa ang data gisulat sa disk, kini mawala ug mahuman sa usa ka dili managsama nga kahimtang. Suwerte, ang 64-bit nga MongoDB adunay pagpaandar sa pag-log.

Ang mga makina sa pagtipig sa MMAPv1 ug WiredTiger naggamit sa pag-log aron mapugngan kini, bisan kung ang WiredTiger mahimong mabawi hangtod sa katapusan nga makanunayon. kontrol nga punto, kung ang pag-log gibabagan.

Ang pag-journal nagsiguro nga ang database naa sa makanunayon nga kahimtang pagkahuman sa pagkaayo ug gitipigan ang tanan nga datos hangtod nga kini gisulat sa log. Ang frequency sa mga pagrekord gi-configure gamit ang parameter commitIntervalMs.

Aron masiguro ang mga entri, siguruha nga ang pag-log gipalihok sa file sa pag-configure (storage.journal.enabled), ug ang kasubsob sa mga rekording katumbas sa gidaghanon sa impormasyon nga imong makaya nga mawala.

Pagsunud nga wala’y indeks

Sa pagpangita ug pag-aggregate, kanunay adunay panginahanglan sa paghan-ay sa datos. Manghinaut kita nga kini nahimo sa usa sa katapusang mga yugto, pagkahuman sa pagsala sa resulta aron makunhuran ang gidaghanon sa datos nga gisunud. Ug bisan sa niini nga kaso, alang sa pag-sort kinahanglan nimo indeks. Mahimo nimong gamiton ang usa o compound nga indeks.

Kung walay angay nga index, buhaton sa MongoDB kung wala kini. Adunay limitasyon sa memorya nga 32 MB sa kinatibuk-ang gidak-on sa tanang mga dokumento sa mga operasyon sa paghan-ay, ug kung ang MongoDB makaabot niini nga limitasyon, nan kini maglabay sa usa ka sayup o mobalik walay sulod nga recordset.

Pangitaa nga walay suporta sa indeks

Ang mga pangutana sa pagpangita naghimo sa usa ka function nga susama sa JOIN nga operasyon sa SQL. Aron molihok nga labing maayo, kinahanglan nila ang indeks sa kantidad sa yawe nga gigamit ingon nga langyaw nga yawe. Dili kini klaro tungod kay ang paggamit wala makita sa explain(). Ang ingon nga mga indeks dugang sa indeks nga gisulat sa explain(), nga sa baylo gigamit sa mga operator sa pipeline $match и $sort, sa dihang magkita sila sa sinugdanan sa pipeline. Ang mga index mahimo na karon nga maglakip sa bisan unsang yugto aggregation pipeline.

Pagpili gikan sa paggamit sa multi-updates

Paagi db.collection.update() gigamit sa pag-usab sa bahin sa usa ka kasamtangan nga dokumento o sa tibuok nga dokumento, hangtod sa usa ka kompleto nga pagpuli, depende sa parameter nga imong gitakda update. Ang dili kaayo klaro mao nga dili kini magproseso sa tanan nga mga dokumento sa koleksyon gawas kung imong itakda ang kapilian multi aron ma-update ang tanan nga mga dokumento nga nakab-ot ang mga pamatasan sa paghangyo.

Ayaw kalimti ang kamahinungdanon sa han-ay sa mga yawe sa usa ka hash table

Sa JSON, ang usa ka butang naglangkob sa usa ka dili han-ay nga koleksyon sa gidak-on nga zero o labaw pa nga mga pares sa ngalan/bili, diin ang ngalan usa ka string ug ang bili usa ka string, numero, boolean, null, butang, o array.

Ikasubo, ang BSON nagbutang ug daghang gibug-aton sa order kung nangita. Sa MongoDB, ang han-ay sa mga yawe sulod sa built-in nga mga butang mga butang, i.e. { firstname: "Phil", surname: "factor" } - kini dili sama sa { { surname: "factor", firstname: "Phil" }. Sa ato pa, kinahanglan nimong tipigan ang han-ay sa mga pares sa ngalan/bili sa imong mga dokumento kung gusto nimo nga sigurado nga makit-an kini.

Ayaw kalibog "Wala" и "dili matino"

bili "dili matino" dili gayud balido sa JSON, sumala sa opisyal nga sumbanan JSON (ECMA-404 Seksyon 5), bisan kung kini gigamit sa JavaScript. Dugang pa, alang sa BSON kini dili na magamit ug nakabig sa $null, nga dili kanunay usa ka maayong solusyon. Likayi ang paggamit "dili matino" sa MongoDB.

Paggamit $limit() nga walay $sort()

Kasagaran kung nag-develop ka sa MongoDB, mapuslanon nga makita ra ang usa ka sample sa resulta nga ibalik gikan sa usa ka pangutana o panagsama. Alang niini nga buluhaton kinahanglan nimo $limit(), apan dili kini kinahanglan nga naa sa katapusan nga code gawas kung gigamit nimo kini kaniadto $sort. Kini nga mekaniko gikinahanglan tungod kay kung dili dili nimo magarantiya ang han-ay sa resulta, ug dili nimo masaligan ang pagtan-aw sa datos. Sa ibabaw sa resulta makadawat ka ug lain-laing mga entries depende sa paghan-ay. Aron masaligan ang pagtrabaho, ang mga pangutana ug mga panagsama kinahanglan nga deterministiko, nga mao, nagpatunghag parehas nga mga sangputanan sa matag higayon nga kini gipatuman. Kodigo nga adunay sulod $limit(), pero dili $sort, dili deterministiko ug mahimong moresulta sa mga sayop nga lisud masubay.

konklusyon

Ang bugtong paagi nga mahigawad sa MongoDB mao ang pagtandi niini direkta sa lain nga klase sa database, sama sa usa ka DBMS, o aron magamit kini base sa piho nga mga gilauman. Kini sama sa pagtandi sa usa ka orange sa usa ka tinidor. Ang mga sistema sa database nagsilbi nga piho nga katuyoan. Labing maayo nga masabtan lang ug mapasalamatan kini nga mga kalainan alang sa imong kaugalingon. Makauulaw nga ipugos ang mga nag-develop sa MongoDB sa usa ka agianan nga nagpugos kanila sa agianan sa DBMS. Gusto nakong makakita og bag-o ug makaiikag nga mga paagi sa pagsulbad sa daan nga mga problema, sama sa pagsiguro sa integridad sa datos ug paghimo sa mga sistema sa datos nga makasugakod sa kapakyasan ug malisyosong mga pag-atake.

Ang pagpaila sa MongoDB sa ACID transactionality sa bersyon 4.0 usa ka maayong panig-ingnan sa pagpaila sa importante nga mga kalamboan sa usa ka bag-ong paagi. Ang mga transaksyon sa multi-dokumento ug multi-statement kay atomic na. Posible usab nga i-adjust ang oras nga gikinahanglan aron makuha ang mga kandado ug tapuson ang mga na-stuck nga mga transaksyon, ingon man usab ang pagbag-o sa lebel sa pagkalainlain.

14 nga mga butang nga gusto nako mahibal-an sa wala pa magsugod sa MongoDB

Basaha ang dugang pa:

Source: www.habr.com

Idugang sa usa ka comment