It-traduzzjoni tal-artiklu tħejjiet lejlet il-bidu tal-kors
Il-punti ewlenin:
- Huwa estremament importanti li tiġi żviluppata skema minkejja li hija fakultattiva f'MongoDB.
- Bl-istess mod, l-indiċi għandhom jaqblu mal-iskema u l-mudelli tal-aċċess tiegħek.
- Evita li tuża oġġetti kbar u arrays kbar.
- Oqgħod attent bis-settings ta 'MongoDB, speċjalment fejn jidħlu s-sigurtà u l-affidabbiltà.
- MongoDB m'għandux ottimizzatur ta' query, għalhekk trid toqgħod attent meta twettaq operazzjonijiet ta' query.
Ilni naħdem mad-databases għal żmien twil ħafna, iżda dan l-aħħar skoprejt MongoDB biss. Hemm ftit affarijiet li nixtieq inkun naf qabel bdejt naħdem magħha. Meta persuna diġà għandha esperjenza f'ċertu qasam, għandha kunċetti prekonċepiti dwar x'inhuma databases u x'jagħmlu. Bit-tama li nagħmilha aktar faċli għal oħrajn biex jifhmu, nippreżenta lista ta 'żbalji komuni.
Ħolqien ta' server MongoDB mingħajr awtentikazzjoni
Sfortunatament, MongoDB huwa installat mingħajr awtentikazzjoni awtomatikament. Għal post tax-xogħol aċċessat lokalment, din il-prattika hija normali. Iżda peress li MongoDB hija sistema multi-utenti li tħobb tuża ammonti kbar ta 'memorja, ikun aħjar jekk tpoġġiha fuq server b'RAM kemm jista' jkun, anki jekk se tużaha biss għall-iżvilupp. L-installazzjoni fuq is-server permezz tal-port default tista 'tkun problematika, speċjalment jekk kwalunkwe kodiċi javascript jista' jiġi esegwit fit-talba (per eżempju, $where
bħala idea għal
Hemm diversi metodi ta 'awtentikazzjoni, iżda l-eħfef huwa li tissettja ID tal-utent/password. Uża din l-idea waqt li taħseb dwar awtentikazzjoni fancy bbażata fuq
Tinsiex torbot il-wiċċ tal-attakk tiegħek ma' MongoDB
,
jew
. Peress li l-fajls tad-dejta mhumiex encrypted f'MongoDB standard, jagħmel sens li tmexxi MongoDB biha
Żball waqt l-iżvilupp taċ-ċirkwit
MongoDB ma jużax skema. Iżda dan ma jfissirx li l-iskema mhix meħtieġa. Jekk trid biss taħżen dokumenti mingħajr ebda mudell konsistenti, l-iffrankar tagħhom jista 'jkun malajr u faċli, iżda l-irkupru tagħhom aktar tard jista' jkun diffiċli.
Artiklu klassiku "
Tinsiex is-sort order
Li tinsa l-ordni tal-għażla tista 'tikkawża aktar frustrazzjoni u ħela ta' aktar ħin minn kwalunkwe konfigurazzjoni mhux korretta oħra. B'mod awtomatiku MongoBD juża
Oħloq kollezzjonijiet b'dokumenti kbar
MongoDB huwa kuntent li jospita dokumenti kbar sa 16MB f'kollezzjonijiet, u
Ħolqien ta 'dokumenti b'matriċi kbar
Id-dokumenti jista' jkun fihom matriċi. Huwa aħjar jekk in-numru ta 'elementi fil-firxa huwa 'l bogħod minn numru ta' erba 'ċifri. Jekk l-elementi jiġu miżjuda ma’ firxa ta’ spiss, din se tegħleb id-dokument li jkun fih u trid tkun
MongoDB għandu xi ħaġa msejħa
Inti tista 'taħseb li inti tista' tagħmel mingħajr indiċjar firxa. Sfortunatament, in-nuqqas ta 'indiċi jista' jikkawża li jkollok problemi oħra. Peress li d-dokumenti jiġu skennjati mill-bidu sat-tmiem, it-tfittxija għall-elementi fl-aħħar tal-firxa se tieħu aktar żmien, u l-biċċa l-kbira tal-operazzjonijiet assoċjati ma’ dokument bħal dan se jkunu
Tinsiex li l-ordni tal-istadji f'aggregazzjoni hija importanti
F'sistema ta 'database b'ottimizzatur ta' mistoqsijiet, il-mistoqsijiet li tikteb huma spjegazzjonijiet ta 'dak li trid tikseb, mhux kif tikseb. Dan il-mekkaniżmu jaħdem b'analoġija mal-ordnijiet f'ristorant: ġeneralment sempliċement tordna dixx, u ma tagħtix istruzzjonijiet dettaljati lill-kok.
F'MongoDB, tagħti struzzjonijiet lill-kok. Pereżempju, trid tiżgura li d-dejta tgħaddi reduce
kmieni kemm jista 'jkun fil-pipeline bl-użu $match
и $project
, u l-issortjar iseħħ biss wara reduce
, u li t-tfittxija ssir eżattament fl-ordni li trid. Li jkollok ottimizzatur tal-mistoqsijiet li jelimina xogħol mhux meħtieġ, l-aħjar sekwenzi tal-passi, u jagħżel tipi ta' tingħaqad jista' jħassruk. B'MongoDB, għandek aktar kontroll għall-ispiża tal-konvenjenza.
Għodda bħal
Użu ta 'Reġistrazzjoni Quick
Qatt issettja l-għażliet tal-kitba MongoDB biex ikollhom veloċità għolja iżda affidabbiltà baxxa. Din il-modalità "fajl u tinsa" jidher mgħaġġel minħabba li l-kmand jiġi rritornat qabel ma sseħħ il-kitba. Jekk is-sistema tiġġarraf qabel ma d-dejta tinkiteb fuq id-diska, tintilef u tispiċċa fi stat inkonsistenti. Fortunatament, 64-bit MongoDB ippermetta l-illoggjar.
Il-magni tal-ħażna MMAPv1 u WiredTiger jużaw l-illoggjar biex jipprevjenu dan, għalkemm WiredTiger jista 'jirkupra għall-aħħar konsistenti.
Il-ġurnaling jiżgura li d-database tkun fi stat konsistenti wara l-irkupru u żżomm id-dejta kollha sakemm tinkiteb fil-log. Il-frekwenza tar-reġistrazzjonijiet hija kkonfigurata bl-użu tal-parametru
.
Biex tkun ċert mill-entrati, kun żgur li l-illoggjar huwa attivat fil-fajl tal-konfigurazzjoni
, u l-frekwenza tar-reġistrazzjonijiet tikkorrispondi għall-ammont ta 'informazzjoni li tista' taffordja li titlef.
Issortjar mingħajr indiċi
Waqt it-tiftix u l-aggregazzjoni, ħafna drabi jkun hemm bżonn li tissortja d-data. Ejja nittamaw li dan isir f'wieħed mill-istadji finali, wara li jiġi ffiltrat ir-riżultat sabiex jitnaqqas l-ammont ta 'dejta li qed tiġi magħżula. U anke f'dan il-każ, għall-għażla ser ikollok bżonn
Jekk ma jkunx hemm indiċi adattat, MongoDB jgħaddi mingħajru. Hemm limitu ta' memorja ta' 32 MB fuq id-daqs totali tad-dokumenti kollha
Fittex mingħajr appoġġ għall-indiċi
Il-mistoqsijiet tat-tiftix iwettqu funzjoni simili għall-operazzjoni JOIN fl-SQL. Biex jaħdmu l-aħjar, għandhom bżonn l-indiċi tal-valur taċ-ċavetta użata bħala ċ-ċavetta barranija. Dan mhux ovvju minħabba li l-użu mhuwiex rifless explain()
. Indiċijiet bħal dawn huma minbarra l-indiċi miktuba fih explain()
, li min-naħa tagħha tintuża mill-operaturi tal-pipeline $match
и $sort
, meta jiltaqgħu fil-bidu tal-pipeline. L-indiċijiet issa jistgħu jkopru kwalunkwe stadju
Tagħżel li ma tuża aġġornamenti multipli
Metodu
jintuża biex jibdel parti minn dokument eżistenti jew id-dokument kollu, sa sostituzzjoni sħiħa, skont il-parametru li tispeċifika
. Dak li mhux daqshekk ovvju huwa li mhux se tipproċessa d-dokumenti kollha fil-ġbir sakemm ma tissettjax l-għażla
biex taġġorna d-dokumenti kollha li jissodisfaw il-kriterji tat-talba.
Tinsiex l-importanza tal-ordni taċ-ċwievet f'tabella hash
F'JSON, oġġett jikkonsisti f'kollezzjoni mhux ordnata ta' daqs żero jew aktar pari isem/valur, fejn l-isem huwa string u l-valur huwa string, numru, boolean, null, oġġett, jew firxa.
Sfortunatament, BSON tpoġġi ħafna enfasi fuq l-ordni meta tfittex. F'MongoDB, l-ordni taċ-ċwievet fi ħdan oġġetti mibnija { firstname: "Phil", surname: "factor" }
- dan mhux l-istess bħal { { surname: "factor", firstname: "Phil" }
. Jiġifieri, trid taħżen l-ordni tal-pari isem/valur fid-dokumenti tiegħek jekk trid tkun ċert li ssibhom.
M'għandekx tkun konfuż "Null" и "mhux definit"
Valur "mhux definit" qatt ma kien validu f'JSON, skond $null
, li mhux dejjem hija soluzzjoni tajba.
Użu $limit()
mingħajr $sort()
Spiss meta tkun qed tiżviluppa f'MongoDB, huwa utli li tara biss kampjun tar-riżultat li se jintbagħat lura minn mistoqsija jew aggregazzjoni. Għal dan il-kompitu ser ikollok bżonn $limit()
, iżda qatt m'għandu jkun fil-kodiċi finali sakemm ma tużahx qabel $sort
. Dan il-mekkanik huwa meħtieġ għax inkella ma tistax tiggarantixxi l-ordni tar-riżultat, u ma tkunx tista 'tara d-dejta b'mod affidabbli. Fil-quċċata tar-riżultat ikollok entrati differenti skont l-issortjar. Biex jaħdmu b'mod affidabbli, il-mistoqsijiet u l-aggregazzjonijiet għandhom ikunu deterministiċi, jiġifieri, jipproduċu l-istess riżultati kull darba li jiġu eżegwiti. Kodiċi li fih $limit()
, imma le $sort
, mhux se jkun deterministiku u sussegwentement jista 'jikkawża żbalji li se jkun diffiċli biex jintraċċaw.
Konklużjoni
L-uniku mod biex tkun diżappuntat b'MongoDB huwa li tqabbelha direttament ma 'tip ieħor ta' database, bħal DBMS, jew li tasal biex tużaha abbażi ta 'ċerti aspettattivi. Qisu tqabbel oranġjo ma’ furketta. Is-sistemi tad-database jaqdu skopijiet speċifiċi. L-aħjar huwa li sempliċement tifhem u tapprezza dawn id-differenzi għalik innifsek. Ikun tal-mistħija li tagħmel pressjoni fuq l-iżviluppaturi ta 'MongoDB fuq triq li sfurzathom fit-triq tad-DBMS. Irrid nara modi ġodda u interessanti biex issolvi problemi qodma, bħall-iżgurar tal-integrità tad-dejta u l-ħolqien ta’ sistemi tad-dejta li huma reżistenti għall-fallimenti u l-attakki malizzjużi.
L-introduzzjoni ta 'MongoDB tat-tranżazzjoni ACID fil-verżjoni 4.0 hija eżempju tajjeb ta' introduzzjoni ta 'titjib importanti b'mod innovattiv. Tranżazzjonijiet b'ħafna dokumenti u b'ħafna dikjarazzjonijiet issa huma atomiċi. Huwa wkoll possibbli li jiġi aġġustat iż-żmien meħtieġ biex jiġu akkwistati serraturi u jitterminaw tranżazzjonijiet mwaħħla, kif ukoll jinbidel il-livell ta 'iżolament.
Aqra iktar:
Sors: www.habr.com