{"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\/de\/blog\/administrirovanie\/14-veshhej-kotorye-ya-hotel-by-znat-pered-nachalom-raboty-s-mongodb","title":{"rendered":"14 Dinge, die ich gerne gewusst h\u00e4tte, bevor ich mit MongoDB anfing","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><b><i>Die \u00dcbersetzung des Artikels wurde im Vorfeld des Starts des Kurses vorbereitet <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/ZRL1\/\">Nicht-relationale Datenbanken<\/a><\/noindex>.<\/i><\/b><\/p>\n<p><img decoding=\"async\" alt=\"14 Dinge, die ich gerne gewusst h\u00e4tte, bevor ich mit MongoDB anfing\" src=\"\/wp-content\/uploads\/2020\/09\/9b4979be27e0090543b28150d90fa8df.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Hauptpunkte:<\/p>\n<ul>\n<li>Es ist \u00e4u\u00dferst wichtig, ein Schema zu entwickeln, auch wenn es in MongoDB nicht zwingend erforderlich ist.<\/li>\n<li>\u00c4hnlich sollten Indizes mit Ihrem Schema und den Zugriffsmodellen \u00fcbereinstimmen. <\/li>\n<li>Vermeiden Sie die Verwendung von gro\u00dfen Objekten und gro\u00dfen Arrays.<\/li>\n<li>Seien Sie vorsichtig mit den Einstellungen von MongoDB, insbesondere im Hinblick auf Sicherheit und Zuverl\u00e4ssigkeit.<\/li>\n<li>MongoDB hat keinen Abfrageoptimierer, daher sollten Sie beim Ausf\u00fchren von Abfragen vorsichtig sein.<\/li>\n<\/ul>\n<p>\nIch arbeite schon lange mit Datenbanken, habe aber erst k\u00fcrzlich MongoDB entdeckt. Es gibt einige Dinge, die ich wissen wollte, bevor ich damit anfange. Wenn man bereits Erfahrung in einem bestimmten Bereich hat, hat man eine vorgefasste Meinung dar\u00fcber, was Datenbanken sind und was sie tun. Um anderen das Verst\u00e4ndnis zu erleichtern, pr\u00e4sentiere ich eine Liste h\u00e4ufiger Fehler.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Einen MongoDB-Server ohne Authentifizierung zu erstellen<\/h3>\n<p>\nLeider wird MongoDB standardm\u00e4\u00dfig ohne Authentifizierung eingerichtet. F\u00fcr eine Arbeitsstation, die lokal zug\u00e4nglich ist, ist diese Praxis normal. Da MongoDB jedoch ein Mehrbenutzersystem ist, das gro\u00dfe Mengen an Speicher ben\u00f6tigt, w\u00e4re es besser, es auf einem Server mit maximal m\u00f6glichem Arbeitsspeicher auszuf\u00fchren, selbst wenn Sie es nur f\u00fcr die Entwicklung verwenden. Die Installation auf einem Server \u00fcber den Standardport kann problematisch sein, insbesondere wenn im Abfragecode beliebiger JavaScript durchgef\u00fchrt werden kann (zum Beispiel <code>$where<\/code> als Idee f\u00fcr <noindex><a rel=\"nofollow\" href=\"https:\/\/lockmedown.com\/securing-node-js-mongodb-security-injection-attacks\/\">Injektion<\/a><\/noindex>). <\/p>\n<p>Es gibt mehrere Authentifizierungsmethoden, aber am einfachsten ist es, einen Benutzer-ID\/Passwort zu erstellen. Nutzen Sie diese Idee, w\u00e4hrend Sie \u00fcber eine ausgefallene Authentifizierung auf Basis von <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/core\/security-ldap-external\/\">LDAP<\/a><\/noindex>nachdenken. Was die Sicherheit betrifft, so sollte MongoDB st\u00e4ndig aktualisiert werden, und die Protokolle sollten immer auf unbefugten Zugriff \u00fcberpr\u00fcft werden. Mir pers\u00f6nlich gef\u00e4llt es, einen anderen Port als den Standardport auszuw\u00e4hlen.<\/p>\n<h3>Vergessen Sie nicht, die Angriffsfl\u00e4che an MongoDB zu binden<\/h3>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/administration\/security-checklist\/\">Checkliste zur Sicherstellung der Sicherheit von MongoDB<\/a><\/noindex> enth\u00e4lt gute Ratschl\u00e4ge zur Verringerung des Risikos eines Eindringens in das Netzwerk und des Datenlecks. Es ist leicht zu sagen, dass ein Entwicklungsserver kein hohes Sicherheitsniveau ben\u00f6tigt. Aber so einfach ist es nicht, und das gilt f\u00fcr alle MongoDB-Server. Insbesondere wenn es keinen triftigen Grund gibt, zu verwenden <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> oder <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/operator\/query\/where\/#op._S_where\">$where<\/a><\/noindex>, sollte die Verwendung von beliebigem JavaScript-Code in der Konfigurationsdatei deaktiviert werden <code><noindex><a rel=\"nofollow\" href=\"https:\/\/lockmedown.com\/securing-node-js-mongodb-security-injection-attacks\/\">javascriptEnabled:false<\/a><\/noindex><\/code>. Da in der standardm\u00e4\u00dfigen MongoDB die Datendateien nicht verschl\u00fcsselt sind, ist es sinnvoll, MongoDB mit <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/administration\/security-checklist\/#run-mongodb-with-a-dedicated-user\">Dedicated User<\/a><\/noindex>zu starten, der vollst\u00e4ndigen Zugriff auf die Dateien hat, jedoch nur eingeschr\u00e4nkten Zugriff darauf und die M\u00f6glichkeit, eigene Mittel zur Zugriffskontrolle auf die Dateien des Betriebssystems zu verwenden.<\/p>\n<h3>Fehler bei der Schema-Entwicklung<\/h3>\n<p>\nMongoDB verwendet kein Schema. Aber das bedeutet nicht, dass ein Schema nicht n\u00f6tig ist. Wenn Sie einfach nur Dokumente ohne ein konsistentes Schema speichern m\u00f6chten, k\u00f6nnen Sie dies schnell und einfach tun, aber das Abrufen der Daten kann dann <noindex><a rel=\"nofollow\" href=\"https:\/\/www.compose.com\/articles\/mongodb-with-and-without-schemas\/\">h\u00f6chst schwierig<\/a><\/noindex>. <\/p>\n<p>Der klassische Artikel \u201e<i><noindex><a rel=\"nofollow\" href=\"https:\/\/www.mongodb.com\/blog\/post\/6-rules-of-thumb-for-mongodb-schema-design-part-1\">6 empirische Regeln f\u00fcr das Design von MongoDB-Schemas\u201c<\/a><\/noindex><\/i> ist lesenswert, und Funktionen wie <noindex><a rel=\"nofollow\" href=\"https:\/\/studio3t.com\/knowledge-base\/articles\/schema-explorer\/\">Schema Explorer<\/a><\/noindex> in dem Drittanbieter-Tool Studio 3T sollten regelm\u00e4\u00dfig zur \u00dcberpr\u00fcfung der Schemata verwendet werden.<\/p>\n<h3>Vergessen Sie nicht die Sortierreihenfolge<\/h3>\n<p>\nDie Vergesslichkeit bez\u00fcglich der Sortierreihenfolge kann frustrierender sein und mehr Zeit kosten als die Verwendung einer anderen falschen Konfiguration. Standardm\u00e4\u00dfig verwendet MongoBD <noindex><a rel=\"nofollow\" href=\"https:\/\/jira.mongodb.org\/browse\/SERVER-1920\">bin\u00e4re Sortierung<\/a><\/noindex>. Aber das wird wahrscheinlich niemandem helfen. Fall-sensitive, akzent-sensitive, bin\u00e4re Sortierungen galten neben Perlen, Kaftanen und gewundenen Schnurrb\u00e4rten schon in den 80er Jahren des letzten Jahrhunderts als merkw\u00fcrdige Anachronismen. Heute ist ihre Verwendung unverzeihlich. Im realen Leben ist \u201eMotorrad\u201c dasselbe wie \u201eMotorrad\u201c. Und \u201eBritannien\u201c und \u201ebritannien\u201c sind dasselbe Gebiet. Ein Kleinbuchstabe ist einfach das gro\u00dfgeschriebene \u00c4quivalent eines Gro\u00dfbuchstabens. Und lassen Sie mich nicht \u00fcber die Sortierung diakritischer Zeichen sprechen. Bei der Erstellung einer Datenbank in MongoDB verwenden Sie Sortierparameter, die keine Akzent- und <noindex><a rel=\"nofollow\" href=\"https:\/\/weblogs.sqlteam.com\/dang\/archive\/2009\/07\/26\/Collation-Hell-Part-1.aspx\">Gro\u00df- und Kleinschreibung<\/a><\/noindex>, die der Sprache und <noindex><a rel=\"nofollow\" href=\"https:\/\/derickrethans.nl\/mongodb-collation-revised.html\">der Kultur der Benutzer des Systems entsprechen<\/a><\/noindex>. So vereinfachen Sie die Suche nach Zeichenfolgendaten erheblich.<\/p>\n<h3>Erstellen von Sammlungen mit gro\u00dfen Dokumenten<\/h3>\n<p>\nMongoDB freut sich, gro\u00dfe Dokumente von bis zu 16 MB in Sammlungen zu speichern, <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/core\/gridfs\/#gridfs\">GridFS<\/a><\/noindex> die f\u00fcr gro\u00dfe Dokumente \u00fcber 16 MB vorgesehen ist. Aber nur weil gro\u00dfe Dokumente dort gespeichert werden k\u00f6nnen, ist es nicht die beste Idee, sie dort aufzubewahren. MongoDB funktioniert am besten, wenn Sie separate Dokumente von mehreren Kilobyte speichern und diese mehr wie Zeilen in einer breiten SQL-Tabelle betrachten. Gro\u00dfe Dokumente k\u00f6nnen Leistungsprobleme verursachen. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.reddit.com\/r\/mongodb\/comments\/573fqr\/question_mongodb_terrible_performance_for_a\/\">Leistung<\/a><\/noindex>.<\/p>\n<h3>Das Erstellen von Dokumenten mit gro\u00dfen Arrays <\/h3>\n<p>\nDokumente k\u00f6nnen Arrays enthalten. Am besten ist es, wenn die Anzahl der Elemente im Array weit entfernt von einer vierstelligen Zahl ist. Wenn regelm\u00e4\u00dfig Elemente zum Array hinzugef\u00fcgt werden, wird es das dokumentierende Dokument \u00fcbersteigen und es muss <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.mongodb.org\/manual\/core\/data-model-operations\/#document-growth\">verschoben werden,<\/a><\/noindex>was bedeutet, dass auch <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.mongodb.org\/manual\/core\/write-performance\/#document-growth\">die Indizes aktualisiert werden m\u00fcssen.<\/a><\/noindex>Bei der erneuten Indizierung eines Dokuments mit einem gro\u00dfen Array werden die Indizes h\u00e4ufig \u00fcberschrieben, da f\u00fcr jedes Element eine <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.mongodb.org\/manual\/core\/index-multikey\/\">Aufzeichnung<\/a><\/noindex>vorhanden ist, die seinen Index speichert. Eine solche Neuindizierung findet auch statt, wenn ein Dokument eingef\u00fcgt oder gel\u00f6scht wird. <\/p>\n<p>In MongoDB gibt es den sogenannten <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/core\/mmapv1\/#record-allocation-strategies\">\u201eF\u00fcllfaktor\u201c<\/a><\/noindex>, der Platz f\u00fcr das Wachstum von Dokumenten bereitstellt, um dieses Problem zu minimieren. <br \/>\nSie k\u00f6nnten denken, dass man auf die Indizierung von Arrays verzichten kann. Leider k\u00f6nnen Sie aufgrund fehlender Indizes auf andere Probleme sto\u00dfen. Da Dokumente von Anfang bis Ende durchsucht werden, wird die Suche nach Elementen am Ende des Arrays mehr Zeit in Anspruch nehmen, und die meisten damit verbundenen Operationen mit einem solchen Dokument werden <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\">langsam sein.<\/a><\/noindex>. <\/p>\n<h3>Vergessen Sie nicht, dass die Reihenfolge der Schritte in der Aggregation von Bedeutung ist.<\/h3>\n<p>\nIn einem Datenbanksystem mit einem Abfrageoptimierer sind die Abfragen, die Sie schreiben, Erkl\u00e4rungen daf\u00fcr, was Sie erhalten m\u00f6chten, und nicht daf\u00fcr, wie es erreicht werden soll. Dieses System funktioniert \u00e4hnlich wie eine Bestellung im Restaurant: Normalerweise bestellen Sie einfach ein Gericht, anstatt dem Koch detaillierte Anweisungen zu geben.<\/p>\n<p>In MongoDB instruieren Sie den Koch. Zum Beispiel sollten Sie sicherstellen, dass die Daten so fr\u00fch wie m\u00f6glich im Pipeline durch <code>reduce<\/code> mit Hilfe von <code>$match<\/code> und <code>$project<\/code>, w\u00e4hrend die Sortierung erst danach erfolgt. <code>reduce<\/code>, und dass die Suche genau in der Reihenfolge erfolgt, in der Sie es ben\u00f6tigen. Ein Abfrageoptimierer, der unn\u00f6tige Arbeit vermeidet, die Schritte optimal anordnet und den Verbindungstyp ausw\u00e4hlt, kann Sie verw\u00f6hnen. In MongoDB haben Sie mehr Kontrolle, als es die Bequemlichkeit zul\u00e4sst.<\/p>\n<p>Werkzeuge wie <noindex><a rel=\"nofollow\" href=\"https:\/\/studio3t.com\/\">Studio 3T<\/a><\/noindex> vereinfachen den Aufbau von Aggregationsanfragen in <noindex><a rel=\"nofollow\" href=\"https:\/\/studio3t.com\/knowledge-base\/articles\/build-mongodb-aggregation-queries\/\">MongoDB<\/a><\/noindex>. Die Funktion Aggregation Editor erm\u00f6glicht es Ihnen, Pipeline-Operatoren schrittweise anzuwenden sowie Eingangs- und Ausgangsdaten in jedem Schritt zur Vereinfachung des Debuggens zu \u00fcberpr\u00fcfen. <\/p>\n<h3>Die Verwendung von schneller Aufzeichnung<\/h3>\n<p>\nSetzen Sie in MongoDB niemals Aufzeichnungsparameter mit hoher Geschwindigkeit, aber niedriger Zuverl\u00e4ssigkeit. Dieser Modus <i>\u00abfile-and-forget\u00bb<\/i> scheint schnell zu sein, da der Befehl zur\u00fcckkehrt, bevor die Aufzeichnung erfolgt. F\u00e4llt das System aus, bevor die Daten auf die Festplatte geschrieben werden, gehen sie verloren und befinden sich in einem inkonsistenten Zustand. Gl\u00fccklicherweise ist in MongoDB mit 64-Bit Protokollierung aktiviert. <\/p>\n<p>Die Speicher-Engines MMAPv1 und WiredTiger verwenden Protokollierung, um dies zu verhindern, obwohl WiredTiger sich bis zum letzten konsistenten <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/core\/wiredtiger\/#storage-wiredtiger-checkpoints\">Kontrollpunkt<\/a><\/noindex>, wenn die Protokollierung deaktiviert ist.<\/p>\n<p>Die Protokollierung gew\u00e4hrleistet, dass die Datenbank nach der Wiederherstellung in einem konsistenten Zustand ist und alle Daten bis zum Protokollierungspunkt aufbewahrt werden. Die H\u00e4ufigkeit der Aufzeichnungen wird durch den Parameter eingestellt <code><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/configuration-options\/#storage.journal.commitIntervalMs\">CommitIntervalMs<\/a><\/noindex><\/code>. <\/p>\n<p>Um sicherzustellen, dass Aufzeichnungen erfolgen, stellen Sie sicher, dass in der Konfigurationsdatei die Protokollierung aktiviert ist <code><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/configuration-options\/#configuration-file\">(speicher.journal.aktiviert<\/a><\/noindex>)<\/code>, und dass die H\u00e4ufigkeit der Aufzeichnungen dem Umfang der Informationen entspricht, die Sie sich leisten k\u00f6nnen zu verlieren.<\/p>\n<h3>Sortierung ohne Index<\/h3>\n<p>\nBei der Suche und Aggregation wird h\u00e4ufig eine Sortierung der Daten erforderlich. Hoffen wir, dass dies in einem der letzten Schritte erfolgt, nachdem das Ergebnis gefiltert wurde, um das Volumen der zu sortierenden Daten zu verringern. Selbst in diesem Fall ben\u00f6tigen Sie f\u00fcr die Sortierung <noindex><a rel=\"nofollow\" href=\"https:\/\/studio3t.com\/knowledge-base\/articles\/mongodb-index-strategy\/\">Index<\/a><\/noindex>. Sie k\u00f6nnen einen Einzel- oder zusammengesetzten Index verwenden. <\/p>\n<p>Wenn kein geeigneter Index vorhanden ist, kommt MongoDB ohne ihn aus. Es gibt eine Speichergrenze von 32 MB f\u00fcr die Gesamtgr\u00f6\u00dfe aller Dokumente in der <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.org\/manual\/reference\/limits\/#Sort-Operations\">Sortieroperation<\/a><\/noindex>, und wenn MongoDB dieses Limit erreicht, gibt es entweder einen Fehler aus oder gibt <noindex><a rel=\"nofollow\" href=\"https:\/\/www.sitepoint.com\/7-simple-speed-solutions-mongodb\/\">ein leeres Ergebnis zur\u00fcck.<\/a><\/noindex>.<\/p>\n<h3>Suche ohne Unterst\u00fctzung von Indizes<\/h3>\n<p>\nSuchanfragen erf\u00fcllen eine Funktion, die der JOIN-Operation in SQL \u00e4hnelt. F\u00fcr eine bessere Leistung ben\u00f6tigen sie einen Index des Wertes des Schl\u00fcssels, der als Fremdschl\u00fcssel verwendet wird. Dies ist nicht offensichtlich, da die Nutzung nicht widergespiegelt wird in <code>explain()<\/code>. Solche Indizes sind eine Erg\u00e4nzung zum Index, der in <code>explain()<\/code>, der wiederum von den Pipeline-Operatoren verwendet wird, <code>$match<\/code> und <code>$sort<\/code>, wenn diese am Anfang der Pipeline auftreten. Indizes k\u00f6nnen jetzt jede Phase <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/core\/aggregation-pipeline\/#aggregation-pipeline-operators-and-performance\">der Aggregationspipeline abdecken.<\/a><\/noindex>. <\/p>\n<h3>Der Verzicht auf die Verwendung von Multi-Updates<\/h3>\n<p>\nMethode <code><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/method\/db.collection.update\/\">db.collection.update()<\/a><\/noindex><\/code> wird verwendet, um einen Teil eines bestehenden Dokuments oder das gesamte Dokument zu \u00e4ndern, bis hin zur vollst\u00e4ndigen Ersetzung, je nach dem von Ihnen angegebenen Parameter. <code><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/method\/db.collection.update\/#update-parameter\">update<\/a><\/noindex><\/code>Es ist nicht so offensichtlich, dass er nicht alle Dokumente in der Sammlung verarbeitet, es sei denn, Sie setzen den Parameter <code><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/reference\/method\/db.collection.update\/#multi-parameter\">mehrere<\/a><\/noindex><\/code> um alle Dokumente zu aktualisieren, die den Abfragekriterien entsprechen.<\/p>\n<h3>Vergessen Sie nicht die Bedeutung der Reihenfolge der Schl\u00fcssel in der Hashtabelle.<\/h3>\n<p>\nIn JSON besteht ein Objekt aus einer ungeordneten Sammlung von null oder mehr Schl\u00fcssel\/Wert-Paaren, wobei der Schl\u00fcssel eine Zeichenkette ist und der Wert eine Zeichenkette, Zahl, boolescher Wert, null, Objekt oder Array sein kann.<\/p>\n<p>Leider legt BSON gro\u00dfen Wert auf die Reihenfolge bei Suchvorg\u00e4ngen. In MongoDB hat die Reihenfolge der Schl\u00fcssel innerhalb von eingebetteten Objekten <noindex><a rel=\"nofollow\" href=\"http:\/\/devblog.me\/wtf-mongo\">Bedeutung.<\/a><\/noindex>, d.h. <code>{ firstname: \"Phil\", surname: \"factor\" }<\/code> ist nicht dasselbe wie <code>{ { surname: \"factor\", firstname: \"Phil\" } }<\/code>. Das hei\u00dft, Sie m\u00fcssen die Reihenfolge der Schl\u00fcssel\/Wert-Paare in den Dokumenten beibehalten, wenn Sie sicher sein wollen, dass Sie sie finden.<\/p>\n<h3>Verwechseln Sie nicht <i>\"null\"<\/i> und <i>\"undefined\"<\/i><\/h3>\n<p>\nWert <i>\"undefined\"<\/i> waren noch nie in JSON zul\u00e4ssig, gem\u00e4\u00df <noindex><a rel=\"nofollow\" href=\"http:\/\/www.ecma-international.org\/publications\/files\/ECMA-ST\/ECMA-404.pdf\">dem offiziellen Standard.<\/a><\/noindex> JSON (ECMA-404, Abschnitt 5), obwohl es in JavaScript verwendet wird. Dar\u00fcber hinaus ist es f\u00fcr BSON veraltet und wird in <code>$null<\/code>, was nicht immer eine gute L\u00f6sung ist. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/meteor\/meteor\/issues\/1646#issuecomment-29682964\">Vermeiden Sie die Nutzung von <i>\"undefined\"<\/i> in MongoDB.<\/a><\/noindex>.<\/p>\n<h3>Verwendung <code>$limit()<\/code> ohne <code>$sort()<\/code><\/h3>\n<p>\nOft, wenn Sie in MongoDB entwickeln, ist es n\u00fctzlich, einfach ein Beispiel f\u00fcr das Ergebnis zu sehen, das aus einer Abfrage oder Aggregation zur\u00fcckkommt. F\u00fcr diese Aufgabe ben\u00f6tigen Sie <code>$limit()<\/code>, aber es sollte niemals in der endg\u00fcltigen Version des Codes vorhanden sein, es sei denn, Sie verwenden es davor. <code>$sort<\/code>. Diese Mechanik ist notwendig, da Sie sonst die Reihenfolge des Ergebnisses nicht garantieren k\u00f6nnen und die Daten nicht zuverl\u00e4ssig durchsuchen k\u00f6nnen. Oben im Ergebnis erhalten Sie je nach Sortierung unterschiedliche Eintr\u00e4ge. F\u00fcr eine zuverl\u00e4ssige Funktion m\u00fcssen Anfragen und Aggregationen determiniert sein, d.h. bei jedem Ausf\u00fchren die gleichen Ergebnisse liefern. Der Code, der enthalten ist <code>$limit()<\/code>, aber nicht <code>$sort<\/code>, wird nicht determiniert sein und kann sp\u00e4ter zu Fehlern f\u00fchren, die schwer nachzuvollziehen sind.<\/p>\n<h3>Fazit<\/h3>\n<p>\nDer einzige Weg, sich \u00fcber MongoDB zu entt\u00e4uschen, ist, sie direkt mit einem anderen Datenbanktyp, wie z.B. RDBMS, zu vergleichen oder sie mit bestimmten Erwartungen zu verwenden. Das ist so, als w\u00fcrde man eine Orange mit einer Gabel vergleichen. Datenbanksysteme verfolgen bestimmte Ziele. Am besten ist es, einfach diese Unterschiede zu verstehen und zu sch\u00e4tzen. Es w\u00e4re schade, Druck auf die Entwickler von MongoDB auszu\u00fcben, weil sie gezwungen waren, den Weg eines RDBMS zu gehen. Ich m\u00f6chte neue und interessante Wege sehen, um alte Probleme zu l\u00f6sen, wie z.B. die Sicherstellung der Datenintegrit\u00e4t und die Schaffung von datensicheren Systemen, die gegen Ausf\u00e4lle und Angriffe von Angreifern widerstandsf\u00e4hig sind.<\/p>\n<p>Die Einf\u00fchrung von ACID-Transaktionen in MongoDB in Version 4.0 ist ein gutes Beispiel f\u00fcr die innovative Implementierung wichtiger Verbesserungen. Mehrdokument- und Mehroperatortransaktionen sind jetzt atomar. Es gibt auch die M\u00f6glichkeit, die Zeit zu steuern, die ben\u00f6tigt wird, um Sperren zu erhalten, und h\u00e4ngende Transaktionen zu beenden sowie das Isolationsniveau zu \u00e4ndern.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/ZRL1\/\"><img decoding=\"async\" alt=\"14 Dinge, die ich gerne gewusst h\u00e4tte, bevor ich mit MongoDB anfing\" src=\"\/wp-content\/uploads\/2020\/09\/9966ff2613efab52aac99c2a0eda5c87.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<h3>Weiterlesen:<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/519340\/\">Wie man Daten in Google BigQuery l\u00e4dt<\/a><\/noindex><\/li>\n<\/ul>\n<p>Quelle: <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.1.1 - 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\/de\/blog\/administrirovanie\/14-veshhej-kotorye-ya-hotel-by-znat-pered-nachalom-raboty-s-mongodb\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\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\/de\/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 Dinge, die ich gerne gewusst h\u00e4tte, bevor ich mit MongoDB begonnen habe | ProHoster","description":"Die \u00dcbersetzung des Artikels wurde im Vorfeld des Starts des Kurses \"Nicht-relationale Datenbanken\" vorbereitet.","canonical_url":"https:\/\/prohoster.info\/de\/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":"de_DE","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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/95148","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=95148"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/95148\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/95149"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=95148"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=95148"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=95148"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}