{"id":95148,"date":"2020-09-25T19:43:09","date_gmt":"2020-09-25T17:43:09","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/14-veshhej-kotorye-ya-hotel-by-znat-pered-nachalom-raboty-s-mongodb"},"modified":"2020-09-25T19:43:09","modified_gmt":"2020-09-25T17:43:09","slug":"14-veshhej-kotorye-ya-hotel-by-znat-pered-nachalom-raboty-s-mongodb","status":"publish","type":"post","link":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/14-veshhej-kotorye-ya-hotel-by-znat-pered-nachalom-raboty-s-mongodb","title":{"rendered":"14 ting, jeg gerne ville have vidst, f\u00f8r jeg startede med MongoDB","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><b><i>Overs\u00e6ttelsen af artiklen er udarbejdet forud for begyndelsen af kurset <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/ZRL1\/\">\u00abIkkerelationsdatabaser\u00bb<\/a><\/noindex>.<\/i><\/b><\/p>\n<p><img decoding=\"async\" alt=\"14 ting, jeg gerne ville have vidst, f\u00f8r jeg startede med MongoDB\" src=\"\/wp-content\/uploads\/2020\/09\/9b4979be27e0090543b28150d90fa8df.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Hovedpunkter:<\/p>\n<ul>\n<li>Det er yderst vigtigt at udvikle et skema, selvom det ikke er obligatorisk i MongoDB.<\/li>\n<li>P\u00e5 samme m\u00e5de skal indekserne svare til dit skema og adgangsm\u00f8nstre. <\/li>\n<li>Undg\u00e5 at bruge store objekter og store arrays.<\/li>\n<li>V\u00e6r opm\u00e6rksom p\u00e5 indstillingerne for MongoDB, is\u00e6r n\u00e5r det g\u00e6lder sikkerhed og p\u00e5lidelighed.<\/li>\n<li>Der er ingen foresp\u00f8rgselsoptimerer i MongoDB, s\u00e5 du skal v\u00e6re forsigtig, n\u00e5r du udf\u00f8rer foresp\u00f8rgselsoperationer.<\/li>\n<\/ul>\n<p>\nJeg har arbejdet med databaser i lang tid, men f\u00f8rst for nylig opdagede jeg MongoDB. Der er flere ting, jeg gerne ville have vidst, f\u00f8r jeg begyndte at arbejde med det. N\u00e5r en person allerede har erfaring inden for et bestemt omr\u00e5de, har de forudindtagede forestillinger om, hvad databaser er, og hvad de g\u00f8r. For at lette forst\u00e5elsen for andre pr\u00e6senterer jeg en liste over almindelige fejltagelser.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>At oprette en MongoDB-server uden godkendelse<\/h3>\n<p>\nDesv\u00e6rre bliver MongoDB som standard installeret uden godkendelse. For en arbejdstation, der tilg\u00e5s lokalt, er denne praksis acceptabel. Men da MongoDB er et multibruger-system, der elsker at bruge store m\u00e6ngder hukommelse, vil det v\u00e6re bedre at installere det p\u00e5 en server med den maksimale mulige m\u00e6ngde RAM i dine forhold, selvom du kun har t\u00e6nkt dig at bruge den til udvikling. En installation p\u00e5 server via standardporten kan v\u00e6re problematisk, is\u00e6r hvis der kan udf\u00f8res godkendt javascript-kode i foresp\u00f8rgslen (f.eks. <code>$where<\/code> som en id\u00e9 til <noindex><a rel=\"nofollow\" href=\"https:\/\/lockmedown.com\/securing-node-js-mongodb-security-injection-attacks\/\">injektion<\/a><\/noindex>). <\/p>\n<p>Der er flere godkendelsesmetoder, men det nemmeste er at s\u00e6tte et ID\/password for brugeren. Brug denne id\u00e9, mens du overvejer en mere kreativ godkendelse baseret p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/core\/security-ldap-external\/\">LDAP<\/a><\/noindex>. N\u00e5r det kommer til sikkerhed, skal MongoDB konstant opdateres, og logfilerne skal altid kontrolleres for uautoriseret adgang. Jeg kan f.eks. godt lide at v\u00e6lge en anden port som standardport.<\/p>\n<h3>Glem ikke at binde angrebsoverfladen til MongoDB<\/h3>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/administration\/security-checklist\/\">Tjekliste for sikring af MongoDB<\/a><\/noindex> indeholder gode r\u00e5d til at mindske risikoen for netv\u00e6rksindtr\u00e6ngen og datal\u00e6k. Det er let at affeje og sige, at en udviklingsserver ikke har brug for et h\u00f8jt sikkerhedsniveau. Men det er ikke s\u00e5 enkelt, og dette g\u00e6lder for alle MongoDB-servere. Is\u00e6r hvis der ikke er en god grund til at bruge <code><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/command\/mapReduce\/#dbcmd.mapReduce\">mapReduce<\/a><\/noindex><\/code>, <code><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/command\/group\/#dbcmd.group\">gruppe<\/a><\/noindex><\/code> eller <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/operator\/query\/where\/#op._S_where\">$where<\/a><\/noindex>, skal du deaktivere brugen af vilk\u00e5rlig kode i JavaScript ved at skrive i konfigurationsfilen <code><noindex><a rel=\"nofollow\" href=\"https:\/\/lockmedown.com\/securing-node-js-mongodb-security-injection-attacks\/\">javascriptAktiveret:false<\/a><\/noindex><\/code>. Da standard MongoDB-databaser ikke er krypteret, er det fornuftigt at k\u00f8re MongoDB med <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/administration\/security-checklist\/#run-mongodb-with-a-dedicated-user\">Dedikeret Bruger<\/a><\/noindex>, som har fuld adgang til filerne, med begr\u00e6nset adgang kun for ham og muligheden for at bruge egne midler til filadgangskontrol fra operativsystemet.<\/p>\n<h3>Fejl ved skemadesign<\/h3>\n<p>\nMongoDB bruger ikke et schema. Men det betyder ikke, at et schema ikke er n\u00f8dvendigt. Hvis du blot vil opbevare dokumenter uden et sammenh\u00e6ngende schema, kan du hurtigt og nemt gemme dem, men det kan v\u00e6re <noindex><a rel=\"nofollow\" href=\"https:\/\/www.compose.com\/articles\/mongodb-with-and-without-schemas\/\">temmelig besv\u00e6rligt<\/a><\/noindex>. <\/p>\n<p>Den klassiske artikel \u201c<i><noindex><a rel=\"nofollow\" href=\"https:\/\/www.mongodb.com\/blog\/post\/6-rules-of-thumb-for-mongodb-schema-design-part-1\">6 empiriske regler for design af MongoDB-schemer\u201d<\/a><\/noindex><\/i> er v\u00e6rd at l\u00e6se, og funktioner som <noindex><a rel=\"nofollow\" href=\"https:\/\/studio3t.com\/knowledge-base\/articles\/schema-explorer\/\">Schema Explorer<\/a><\/noindex> i det tredjeparts v\u00e6rkt\u00f8j Studio 3T, b\u00f8r bruges til regelm\u00e6ssige skemaeftersyn.<\/p>\n<h3>Glem ikke sorteringsr\u00e6kkef\u00f8lgen<\/h3>\n<p>\nAt glemme sorteringsr\u00e6kkef\u00f8lgen kan f\u00f8re til den st\u00f8rste skuffelse og tage mere tid end at bruge enhver anden forkert konfiguration. Som standard bruger MongoDB <noindex><a rel=\"nofollow\" href=\"https:\/\/jira.mongodb.org\/browse\/SERVER-1920\">binariesortering<\/a><\/noindex>. Men det er n\u00e6ppe nyttigt for nogen. Case-sensitive, aksentuerede, bin\u00e6re sorteringer blev anset for nysgerrige anachronismer sammen med perler, kaftaner og kr\u00f8llede oversk\u00e6g tilbage i 80\u2019erne. Nu er deres brug uacceptabel. I den virkelige verden er \u201cmotorcykel\u201d det samme som \u201cMotorcykel\u201d. Og \u201cBritannien\u201d og \u201cbritannia\u201d er det samme sted. Sm\u00e5 bogstaver er blot den lille bogstavers \u00e6kvivalent af store bogstaver. Og lad mig ikke starte p\u00e5 sortering af diakritiske tegn. N\u00e5r du opretter en database i MongoDB, skal du bruge sorteringsparametre uden hensyn til aksenter og <noindex><a rel=\"nofollow\" href=\"https:\/\/weblogs.sqlteam.com\/dang\/archive\/2009\/07\/26\/Collation-Hell-Part-1.aspx\">store bogstaver<\/a><\/noindex>, som svarer til sproget og <noindex><a rel=\"nofollow\" href=\"https:\/\/derickrethans.nl\/mongodb-collation-revised.html\">kulturen for systembrugerens<\/a><\/noindex>. Dette vil betydeligt lette s\u00f8gning af strenge data.<\/p>\n<h3>Oprettelse af samlinger med store dokumenter<\/h3>\n<p>\nMongoDB er glad for at kunne opbevare store dokumenter p\u00e5 op til 16 MB i samlinger, og <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/core\/gridfs\/#gridfs\">GridFS<\/a><\/noindex> er designet til store dokumenter, der overstiger 16 MB. Men blot fordi store dokumenter kan opbevares der, er det ikke den bedste id\u00e9 at gemme dem der. Det fungerer bedst, hvis du opbevarer separate dokumenter p\u00e5 flere kilobyte, og betragter dem mere som r\u00e6kker i en bred SQL-tabel. Store dokumenter vil skabe problemer med <noindex><a rel=\"nofollow\" href=\"https:\/\/www.reddit.com\/r\/mongodb\/comments\/573fqr\/question_mongodb_terrible_performance_for_a\/\">ydelsen<\/a><\/noindex>.<\/p>\n<h3>Oprettelse af dokumenter med store arrays <\/h3>\n<p>\nDokumenter kan indeholde arrays. Det er bedst, hvis antallet af elementer i arrayet er langt fra fire cifre. Hvis der ofte tilf\u00f8jes elementer til arrayet, vil det vokse ud over det dokument, der indeholder det, og det bliver n\u00f8dvendigt at <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.mongodb.org\/manual\/core\/data-model-operations\/#document-growth\">flytte det<\/a><\/noindex>, s\u00e5 det bliver n\u00f8dvendigt at <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.mongodb.org\/manual\/core\/write-performance\/#document-growth\">opdatere og indekserne<\/a><\/noindex>. N\u00e5r dokumentet med et stort array genindekseres, vil indekser ofte blive overskrevet, da der findes <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.mongodb.org\/manual\/core\/index-multikey\/\">poster<\/a><\/noindex>, der gemmer dets indeks. En s\u00e5dan genindeksering finder ogs\u00e5 sted, n\u00e5r et dokument inds\u00e6ttes eller slettes. <\/p>\n<p>I MongoDB findes der s\u00e5kaldt <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/core\/mmapv1\/#record-allocation-strategies\">\u00abfyldningsgrad\u00bb<\/a><\/noindex>, som giver plads til, at dokumenter kan vokse, for at minimere dette problem. <br \/>\nDu kan t\u00e6nke, at du kan undv\u00e6re indeksering af arrays. Desv\u00e6rre kan frav\u00e6ret af indekser f\u00f8re til andre problemer. Da dokumenter gennemg\u00e5s fra start til slut, vil s\u00f8gning efter elementer i slutningen af arrayet tage l\u00e6ngere tid, og de fleste operationer relateret til et s\u00e5dant dokument vil v\u00e6re <noindex><a rel=\"nofollow\" href=\"http:\/\/grokbase.com\/t\/gg\/mongodb-user\/128r0h5gzw\/inserting-into-300-000-size-embedded-array-is-slow-even-w-o-indexes\">langsomme<\/a><\/noindex>. <\/p>\n<h3>Husk, at r\u00e6kkef\u00f8lgen af faser i aggregeringen betyder noget<\/h3>\n<p>\nI et databasesystem med en foresp\u00f8rgselsoptimerer er de foresp\u00f8rgsler, du skriver, forklaringer p\u00e5, hvad du \u00f8nsker at modtage, og ikke hvordan man opn\u00e5r det. Denne mekanisme fungerer p\u00e5 samme m\u00e5de som at bestille i en restaurant: normalt bestiller du blot en ret, i stedet for at give detaljerede instruktioner til kokken.<\/p>\n<p>I MongoDB instruerer du kokken. For eksempel skal du s\u00f8rge for, at dataene passerer gennem <code>reduce<\/code> s\u00e5 tidligt som muligt i pipeline med hj\u00e6lp fra <code>$match<\/code> og <code>$project<\/code>, og sorteringen sker kun bagefter <code>reduce<\/code>, og at s\u00f8gningen sker pr\u00e6cis i den r\u00e6kkef\u00f8lge, du har brug for. Tilstedev\u00e6relsen af en foresp\u00f8rgselsoptimerer, der fjerner un\u00f8dvendigt arbejde, optimalt sorterer faserne og v\u00e6lger forbindelsestypen, kan fork\u00e6le dig. I MongoDB f\u00e5r du mere kontrol for prisen p\u00e5 bekvemmelighed.<\/p>\n<p>V\u00e6rkt\u00f8jer som <noindex><a rel=\"nofollow\" href=\"https:\/\/studio3t.com\/\">Studio 3T<\/a><\/noindex> vil forenkle opbygningen af aggregeringsforesp\u00f8rgsler i <noindex><a rel=\"nofollow\" href=\"https:\/\/studio3t.com\/knowledge-base\/articles\/build-mongodb-aggregation-queries\/\">MongoDB<\/a><\/noindex>. Aggregation Editor-funktionen giver dig mulighed for at anvende pipeline-operatorer et skridt ad gangen og samtidig kontrollere ind- og uddata p\u00e5 hvert skridt for at lette fejlfinding. <\/p>\n<h3>Brug af hurtig skrivning<\/h3>\n<p>\nS\u00e6t aldrig h\u00f8jhastighedsskriveindstillinger med lav p\u00e5lidelighed i MongoDB. Denne tilstand <i>\"file-and-forget\"<\/i> kan virke hurtig, da kommandoen returneres, f\u00f8r skrivningen finder sted. Hvis systemet g\u00e5r ned, f\u00f8r dataene er skrevet til disken, vil de g\u00e5 tabt og v\u00e6re i en inkonsistent tilstand. Heldigvis er logging inkluderet i 64-bit MongoDB. <\/p>\n<p>Lagringsmotorerne MMAPv1 og WiredTiger bruger logging for at forhindre dette, selvom WiredTiger kan gendanne sig til det seneste konsistente <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/core\/wiredtiger\/#storage-wiredtiger-checkpoints\">kontrolpunkt<\/a><\/noindex>, hvis logging er deaktiveret.<\/p>\n<p>Logging sikrer, at databasen forbliver i en konsistent tilstand efter en gendannelse og gemmer alle data indtil skrivningen til loggen. Hyppigheden af skrivninger kan justeres ved hj\u00e6lp af parameteren <code><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/configuration-options\/#storage.journal.commitIntervalMs\">commitIntervalMs<\/a><\/noindex><\/code>. <\/p>\n<p>For at v\u00e6re sikker p\u00e5 skrivningerne, skal du s\u00f8rge for, at logging er aktiveret i konfigurationsfilen <code><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/configuration-options\/#configuration-file\">(storage.journal.enabled<\/a><\/noindex>)<\/code>, og at skrivningshyppigheden svarer til det volumen af information, du har r\u00e5d til at miste.<\/p>\n<h3>Sortering uden indeks<\/h3>\n<p>\nN\u00e5r der s\u00f8ges og aggregeres, opst\u00e5r der ofte behov for at sortere data. Lad os h\u00e5be, at dette sker i en af de afsluttende faser, efter at resultaterne er filtreret for at reducere m\u00e6ngden af data, der skal sorteres. Og selv i s\u00e5 fald har du brug for en <noindex><a rel=\"nofollow\" href=\"https:\/\/studio3t.com\/knowledge-base\/articles\/mongodb-index-strategy\/\">indeks<\/a><\/noindex>. Du kan bruge et enkelt eller sammensat indeks. <\/p>\n<p>Hvis der ikke findes et passende indeks, klarer MongoDB sig uden det. Der er en hukommelsesgr\u00e6nse p\u00e5 32 MB for den samlede st\u00f8rrelse af alle dokumenter i <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.org\/manual\/reference\/limits\/#Sort-Operations\">sorteringsoperationen<\/a><\/noindex>, og hvis MongoDB n\u00e5r denne gr\u00e6nse, vil den enten returnere en fejl, eller returnere <noindex><a rel=\"nofollow\" href=\"https:\/\/www.sitepoint.com\/7-simple-speed-solutions-mongodb\/\">et tomt s\u00e6t poster<\/a><\/noindex>.<\/p>\n<h3>S\u00f8gning uden indeksunderst\u00f8ttelse<\/h3>\n<p>\nS\u00f8geforesp\u00f8rgsler udf\u00f8rer en funktion svarende til operationen JOIN i SQL. For at fungere optimalt har de brug for en n\u00f8glev\u00e6rdiindeks, som anvendes som en fremmed n\u00f8gle. Det er ikke \u00e5benlyst, da brugen ikke er reflekteret i <code>explain()<\/code>. S\u00e5danne indekser er et supplement til indekset, der er registreret i <code>explain()<\/code>, som igen bruges af pipeline-operators <code>$match<\/code> og <code>$sort<\/code>, n\u00e5r de forekommer i starten af pipelinen. Indekser kan nu d\u00e6kke enhver fase <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/core\/aggregation-pipeline\/#aggregation-pipeline-operators-and-performance\">af aggregationspipelines<\/a><\/noindex>. <\/p>\n<h3>Afvisning af at bruge multi-opdateringer<\/h3>\n<p>\nMetoden <code><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/method\/db.collection.update\/\">db.collection.update()<\/a><\/noindex><\/code> bruges til at \u00e6ndre en del af et eksisterende dokument eller et helt dokument, op til fuld erstatning afh\u00e6ngigt af den parameter, du angiver <code><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/method\/db.collection.update\/#update-parameter\">opdatering<\/a><\/noindex><\/code>. Det er ikke s\u00e5 indlysende, at det ikke vil behandle alle dokumenter i samlingen, medmindre du angiver parameteren <code><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/method\/db.collection.update\/#multi-parameter\">multi<\/a><\/noindex><\/code> for at opdatere alle dokumenter, der opfylder foresp\u00f8rgselskriterierne.<\/p>\n<h3>Glem ikke vigtigheden af n\u00f8gler\u00e6kkef\u00f8lge i en hash-tabel<\/h3>\n<p>\nI JSON er et objekt en usorteret samling af nul eller flere navn\/v\u00e6rdi-par, hvor navnet er en streng, og v\u00e6rdien kan v\u00e6re en streng, et tal, en boolesk v\u00e6rdi, nul, et objekt eller et array.<\/p>\n<p>Desv\u00e6rre till\u00e6gger BSON stor betydning for r\u00e6kkef\u00f8lgen under s\u00f8gning. I MongoDB har r\u00e6kkef\u00f8lgen af n\u00f8gler inden for indlejrede objekter <noindex><a rel=\"nofollow\" href=\"http:\/\/devblog.me\/wtf-mongo\">betydning<\/a><\/noindex>, dvs. <code>{ firstname: \"Phil\", surname: \"factor\" }<\/code> er ikke det samme som <code>{ { surname: \"factor\", firstname: \"Phil\" }<\/code>. Det vil sige, at du skal bevare r\u00e6kkef\u00f8lgen af navn\/v\u00e6rdi-par i dokumenterne, hvis du vil v\u00e6re sikker p\u00e5 at finde dem.<\/p>\n<h3>Forveksle ikke <i>\"null\"<\/i> og <i>\"undefined\"<\/i><\/h3>\n<p>\nV\u00e6rdi <i>\"undefined\"<\/i> har aldrig v\u00e6ret gyldig i JSON, if\u00f8lge <noindex><a rel=\"nofollow\" href=\"http:\/\/www.ecma-international.org\/publications\/files\/ECMA-ST\/ECMA-404.pdf\">den officielle standard<\/a><\/noindex> JSON (ECMA-404, Afsnit 5), p\u00e5 trods af at det bruges i JavaScript. Derudover er det for BSON for\u00e6ldet og bliver konverteret til <code>$null<\/code>, hvilket ikke altid er en god l\u00f8sning. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/meteor\/meteor\/issues\/1646#issuecomment-29682964\">Undg\u00e5 at bruge <i>\"undefined\"<\/i> i MongoDB<\/a><\/noindex>.<\/p>\n<h3>Brugen af <code>$limit()<\/code> uden <code>$sort()<\/code><\/h3>\n<p>\nMeget ofte, n\u00e5r du udvikler i MongoDB, er det nyttigt bare at se et eksempel p\u00e5 det resultat, der vil komme fra foresp\u00f8rgslen eller aggregatorer. Til denne opgave vil du finde <code>$limit()<\/code>, men det b\u00f8r aldrig v\u00e6re i den endelige version af koden, medmindre du bruger det foran <code>$sort<\/code>. Denne mekanisme er n\u00f8dvendig, da du ellers ikke kan garantere r\u00e6kkef\u00f8lgen af resultatet, og du ikke vil kunne gennemse dataene p\u00e5lideligt. I toppen af resultatet vil du f\u00e5 forskellige poster afh\u00e6ngigt af sorteringen. For at sikre p\u00e5lidelig drift skal foresp\u00f8rgsler og aggregationer v\u00e6re deterministiske, hvilket betyder, at de skal give de samme resultater ved hver udf\u00f8relse. Kode, der har <code>$limit()<\/code>, men ikke <code>$sort<\/code>, vil ikke v\u00e6re deterministisk og kan senere for\u00e5rsage fejl, som vil v\u00e6re sv\u00e6re at opspore.<\/p>\n<h3>Konklusion<\/h3>\n<p>\nDen eneste m\u00e5de at blive skuffet over MongoDB p\u00e5 er at sammenligne det direkte med en anden type databasesystem, s\u00e5som en relationsdatabase, eller at komme til at bruge det baseret p\u00e5 nogle bestemte forventninger. Det er som at sammenligne en appelsin med en gaffel. Databasesystemer forf\u00f8lger bestemte m\u00e5l. Det er bedst bare at forst\u00e5 og v\u00e6rds\u00e6tte disse forskelle for sig selv. Det ville v\u00e6re en skam at presse udviklerne af MongoDB p\u00e5 grund af den vej, de har v\u00e6ret n\u00f8dt til at g\u00e5 for at blive et databasesystem. Jeg vil gerne se nye og interessante m\u00e5der at l\u00f8se gamle problemer p\u00e5, s\u00e5som at sikre dataintegritet og skabe datassystemer, der er robuste over for nedbrud og angreb fra skurke.<\/p>\n<p>Implementeringen af ACID-transaktionalitet i MongoDB-version 4.0 er et godt eksempel p\u00e5 implementeringen af vigtige forbedringer p\u00e5 en innovativ m\u00e5de. Multi-dokument og multi-operator transaktioner er nu atomare. Derudover er der kommet mulighed for at regulere den tid, der er n\u00f8dvendig for at opn\u00e5 l\u00e5se, og afslutte h\u00e6ngende transaktioner, samtidig med at niveauet for isolation kan \u00e6ndres.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/ZRL1\/\"><img decoding=\"async\" alt=\"14 ting, jeg gerne ville have vidst, f\u00f8r jeg startede med MongoDB\" src=\"\/wp-content\/uploads\/2020\/09\/9966ff2613efab52aac99c2a0eda5c87.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<h3>L\u00e6s mere:<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/519340\/\">Hvordan man indl\u00e6ser data i Google BigQuery<\/a><\/noindex><\/li>\n<\/ul>\n<p>Kilde: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/520412\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0432 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0440\u0442\u0430 \u043a\u0443\u0440\u0441\u0430 \u00ab\u041d\u0435\u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445\u00bb. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b: \u041a\u0440\u0430\u0439\u043d\u0435 \u0432\u0430\u0436\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u0445\u0435\u043c\u0443 \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432 MongoDB \u043e\u043d\u0430 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u0448\u0435\u0439 \u0441\u0445\u0435\u043c\u0435 \u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u043c\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430. \u0418\u0437\u0431\u0435\u0433\u0430\u0439\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432. \u0411\u0443\u0434\u044c\u0442\u0435 \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u044b \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 MongoDB, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u0440\u0435\u0447\u044c \u0438\u0434\u0435\u0442 \u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0438 \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u0438. \u0412 MongoDB [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":95149,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-95148","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0432 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0440\u0442\u0430 \u043a\u0443\u0440\u0441\u0430 \u00ab\u041d\u0435\u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445\u00bb.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/14-veshhej-kotorye-ya-hotel-by-znat-pered-nachalom-raboty-s-mongodb\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd4714 \u0432\u0435\u0449\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0437\u043d\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 MongoDB | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0432 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0440\u0442\u0430 \u043a\u0443\u0440\u0441\u0430 \u00ab\u041d\u0435\u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445\u00bb.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/14-veshhej-kotorye-ya-hotel-by-znat-pered-nachalom-raboty-s-mongodb\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-09-25T17:43:09+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-09-25T17:43:09+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd4714 ting, jeg ville \u00f8nske, jeg vidste, f\u00f8r jeg begyndte at arbejde med MongoDB | ProHoster","description":"Overs\u00e6ttelsen af artiklen er forberedt i anledning af starten af kurset \"Ikke-relationelle databaser.\"","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/14-veshhej-kotorye-ya-hotel-by-znat-pered-nachalom-raboty-s-mongodb","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd4714 \u0432\u0435\u0449\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0437\u043d\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 MongoDB | ProHoster","og:description":"\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0432 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0440\u0442\u0430 \u043a\u0443\u0440\u0441\u0430 \u00ab\u041d\u0435\u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445\u00bb.","og:url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/14-veshhej-kotorye-ya-hotel-by-znat-pered-nachalom-raboty-s-mongodb","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-09-25T17:43:09+00:00","article:modified_time":"2020-09-25T17:43:09+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"95148","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 11:11:32","updated":"2022-10-03 07:39:33","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/95148","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=95148"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/95148\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/95149"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=95148"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=95148"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=95148"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}