14 bagay mwen swete mwen konnen anvan mwen kòmanse ak MongoDB

Tradiksyon atik la te prepare lavèy kòmansman kou a "Badone ki pa relasyon".

14 bagay mwen swete mwen konnen anvan mwen kòmanse ak MongoDB

Pwen esansyèl:

  • Li trè enpòtan pou devlope yon chema menm si li opsyonèl nan MongoDB.
  • Menm jan an tou, endèks yo dwe matche ak chema ou ak modèl aksè.
  • Evite itilize gwo objè ak gwo ranje.
  • Fè atansyon ak anviwònman MongoDB, espesyalman lè li rive sekirite ak fyab.
  • MongoDB pa gen yon optimize rechèch, kidonk ou dwe fè atansyon lè w ap fè operasyon rechèch.

Mwen te travay ak baz done pou yon tan trè lontan, men se sèlman dènyèman dekouvri MongoDB. Gen kèk bagay mwen swete mwen konnen anvan mwen te kòmanse travay avèk li. Lè yon moun deja gen eksperyans nan yon domèn sèten, yo gen prejije nosyon sou sa baz done yo ye ak sa yo fè. Nan espwa pou fè li pi fasil pou lòt moun konprann, mwen prezante yon lis erè komen.

Kreye yon sèvè MongoDB san otantifikasyon

Malerezman, MongoDB enstale san otantifikasyon pa default. Pou yon estasyon travay lokalman, pratik sa a nòmal. Men, piske MongoDB se yon sistèm milti-itilizatè ki renmen sèvi ak gwo kantite memwa, li pral pi bon si ou mete l sou yon sèvè ki gen anpil RAM ke posib, menm si ou pral sèlman sèvi ak li pou devlopman. Enstale sou sèvè a atravè pò default la ka gen pwoblèm, espesyalman si nenpòt kòd javascript ka egzekite nan demann lan (pa egzanp, $where kòm yon lide pou piki).

Gen plizyè metòd otantifikasyon, men pi fasil la se mete yon ID itilizatè / modpas. Sèvi ak lide sa a pandan w ap reflechi sou otantifikasyon anpenpan ki baze sou LDAP. Lè li rive sekirite, MongoDB ta dwe toujou ap mete ajou, ak mòso bwa yo ta dwe toujou tcheke pou aksè san otorizasyon. Pou egzanp, mwen renmen chwazi yon pò diferan kòm pò a default.

Pa bliye mare sifas atak ou a ak MongoDB

Lis Verifikasyon Sekirite MongoDB gen bon konsèy pou diminye risk pou yo entrizyon rezo ak flit done. Li fasil pou brose li epi di ke yon sèvè devlopman pa bezwen yon wo nivo de sekirite. Sepandan, li pa senp epi sa a aplike a tout sèvè MongoDB. An patikilye, si pa gen okenn rezon konvenkan pou itilize mapReduce, group oswa $kote, ou bezwen enfim itilizasyon kòd abitrè nan JavaScript lè w ekri nan fichye konfigirasyon an javascriptEnabled:false. Depi fichye done yo pa chiffres nan MongoDB estanda, li fè sans pou kouri MongoDB ak Itilizatè devwe, ki gen aksè konplè nan dosye, ak aksè limite sèlman nan li ak kapasite nan sèvi ak pwòp kontwòl sistèm operasyon an aksè dosye.

Erè pandan y ap devlope kous la

MongoDB pa sèvi ak yon chema. Men, sa pa vle di ke konplo a pa nesesè. Si ou jis vle estoke dokiman san okenn modèl ki konsistan, estoke yo ka rapid ak fasil, men rekipere yo pita ka difisil. modi difisil.

Atik klasik "6 Règ pou konsepsyon MongoDB Schema" Li vo yon li, ak karakteristik tankou Chema Explorer nan zouti twazyèm pati Studio 3T, li vo itilize pou chèk regilye nan sikui yo.

Pa bliye lòd sòt la

Bliye lòd sòt ka lakòz plis fristrasyon ak gaspiye plis tan pase nenpòt lòt konfigirasyon ki pa kòrèk. Pa default MongoBD itilize sòt binè. Men, li se fasil yo dwe itil nenpòt moun. Ka-sansib, aksan-sansib, kalite binè yo te konsidere kòm anakronism kirye ansanm ak pèl, kaftan ak moustach boukle tounen nan ane 80 yo nan dènye syèk la. Koulye a, itilizasyon yo se enpardonab. Nan lavi reyèl, "motosiklèt" se menm jan ak "Motosiklèt". Ak "Gran Bretay" ak "Grann Bretay" se menm kote. Yon lèt miniskil se tou senpleman ekivalan majiskil nan yon lèt majiskil. Epi pa fè m kòmanse sou klasman dyakritik. Lè w ap kreye yon baz done nan MongoDB, sèvi ak kolasyon aksan ki pa sansib ak enskri, ki koresponn ak lang ak kilti itilizatè sistèm. Sa a pral fè rechèch nan done fisèl pi fasil.

