MongoDB-rekin hasi aurretik jakin nahiko nituzke 14 gauza

Ikastaroa hasi bezperan prestatu zen artikuluaren itzulpena "Datu ez-erlazionalak".

MongoDB-rekin hasi aurretik jakin nahiko nituzke 14 gauza

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

Hainbat autentifikazio metodo daude, baina errazena erabiltzaile ID/pasahitza ezartzea da. Erabili ideia hau oinarritutako autentifikazio dotoreari buruz pentsatzen duzun bitartean LDAP. Segurtasunari dagokionez, MongoDB etengabe eguneratu behar da, eta erregistroak beti egiaztatu behar dira baimenik gabeko sarbidea duten. Adibidez, portu lehenetsi gisa beste ataka bat hautatzea gustatzen zait.

Ez ahaztu zure eraso-azalera MongoDB-ri lotzea

MongoDB Segurtasun-zerrenda sarean sartzeko arriskua murrizteko aholku onak eta datu-ihesak daude. Erraza da ezabatzea eta esatea garapen zerbitzari batek ez duela segurtasun maila handirik behar. Hala ere, ez da hain erraza eta hau MongoDB zerbitzari guztiei aplikatzen zaie. Bereziki, erabiltzeko arrazoi sendorik ez badago mapReduce, group edo $non, JavaScript-en kode arbitrarioaren erabilera desgaitu behar duzu konfigurazio fitxategian idatziz javascriptEnabled:false. Datu-fitxategiak MongoDB estandarrean zifratzen ez direnez, zentzuzkoa da MongoDB-rekin exekutatzeko Erabiltzaile dedikatua, fitxategietarako sarbide osoa duena, horretarako sarbide mugatua duena soilik eta sistema eragilearen fitxategien sarbide-kontrolak erabiltzeko gaitasuna duena.

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. madarikatua gogorra.

Artikulu klasikoa "MongoDB eskemaren diseinurako 6 oinarrizko arauak" Irakurtzea merezi du, eta antzeko ezaugarriak Eskema esploratzailea hirugarrenen Studio 3T tresnan, merezi du zirkuituen ohiko egiaztapenetarako erabiltzea.

Ez ahaztu ordenaren ordena

Ordena ahazteak beste edozein konfigurazio oker baino frustrazio gehiago eta denbora gehiago gal dezake. Lehenespenez MongoBD erabiltzen du ordena bitarra. Baina nekez izango da inori erabilgarria. Maiuskulak eta minuskulak bereizten zituzten, azentuarekiko eta bitar motak anakronismo bitxitzat hartzen ziren aleekin, caftanekin eta bibote kizkurrekin batera joan den mendeko 80ko hamarkadan. Orain haien erabilera barkaezina da. Bizitza errealean, "motozikleta" "Motozikleta" berdina da. Eta "Britainia Handia" eta "Britainia Handia" leku bera dira. Letra xehea letra larriaren baliokidea besterik ez da. Eta ez nazazu hasi diakritikoak ordenatzen. MongoDB-n datu-base bat sortzean, erabili azentuarekiko sentikortasunik gabeko bilketa eta erregistratu, hizkuntzari dagozkionak eta sistemaren erabiltzaileen kultura. Horrek asko erraztuko du kateen datuen bidez bilatzeko.

Sortu bildumak dokumentu handiekin

MongoDB pozik dago bildumetan 16 MB arteko dokumentu handiak ostatzeaz, eta GridFS 16 MB baino gehiagoko dokumentu handietarako diseinatua. Baina dokumentu handiak bertan jar daitezkeenez, bertan gordetzea ez da ideia ona. MongoDB-k ondoen funtzionatuko du kilobyte gutxiko tamaina duten dokumentu indibidualak gordetzen badituzu, SQL taula zabal bateko errenkadak bezala tratatuz. Dokumentu handiak arazoen iturri izango dira produktibitatea.

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. mugitu, hau da, beharrezkoa izango da eguneratu indizeak ere. Dokumentu bat matrize handi batekin berriro indexatzen denean, indizeak sarritan gainidatziko dira, bat dagoelako. erregistro, bere indizea gordetzen duena. Berriro indexatze hori dokumentu bat txertatu edo ezabatzen denean ere gertatzen da.

MongoDB izeneko zerbait du "betetze faktorea", dokumentuak hazteko lekua eskaintzen duena arazo hori gutxitzeko.
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. motela.

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 Estudioa 3T agregazio-kontsulten eraikuntza erraztuko du MongoDB. Aggregation Editor eginbideari esker, kanalizazio-adierazpenak etapa batean aplika ditzakezu eta fase bakoitzean sarrera- eta irteera-datuak ikuskatu, arazketa errazteko.

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. kontrol puntua, erregistroa desgaituta badago.

Egunkariak bermatzen du datu-basea egoera koherentean dagoela berreskuratu ondoren eta datu guztiak gordetzen ditu aldizkarian idatzi arte. Grabaketen maiztasuna parametroa erabiliz konfiguratzen da commitIntervalMs.

Sarrerak ziurtatzeko, ziurtatu erregistroa gaituta dagoela konfigurazio fitxategian (storage.journal.enabled), 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 aurkibidea. Indize bakarra edo konposatua erabil dezakezu.

Indize egokirik ez badago, MongoDB-k gabe geratuko da. 32 MB-ko memoria-muga dago dokumentu guztien guztizko tamainan ordenatzeko eragiketak, eta MongoDB muga horretara iristen bada, errore bat botako du edo itzuliko du erregistro multzo hutsa.

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 agregazio kanalizazioa.

Eguneratze anitzak erabiltzeari uko egitea

Метод db.collection.update() Lehendik dagoen dokumentu baten zati bat edo dokumentu osoa aldatzeko erabiltzen da, ordezkapen osoa arte, zehazten duzun parametroaren arabera. update. Hain agerikoa ez dena da bildumako dokumentu guztiak ez dituela prozesatuko aukera ezarri ezean multi 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 gaietan, hau da. { 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 estandar ofiziala JSON (ECMA-404 5. atala), JavaScript-en erabiltzen den arren. Gainera, BSONrentzat zaharkituta dago eta bihurtzen da $null, eta hori ez da beti irtenbide ona. Saihestu erabiltzea "definitua" MongoDB-n.

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.

MongoDB-rekin hasi aurretik jakin nahiko nituzke 14 gauza

Irakurri gehiago:

Iturria: www.habr.com

Gehitu iruzkin berria