Raksta tulkojums tika sagatavots kursu sÄkuma priekÅ”vakarÄ
Uzsver:
- Ir ÄrkÄrtÄ«gi svarÄ«gi izstrÄdÄt shÄmu, lai gan MongoDB tÄ nav obligÄta.
- TÄpat indeksiem ir jÄatbilst jÅ«su shÄmai un piekļuves modeļiem.
- Izvairieties no lielu objektu un lielu masīvu izmantoŔanas.
- Esiet piesardzīgs ar MongoDB iestatījumiem, īpaŔi, ja runa ir par droŔību un uzticamību.
- MongoDB nav vaicÄjumu optimizÄtÄja, tÄpÄc jums jÄbÅ«t uzmanÄ«giem, veicot vaicÄjuma darbÄ«bas.
Es ļoti ilgu laiku strÄdÄju ar datu bÄzÄm, bet tikai nesen atklÄju MongoDB. Ir dažas lietas, ko vÄlos zinÄt, pirms sÄku ar to strÄdÄt. Kad cilvÄkam jau ir pieredze noteiktÄ jomÄ, viÅam ir priekÅ”stats par to, kas ir datu bÄzes un ar ko viÅi nodarbojas. Cerot, ka citiem bÅ«tu vieglÄk saprast, es piedÄvÄju biežÄk pieļauto kļūdu sarakstu.
MongoDB servera izveide bez autentifikÄcijas
DiemžÄl MongoDB pÄc noklusÄjuma ir instalÄts bez autentifikÄcijas. DarbstacijÄm, kurÄm piekļūst lokÄli, Ŕī prakse ir normÄla. Bet, tÄ kÄ MongoDB ir daudzlietotÄju sistÄma, kurai patÄ«k izmantot lielus atmiÅas apjomus, bÅ«s labÄk, ja ievietosit to serverÄ« ar pÄc iespÄjas vairÄk RAM, pat ja to izmantosit tikai izstrÄdei. InstalÄÅ”ana serverÄ«, izmantojot noklusÄjuma portu, var bÅ«t problemÄtiska, it Ä«paÅ”i, ja pieprasÄ«jumÄ var izpildÄ«t jebkuru javascript kodu (piemÄram, $where
kÄ ideja priekÅ”
Ir vairÄkas autentifikÄcijas metodes, taÄu vienkÄrÅ”Äkais ir iestatÄ«t lietotÄja ID/paroli. Izmantojiet Å”o ideju, domÄjot par izdomÄtu autentifikÄciju, kuras pamatÄ ir
Neaizmirstiet saistīt savu uzbrukuma virsmu ar MongoDB
,
vai
. TÄ kÄ datu faili standarta MongoDB nav Å”ifrÄti, ir lietderÄ«gi palaist MongoDB ar
IzstrÄdÄjot Ä·Ädi, radÄs kļūda
MongoDB neizmanto shÄmu. Bet tas nenozÄ«mÄ, ka shÄma nav vajadzÄ«ga. Ja vÄlaties vienkÄrÅ”i saglabÄt dokumentus bez konsekventa parauga, to saglabÄÅ”ana var bÅ«t Ätra un vienkÄrÅ”a, taÄu vÄlÄk to izgÅ«Å”ana var bÅ«t sarežģīta.
Klasisks raksts "
Neaizmirstiet ŔķiroŔanas secību
Å Ä·iroÅ”anas secÄ«bas aizmirstÄ«ba var izraisÄ«t vairÄk neapmierinÄtÄ«bas un tÄrÄt vairÄk laika nekÄ jebkura cita nepareiza konfigurÄcija. PÄc noklusÄjuma MongoBD izmanto
Izveidojiet kolekcijas ar lieliem dokumentiem
MongoDB labprÄt mitinÄs lielus dokumentus lÄ«dz 16 MB kolekcijÄs un
Dokumentu veidoŔana ar lieliem masīviem
Dokumenti var saturÄt masÄ«vus. VislabÄk, ja elementu skaits masÄ«vÄ ir tÄlu no Äetrciparu skaitļa. Ja elementi masÄ«vam tiek pievienoti bieži, tas pÄrsniegs dokumentu, kurÄ tas ir, un tam bÅ«s jÄbÅ«t
MongoDB ir kaut kas nosaukts
VarÄtu domÄt, ka var iztikt bez masÄ«vu indeksÄÅ”anas. DiemžÄl indeksu trÅ«kums var radÄ«t citas problÄmas. TÄ kÄ dokumenti tiek skenÄti no sÄkuma lÄ«dz beigÄm, elementu meklÄÅ”ana masÄ«va beigÄs prasÄ«s ilgÄku laiku, un lielÄkÄ daļa ar Å”Ädu dokumentu saistÄ«to darbÄ«bu tiks
Neaizmirstiet, ka summÄÅ”anas posmu secÄ«bai ir nozÄ«me
Datu bÄzes sistÄmÄ ar vaicÄjumu optimizÄtÄju jÅ«su rakstÄ«tie vaicÄjumi ir paskaidrojumi par to, ko vÄlaties iegÅ«t, nevis kÄ to iegÅ«t. Å is mehÄnisms darbojas pÄc analoÄ£ijas ar pasÅ«tÄ«Å”anu restorÄnÄ: parasti jÅ«s vienkÄrÅ”i pasÅ«tÄt Ädienu un nesniedzat pavÄram detalizÄtus norÄdÄ«jumus.
VietnÄ MongoDB jÅ«s instruÄjat pavÄru. PiemÄram, jums ir jÄpÄrliecinÄs, ka dati tiek nosÅ«tÄ«ti cauri reduce
pÄc iespÄjas agrÄk, izmantojot cauruļvadu $match
Šø $project
, un ŔķiroÅ”ana notiek tikai pÄc tam reduce
, un meklÄÅ”ana notiek tieÅ”i vÄlamajÄ secÄ«bÄ. VaicÄjumu optimizÄtÄjs, kas novÄrÅ” nevajadzÄ«gu darbu, optimÄli sakÄrto darbÄ«bas un atlasa savienojuma veidus, var jÅ«s sabojÄt. Izmantojot MongoDB, jums ir lielÄka kontrole uz ÄrtÄ«bas rÄÄ·ina.
TÄdi rÄ«ki kÄ
ÄtrÄs ierakstÄ«Å”anas izmantoÅ”ana
Nekad neiestatiet MongoDB rakstÄ«Å”anas opcijÄm lielu Ätrumu, bet zemu uzticamÄ«bu. Å is režīms "fails un aizmirst" Ŕķiet Ätri, jo komanda tiek atgriezta pirms rakstÄ«Å”anas. Ja sistÄma avarÄ pirms datu ierakstÄ«Å”anas diskÄ, tÄ tiks zaudÄta un nonÄks nekonsekventÄ stÄvoklÄ«. Par laimi, 64 bitu MongoDB ir iespÄjota reÄ£istrÄÅ”ana.
MMAPv1 un WiredTiger krÄtuves dzinÄji izmanto reÄ£istrÄÅ”anu, lai to novÄrstu, lai gan WiredTiger var atjaunoties lÄ«dz pÄdÄjai konsekventai
ŽurnÄlu veidoÅ”ana nodroÅ”ina, ka datubÄze pÄc atkopÅ”anas ir konsekventÄ stÄvoklÄ« un saglabÄ visus datus, lÄ«dz tie tiek ierakstÄ«ti žurnÄlÄ. Ierakstu biežums tiek konfigurÄts, izmantojot parametru
.
Lai pÄrliecinÄtos par ierakstiem, pÄrliecinieties, vai konfigurÄcijas failÄ ir iespÄjota reÄ£istrÄÅ”ana
, un ierakstu biežums atbilst informÄcijas apjomam, ko varat atļauties zaudÄt.
KÄrtoÅ”ana bez indeksa
MeklÄjot un apkopojot, bieži vien ir nepiecieÅ”ams kÄrtot datus. CerÄsim, ka tas tiks izdarÄ«ts kÄdÄ no pÄdÄjiem posmiem pÄc rezultÄta filtrÄÅ”anas, lai samazinÄtu kÄrtojamo datu apjomu. Un pat Å”ajÄ gadÄ«jumÄ Å”Ä·iroÅ”anai jums bÅ«s nepiecieÅ”ams
Ja nav piemÄrota indeksa, MongoDB iztiks bez tÄ. Visu ievietoto dokumentu kopÄjÄ izmÄra atmiÅas ierobežojums ir 32 MB
MeklÄt bez indeksa atbalsta
MeklÄÅ”anas vaicÄjumi veic funkciju, kas ir lÄ«dzÄ«ga darbÄ«bai JOIN SQL. Lai tie darbotos vislabÄk, tiem ir nepiecieÅ”ams kÄ ÄrÄjÄs atslÄgas izmantotÄs atslÄgas vÄrtÄ«bas indekss. Tas nav acÄ«mredzams, jo izmantoÅ”ana nav atspoguļota explain()
. Å Ädi indeksi ir papildus ierakstÄ«tajam indeksam explain()
, ko savukÄrt izmanto cauruļvadu operatori $match
Šø $sort
, kad tie satiekas cauruļvada sÄkumÄ. Tagad indeksi var aptvert jebkuru posmu
AtteikÅ”anÄs no vairÄku atjauninÄjumu izmantoÅ”anas
Metode
izmanto, lai mainÄ«tu esoÅ”Ä dokumenta daļu vai visu dokumentu, lÄ«dz pat pilnÄ«gai nomaiÅai atkarÄ«bÄ no jÅ«su norÄdÄ«tÄ parametra
. Nav tik acÄ«mredzams, ka tas neapstrÄdÄs visus kolekcijas dokumentus, ja vien neiestatÄ«sit Å”o opciju
atjauninÄt visus dokumentus, kas atbilst pieprasÄ«juma kritÄrijiem.
Neaizmirstiet, cik svarÄ«ga ir atslÄgu secÄ«ba hash tabulÄ
SistÄmÄ JSON objekts sastÄv no nesakÄrtotas kolekcijas ar nulles lielumu vai vairÄkiem nosaukuma/vÄrtÄ«bas pÄriem, kur nosaukums ir virkne, bet vÄrtÄ«ba ir virkne, skaitlis, BÅ«la vÄrtÄ«ba, nulle, objekts vai masÄ«vs.
DiemžÄl BSON, veicot meklÄÅ”anu, lielu uzsvaru liek uz kÄrtÄ«bu. MongoDB atslÄgu secÄ«ba iebÅ«vÄtajos objektos { firstname: "Phil", surname: "factor" }
- tas nav tas pats, kas { { surname: "factor", firstname: "Phil" }
. Tas nozÄ«mÄ, ka dokumentos ir jÄsaglabÄ vÄrdu/vÄrtÄ«bu pÄru secÄ«ba, ja vÄlaties tos atrast.
Nejauciet "Nulle" Šø "nenoteikts"
VÄrtÄ«ba "nenoteikts" saskaÅÄ ar to nekad nebija derÄ«ga JSON $null
, kas ne vienmÄr ir labs risinÄjums.
Izmantot $limit()
bez $sort()
Diezgan bieži, izstrÄdÄjot MongoDB, ir lietderÄ«gi vienkÄrÅ”i redzÄt rezultÄta paraugu, kas tiks atgriezts no vaicÄjuma vai apkopojuma. Å im uzdevumam jums bÅ«s nepiecieÅ”ams $limit()
, taÄu tam nekad nevajadzÄtu bÅ«t galÄ«gajÄ kodÄ, ja vien to iepriekÅ” neizmantojat $sort
. Å is mehÄniÄ·is ir nepiecieÅ”ams, jo pretÄjÄ gadÄ«jumÄ jÅ«s nevarat garantÄt rezultÄta secÄ«bu un nevarÄsit ticami apskatÄ«t datus. RezultÄta augÅ”daÄ¼Ä jÅ«s saÅemsiet dažÄdus ierakstus atkarÄ«bÄ no ŔķiroÅ”anas. Lai vaicÄjumi un apkopojumi darbotos uzticami, tiem ir jÄbÅ«t deterministiskiem, tas ir, jÄrada vienÄdi rezultÄti katru reizi, kad tie tiek izpildÄ«ti. Kods, kas satur $limit()
, bet nÄ $sort
, nebÅ«s noteicoÅ”s un pÄc tam var izraisÄ«t kļūdas, kuras bÅ«s grÅ«ti izsekot.
SecinÄjums
VienÄ«gais veids, kÄ bÅ«t vÄ«lies ar MongoDB, ir to tieÅ”i salÄ«dzinÄt ar cita veida datubÄzi, piemÄram, DBVS, vai sÄkt to izmantot, pamatojoties uz noteiktÄm cerÄ«bÄm. Tas ir tÄpat kÄ salÄ«dzinÄt apelsÄ«nu ar dakÅ”iÅu. Datu bÄzes sistÄmas kalpo Ä«paÅ”iem mÄrÄ·iem. VislabÄk ir vienkÄrÅ”i saprast un novÄrtÄt Ŕīs atŔķirÄ«bas paÅ”am. BÅ«tu kauns izdarÄ«t spiedienu uz MongoDB izstrÄdÄtÄjiem par ceļu, kas viÅus piespieda izmantot DBVS ceļu. Es vÄlos redzÄt jaunus un interesantus veidus, kÄ atrisinÄt vecas problÄmas, piemÄram, nodroÅ”inÄt datu integritÄti un izveidot datu sistÄmas, kas ir izturÄ«gas pret neveiksmÄm un ļaunprÄtÄ«giem uzbrukumiem.
MongoDB ACID transakciju ievieÅ”ana versijÄ 4.0 ir labs piemÄrs svarÄ«gu uzlabojumu ievieÅ”anai novatoriskÄ veidÄ. VairÄku dokumentu un vairÄku paziÅojumu darÄ«jumi tagad ir nozÄ«mÄ«gi. TÄpat iespÄjams regulÄt laiku, kas nepiecieÅ”ams slÄdzeÅu iegÅ«Å”anai un iestrÄguÅ”o darÄ«jumu pÄrtraukÅ”anai, kÄ arÄ« mainÄ«t izolÄcijas lÄ«meni.
LasÄ«t vairÄk:
Avots: www.habr.com