Kreye koleksyon ak gwo dokiman

MongoDB kontan pou òganize gwo dokiman jiska 16MB nan koleksyon, ak GridFS Ki fèt pou gwo dokiman ki pi gwo pase 16 MB. Men, jis paske gwo dokiman yo ka mete la, estoke yo pa gen yon bon lide. MongoDB ap travay pi byen si ou estoke dokiman endividyèl ki gen kèk kilobyte nan gwosè, trete yo plis tankou ranje nan yon tab SQL lajè. Gwo dokiman yo pral yon sous pwoblèm ak pwodiktivite.

Kreye dokiman ak gwo etalaj

Dokiman yo ka genyen etalaj. Li pi bon si kantite eleman nan etalaj la lwen yon nimewo kat chif. Si yo ajoute eleman yo nan yon etalaj souvan, li pral depase dokiman ki genyen ladan l la epi li pral bezwen. deplase, ki vle di li pral nesesè mete ajou endèks yo tou. Lè re-indexing yon dokiman ak yon gwo etalaj, endèks yo pral souvan ranplase, paske gen yon dosye ..., ki estoke endèks li yo. Re-indexing sa a rive tou lè yo mete yon dokiman oswa efase.

MongoDB gen yon bagay ki rele "faktè ranpli", ki bay plas pou dokiman yo grandi pou minimize pwoblèm sa a.
Ou ta ka panse ke ou ka fè san yo pa endèks etalaj. Malerezman, mank de endis ka lakòz ou gen lòt pwoblèm. Depi dokiman yo analize depi nan kòmansman rive nan fini, chèche eleman nan fen etalaj la pral pran plis tan, epi pifò operasyon ki asosye ak yon dokiman sa yo pral dousman.

Pa bliye ke lòd etap yo nan yon aggregasyon enpòtan

Nan yon sistèm baz done ak yon optimize rechèch, demann ou ekri yo se eksplikasyon sou sa ou vle jwenn, pa kòman yo jwenn li. Mekanis sa a travay pa analoji ak kòmande nan yon restoran: anjeneral ou tou senpleman kòmande yon plat, epi yo pa bay enstriksyon detaye kwit manje a.

Nan MongoDB, ou enstwi kwit manje a. Pou egzanp, ou bezwen asire w ke done yo pase nan reduce osi bonè ke posib nan tiyo a lè l sèvi avèk $match и $project, ak klasman fèt sèlman apre reduce, e ke rechèch la rive egzakteman nan lòd ou vle a. Lè w gen yon optimiseur rechèch ki elimine travay ki pa nesesè, sekans etap demi, epi chwazi kalite rantre yo ka gate ou. Avèk MongoDB, ou gen plis kontwòl nan pri konvenyans.

Zouti tankou Studio 3T pral senplifye konstriksyon requêtes agrégation nan MongoDB. Karakteristik Editè Agregasyon an pèmèt ou aplike deklarasyon tiyo yon etap alafwa, epi enspekte done antre ak pwodiksyon nan chak etap pou senplifye debogaj.

Sèvi ak Anrejistreman rapid

Pa janm mete opsyon ekri MongoDB pou gen gwo vitès men fyab ki ba. Mòd sa a "Fichiye-ak-bliye" sanble vit paske kòmandman an retounen anvan ekri a rive. Si sistèm nan aksidan anvan done yo ekri sou disk, li pral pèdi epi fini nan yon eta konsistan. Erezman, 64-bit MongoDB te pèmèt antre.

Motè depo MMAPv1 ak WiredTiger yo sèvi ak enregistrement pou anpeche sa, byenke WiredTiger ka refè nan dènye konsistan. pwen kontwòl, si enregistrement enfim.

Jounal asire ke baz done a nan yon eta ki konsistan apre rekiperasyon ak konsève tout done jiskaske yo ekri li nan boutèy la. Se frekans nan anrejistreman configuré lè l sèvi avèk paramèt la commitIntervalMs.

Pou asire w ke yo antre yo, asire w ke antre yo aktive nan dosye konfigirasyon an (storage.journal.enabled), ak frekans anrejistreman yo koresponn ak kantite enfòmasyon ou kapab pèdi.

Klasman san endèks

Lè w ap chèche ak agrégation, souvan gen bezwen pou sòt done yo. Ann espere ke sa a se fè nan youn nan etap final yo, apre yo fin filtre rezilta a yo nan lòd yo diminye kantite done yo te klase. E menm nan ka sa a, pou klasman w ap bezwen endèks. Ou ka itilize yon endèks sèl oswa konpoze.

