Ikastaroa hasi bezperan prestatu zen artikuluaren itzulpena
Nabarmenak:
- Oso garrantzitsua da eskema bat garatzea MongoDB-n aukerakoa den arren.
- Era berean, indizeek zure eskema eta sarbide-ereduekin bat etorri behar dute.
- Saihestu objektu handiak eta array handiak erabiltzea.
- Kontuz ibili MongoDB ezarpenekin, batez ere segurtasunari eta fidagarritasunari dagokionez.
- MongoDB-k ez du kontsulta-optimizatzailerik, beraz kontuz ibili behar duzu kontsulta-eragiketak egiterakoan.
Oso denbora luzea daramat datu-baseekin lanean, baina duela gutxi aurkitu dut MongoDB. Berarekin lanean hasi aurretik jakin nahiko nituzke gauza batzuk. Pertsona batek dagoeneko esperientzia duen esparru jakin batean, datu-baseak zer diren eta zer egiten duten buruzko aurreiritziak ditu. Besteek ulertzea errazteko asmoz, ohiko akatsen zerrenda aurkezten dut.
MongoDB zerbitzaria autentifikaziorik gabe sortzea
Zoritxarrez, MongoDB autentifikaziorik gabe instalatzen da lehenespenez. Lokalean sartutako lan-estazio baterako, praktika hau normala da. Baina MongoDB memoria kopuru handiak erabiltzea gustatzen zaion erabiltzaile anitzeko sistema denez, hobe izango da ahalik eta RAM gehien duen zerbitzari batean jartzen baduzu, nahiz eta garapenerako soilik erabiliko duzun. Zerbitzarian ataka lehenetsiaren bidez instalatzea arazotsua izan daiteke, batez ere eskaeran javascript kodea exekutatu badaiteke (adibidez, $where
ideia gisa
Hainbat autentifikazio metodo daude, baina errazena erabiltzaile ID/pasahitza ezartzea da. Erabili ideia hau oinarritutako autentifikazio dotoreari buruz pentsatzen duzun bitartean
Ez ahaztu zure eraso-azalera MongoDB-ri lotzea
,
edo
. Datu-fitxategiak MongoDB estandarrean zifratzen ez direnez, zentzuzkoa da MongoDB-rekin exekutatzeko
Errorea zirkuitua garatzean
MongoDB-k ez du eskemarik erabiltzen. Baina horrek ez du esan nahi eskema beharrezkoa ez denik. Dokumentuak eredu koherenterik gabe gorde nahi badituzu, erraza eta azkarra izan daiteke gordetzea, baina gero berreskuratzea zaila izan daiteke.
Artikulu klasikoa "
Ez ahaztu ordenaren ordena
Ordena ahazteak beste edozein konfigurazio oker baino frustrazio gehiago eta denbora gehiago gal dezake. Lehenespenez MongoBD erabiltzen du
Sortu bildumak dokumentu handiekin
MongoDB pozik dago bildumetan 16 MB arteko dokumentu handiak ostatzeaz, eta
Array handiekin dokumentuak sortzea
Dokumentuek matrizeak izan ditzakete. Hobe da matrizeko elementu kopurua lau zifrako zenbakitik urrun badago. Elementuak array bati maiz gehitzen bazaizkio, berau duen dokumentua gaindituko da eta izan beharko du.
MongoDB izeneko zerbait du
Array indexatu gabe egin dezakezula pentsa dezakezu. Zoritxarrez, indizeen faltak beste arazo batzuk sor ditzake. Dokumentuak hasieratik amaierara eskaneatzen direnez, matrizearen amaierako elementuak bilatzea luzeagoa izango da, eta dokumentu horrekin lotutako eragiketa gehienak egingo dira.
Ez ahaztu agregazio batean faseen ordenak garrantzia duela
Kontsulta-optimizatzaile bat duen datu-base-sistema batean, idazten dituzun kontsultak lortu nahi duzunaren azalpenak dira, ez nola lortu. Mekanismo honek jatetxe batean eskatzearen analogia funtzionatzen du: normalean plater bat eskatu besterik ez duzu eta ez dizkiozu argibide zehatzik ematen sukaldariari.
MongoDBn, zuk sukaldariari agintzen diozu. Adibidez, datuak igarotzen direla ziurtatu behar duzu reduce
ahalik eta goiz hoditeria erabiliz $match
и $project
, eta ordenatzea ondoren bakarrik gertatzen da reduce
, eta bilaketa nahi duzun ordenan egiten dela. Alferrikako lana ezabatzen duen kontsulta-optimizatzaile bat izateak, urratsak modu egokian sekuentziatu eta elkartze motak hautatzen dituenak hondatu egin zaitu. MongoDB-rekin, kontrol gehiago duzu erosotasunaren truke.
bezalako tresnak
Grabaketa azkarra erabiliz
Inoiz ez ezarri MongoDB idazteko aukerak abiadura handiko baina fidagarritasun baxua izateko. Modu hau "fitxatu eta ahaztu" azkarra dirudi, komandoa idazketa gertatu baino lehen itzultzen delako. Datuak diskoan idatzi aurretik sistema huts egiten badu, galdu egingo da eta egoera inkoherentean amaituko da. Zorionez, 64 biteko MongoDB erregistroa gaituta dauka.
MMAPv1 eta WiredTiger biltegiratze-motorrek erregistroa erabiltzen dute hori saihesteko, nahiz eta WiredTiger azken koherentziara berreskuratu.
Egunkariak bermatzen du datu-basea egoera koherentean dagoela berreskuratu ondoren eta datu guztiak gordetzen ditu aldizkarian idatzi arte. Grabaketen maiztasuna parametroa erabiliz konfiguratzen da
.
Sarrerak ziurtatzeko, ziurtatu erregistroa gaituta dagoela konfigurazio fitxategian
, eta grabaketen maiztasuna galdu dezakezun informazio kopuruari dagokio.
Indizerik gabe ordenatzea
Bilatzean eta agregazioan, askotan datuak ordenatu beharra dago. Espero dezagun hori azken faseetako batean egiten dela, emaitza iragazi ondoren, ordenatzen ari diren datu kopurua murrizteko. Eta kasu honetan ere, ordenatzeko beharko duzu
Indize egokirik ez badago, MongoDB-k gabe geratuko da. 32 MB-ko memoria-muga dago dokumentu guztien guztizko tamainan
Bilatu indize-laguntzarik gabe
Bilaketa-kontsultek SQL-n JOIN eragiketaren antzeko funtzioa betetzen dute. Ondoen funtzionatzeko, kanpoko gako gisa erabiltzen den gakoaren balioaren indizea behar dute. Hau ez da begi bistakoa erabilera ez delako islatzen explain()
. Horrelako indizeak idatzitako indizearen osagarri dira explain()
, kanalizazio-operadoreek erabiltzen dutena $match
и $sort
, hodiaren hasieran elkartzen direnean. Indizeek orain edozein etapa estal dezakete
Eguneratze anitzak erabiltzeari uko egitea
Метод
Lehendik dagoen dokumentu baten zati bat edo dokumentu osoa aldatzeko erabiltzen da, ordezkapen osoa arte, zehazten duzun parametroaren arabera.
. Hain agerikoa ez dena da bildumako dokumentu guztiak ez dituela prozesatuko aukera ezarri ezean
eskaera-irizpideak betetzen dituzten dokumentu guztiak eguneratzeko.
Ez ahaztu hash taula batean gakoen ordenak duen garrantzia
JSON-n, objektu bat tamaina zero edo izen/balio bikote gehiagoko ordenatu gabeko bilduma batek osatzen du, non izena kate bat den eta balioa kate, zenbaki, boolear, nulu, objektu edo matrize bat den.
Zoritxarrez, BSONek ordenari garrantzia handia ematen dio bilaketan. MongoDB-n, barneratutako objektuen gakoen ordena { firstname: "Phil", surname: "factor" }
- hau ez da berdina { { surname: "factor", firstname: "Phil" }
. Hau da, izen/balio bikoteen ordena gorde behar duzu dokumentuetan aurkituko dituzula ziur egon nahi baduzu.
Ez zaitez nahastu "Nulua" и "definitua"
Balio "definitua" JSON-n ez zen inoiz baliozkoa izan, dioenez $null
, eta hori ez da beti irtenbide ona.
Erabili $limit()
gabe $sort()
Askotan MongoDB-n garatzen ari zarenean, erabilgarria da kontsulta edo agregazio batetik itzuliko den emaitzaren lagin bat ikustea. Zeregin honetarako beharko duzu $limit()
, baina ez luke inoiz azken kodean egon behar aurretik erabili ezean $sort
. Mekanika hau beharrezkoa da, bestela ezin duzulako emaitzaren ordena bermatu, eta ezin izango dituzu datuak fidagarri ikusi. Emaitzaren goialdean sarrera desberdinak jasoko dituzu ordenazioaren arabera. Era fidagarrian lan egiteko, kontsultak eta agregazioak deterministikoak izan behar dira, hau da, exekutatzen diren bakoitzean emaitza berdinak eman. daukan kodea $limit()
, baina ez $sort
, ez da deterministikoa izango eta, ondoren, aurkitzea zaila izango den akatsak sor ditzake.
Ondorioa
MongoDB-rekin etsita egoteko modu bakarra beste datu-base mota batekin alderatzea da, adibidez, DBMS batekin, edo itxaropen batzuen arabera erabiltzera iristea. Laranja bat sardexka batekin alderatzea bezalakoa da. Datu-base sistemek helburu zehatzak betetzen dituzte. Hobe da desberdintasun horiek zeure buruari ulertzea eta balioestea. Pena litzateke MongoDBko garatzaileak DBMS bidetik behartzen dituen bide baten aurrean presionatzea. Arazo zaharrak konpontzeko modu berri eta interesgarriak ikusi nahi ditut, hala nola, datuen osotasuna bermatzea eta porrot eta eraso maltzurren aurrean erresistenteak diren datu-sistemak sortzea.
MongoDB-ek ACID transakzionaltasuna 4.0 bertsioan sartzea hobekuntza garrantzitsuak modu berritzailean sartzearen adibide ona da. Dokumentu anitzeko eta adierazpen anitzeko transakzioak atomikoak dira gaur egun. Era berean, blokeoak eskuratzeko eta trabatuta dauden transakzioak amaitzeko behar den denbora egokitu daiteke, baita isolamendu maila aldatzea ere.
Irakurri gehiago:
Iturria: www.habr.com