14-il ħaġa li nixtieq inkun naf qabel ma nibda b'MongoDB

It-traduzzjoni tal-artiklu tħejjiet lejlet il-bidu tal-kors "Databases mhux relazzjonali".

14-il ħaġa li nixtieq inkun naf qabel ma nibda b'MongoDB

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 injezzjonijiet).

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 LDAP. Fejn tidħol is-sigurtà, MongoDB għandu jiġi aġġornat kontinwament, u zkuk għandhom dejjem jiġu ċċekkjati għal aċċess mhux awtorizzat. Pereżempju, inħobb nagħżel port differenti bħala l-port default.

Tinsiex torbot il-wiċċ tal-attakk tiegħek ma' MongoDB

Lista ta' Kontroll tas-Sigurtà MongoDB fih suġġerimenti tajbin biex jitnaqqas ir-riskju ta 'intrużjoni tan-netwerk u tnixxija tad-dejta. Huwa faċli li tneħħiha u tgħid li server ta 'żvilupp m'għandux bżonn livell għoli ta' sigurtà. Madankollu, mhuwiex daqshekk sempliċi u dan japplika għas-servers MongoDB kollha. B'mod partikolari, jekk ma jkunx hemm raġuni konvinċenti għall-użu mapReduce, group jew $fejn, trid tiddiżattiva l-użu ta' kodiċi arbitrarju f'JavaScript billi tikteb fil-fajl tal-konfigurazzjoni javascriptEnabled:false. Peress li l-fajls tad-dejta mhumiex encrypted f'MongoDB standard, jagħmel sens li tmexxi MongoDB biha Utent Dedikat, li għandha aċċess sħiħ għall-fajls, b'aċċess limitat għaliha biss u l-abbiltà li tuża l-kontrolli tal-aċċess għall-fajls tas-sistema operattiva stess.

Ż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. kkritikat iebes.

Artiklu klassiku "6 Regoli ġenerali għad-Disinn tal-Iskema MongoDB" Ta 'min taqra, u karatteristiċi simili Skema Explorer fl-għodda ta 'parti terza Studio 3T, ta' min juża għal kontrolli regolari ta 'ċirkwiti.

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 tip binarju. Iżda x'aktarx li ma jkunx utli għal xi ħadd. Tipi binarji sensittivi għall-każi, sensittivi għall-aċċent, kienu meqjusa bħala anakroniżmi kurjużi flimkien ma 'żibeġ, caftans u mustaċċi kaboċċi lura fis-snin 80 tas-seklu li għadda. Issa l-użu tagħhom huwa unforgivable. Fil-ħajja reali, "mutur" huwa l-istess bħal "Mutur". U "Gran Brittanja" u "Gran Brittanja" huma l-istess post. Ittra zgħar hija sempliċement l-ekwivalenti kbar ta' ittra kapitali. U nibdax fuq issortjar dijakritiċi. Meta toħloq database f'MongoDB, uża kollazzjoni mhux sensittiva għall-aċċent u jirreġistra, li jikkorrispondu mal-lingwa u kultura tal-utent tas-sistema. Dan se jagħmel it-tiftix permezz ta 'data ta' string ħafna aktar faċli.

Oħloq kollezzjonijiet b'dokumenti kbar

MongoDB huwa kuntent li jospita dokumenti kbar sa 16MB f'kollezzjonijiet, u GridFS Iddisinjat għal dokumenti kbar akbar minn 16 MB. Iżda sempliċement minħabba li dokumenti kbar jistgħu jitqiegħdu hemm, il-ħażna tagħhom ma tkunx idea tajba. MongoDB jaħdem l-aħjar jekk taħżen dokumenti individwali li għandhom daqs ta 'ftit kilobytes, u jittrattawhom aktar bħal ringieli f'tabella SQL wiesgħa. Dokumenti kbar se jkunu sors ta 'problemi produttività.

Ħ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 jimxu, li jfisser li se jkun meħtieġ taġġorna l-indiċi wkoll. Meta jerġa’ jiġi indiċjat dokument b’firxa kbira, l-indiċi ta’ spiss jiġu miktuba fuq il-post, peress li hemm rekord, li jaħżen l-indiċi tiegħu. Din l-indiċjar mill-ġdid iseħħ ukoll meta dokument jiddaħħal jew jitħassar.

MongoDB għandu xi ħaġa msejħa "fattur tal-mili", li jipprovdi spazju għal dokumenti biex jikbru biex jimminimizzaw din il-problema.
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 bil-mod.

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 Studio 3T se jissimplifika l-kostruzzjoni ta 'mistoqsijiet ta' aggregazzjoni fi MongoDB. Il-karatteristika tal-Editur tal-Aggregazzjoni tippermettilek li tapplika dikjarazzjonijiet tal-pipeline stadju wieħed kull darba, u tispezzjona d-dejta tal-input u tal-ħruġ f'kull stadju għal debugging aktar faċli.

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. punt ta' kontroll, jekk il-logging huwa diżattivat.

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 commitIntervalMs.

Biex tkun ċert mill-entrati, kun żgur li l-illoggjar huwa attivat fil-fajl tal-konfigurazzjoni (storage.journal.enabled), 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 indiċi. Tista' tuża indiċi wieħed jew kompost.

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 operazzjonijiet ta' għażla, u jekk MongoDB jilħaq dan il-limitu, allura jew jitfa' żball jew jirritorna recordset vojta.

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 pipeline ta' aggregazzjoni.

Tagħżel li ma tuża aġġornamenti multipli

Metodu db.collection.update() jintuża biex jibdel parti minn dokument eżistenti jew id-dokument kollu, sa sostituzzjoni sħiħa, skont il-parametru li tispeċifika update. Dak li mhux daqshekk ovvju huwa li mhux se tipproċessa d-dokumenti kollha fil-ġbir sakemm ma tissettjax l-għażla multi 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 kwistjonijietjiġifieri { 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 standard uffiċjali JSON (ECMA-404 Taqsima 5), ​​minkejja li jintuża f'JavaScript. Barra minn hekk, għal BSON huwa deprecated u konvertit għal $null, li mhux dejjem hija soluzzjoni tajba. Evita li tuża "mhux definit" f'MongoDB.

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.

14-il ħaġa li nixtieq inkun naf qabel ma nibda b'MongoDB

Aqra iktar:

Sors: www.habr.com

Żid kumment