Si pa gen okenn endèks apwopriye, MongoDB ap fè san li. Gen yon limit memwa 32 MB sou gwosè total tout dokiman yo operasyon klasman, epi si MongoDB rive nan limit sa a, Lè sa a, li pral swa voye yon erè oswa retounen dosye vid.

Rechèch san sipò endèks

Rechèch rechèch fè yon fonksyon ki sanble ak operasyon JOIN nan SQL. Pou travay pi byen, yo bezwen endèks valè kle yo itilize kòm kle etranje a. Sa a se pa evidan paske itilizasyon an pa reflete nan explain(). Endis sa yo se anplis de endèks ki ekri nan explain(), ki an vire yo itilize pa operatè tiyo $match и $sort, lè yo rankontre nan kòmansman tiyo a. Endis yo kapab kounye a kouvri nenpòt etap tiyo agrégation.

Chwazi pa sèvi ak plizyè mizajou

Metòd db.collection.update() itilize pou chanje yon pati nan yon dokiman ki egziste deja oswa tout dokiman an, jiska yon ranplasman konplè, tou depann de paramèt ou presize. update. Ki sa ki pa tèlman evidan se ke li pa pral trete tout dokiman nan koleksyon an sof si ou mete opsyon an multi pou mete ajou tout dokiman ki satisfè kritè demann yo.

Pa bliye enpòtans ki genyen nan lòd la nan kle yo nan yon tab hash

Nan JSON, yon objè konsiste de yon koleksyon ki pa òdone gwosè zewo oswa plis pè non/valè, kote non se yon fisèl ak valè se yon fisèl, nimewo, boolean, nil, objè, oswa etalaj.

Malerezman, BSON mete anpil anfaz sou lòd lè w ap chèche. Nan MongoDB, lòd la nan kle nan bati-an objè yo zafè, sa vle di. { firstname: "Phil", surname: "factor" } - sa a se pa menm jan ak { { surname: "factor", firstname: "Phil" }. Sa vle di, ou dwe estoke lòd pè non/valè nan dokiman ou yo si ou vle asire w ke ou jwenn yo.

Ou pa bezwen konfonn "Nil" и "endefini"

Valè "endefini" pa t janm valab nan JSON, dapre estanda ofisyèl yo JSON (ECMA-404 Seksyon 5), menmsi li itilize nan JavaScript. Anplis, pou BSON li demode epi li konvèti nan $null, ki pa toujou yon bon solisyon. Evite itilize "endefini" nan MongoDB.

Sèvi ak $limit() san yo pa $sort()

Byen souvan lè w ap devlope nan MongoDB, li itil jis wè yon echantiyon nan rezilta a ki pral retounen nan yon rechèch oswa agrégation. Pou travay sa a ou pral bezwen $limit(), men li pa ta dwe janm nan kòd final la sof si ou itilize li anvan $sort. Mekanisyen sa a nesesè paske otreman ou pa ka garanti lòd rezilta a, epi ou pa yo pral kapab seryezman wè done yo. Nan tèt la nan rezilta a ou pral jwenn antre diferan depann sou klasman an. Pou travay seryezman, demann ak agrégasyon yo dwe detèminist, se sa ki, pwodwi menm rezilta yo chak fwa yo egzekite. Kòd ki genyen $limit(), men non $sort, pa pral detèminist epi yo ka imedyatman lakòz erè ki pral difisil pou jwenn.

Konklizyon

Sèl fason pou w wont ak MongoDB se konpare li dirèkteman ak yon lòt kalite baz done, tankou yon DBMS, oswa vin sèvi ak li ki baze sou sèten atant. Se tankou konpare yon zoranj ak yon fouchèt. Sistèm baz done sèvi pou rezon espesifik. Li pi bon tou senpleman konprann ak apresye diferans sa yo pou tèt ou. Li ta yon wont fè presyon sou devlopè MongoDB yo sou yon chemen ki fòse yo desann chemen DBMS la. Mwen vle wè nouvo fason enteresan pou rezoud pwoblèm ansyen yo, tankou asire entegrite done ak kreye sistèm done ki rezistan nan echèk ak atak move.

Entwodiksyon MongoDB nan tranzaksyon ACID nan vèsyon 4.0 se yon bon egzanp entwodwi amelyorasyon enpòtan nan yon fason inovatè. Tranzaksyon milti-dokiman ak milti-deklarasyon yo kounye a se atomik. Li posib tou pou ajiste tan ki nesesè pou jwenn kadna epi mete fen nan tranzaksyon ki kole yo, osi byen ke chanje nivo izolasyon an.

14 bagay mwen swete mwen konnen anvan mwen kòmanse ak MongoDB

Li piplis:

Sous: www.habr.com

Add nouvo kòmantè