Tradiksyon atik la te prepare lavèy kòmansman kou a
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
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
Pa bliye mare sifas atak ou a ak MongoDB
,
oswa
. Depi fichye done yo pa chiffres nan MongoDB estanda, li fè sans pou kouri MongoDB ak
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.
Atik klasik "
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
Kreye koleksyon ak gwo dokiman
MongoDB kontan pou òganize gwo dokiman jiska 16MB nan koleksyon, ak
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.
MongoDB gen yon bagay ki rele
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
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
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.
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
.
Pou asire w ke yo antre yo, asire w ke antre yo aktive nan dosye konfigirasyon an
, 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
Si pa gen okenn endèks apwopriye, MongoDB ap fè san li. Gen yon limit memwa 32 MB sou gwosè total tout dokiman yo
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
Chwazi pa sèvi ak plizyè mizajou
Metòd
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.
. Ki sa ki pa tèlman evidan se ke li pa pral trete tout dokiman nan koleksyon an sof si ou mete opsyon an
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 { 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 $null
, ki pa toujou yon bon solisyon.
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.
Li piplis:
Sous: www.habr.com