2013-03-27 4 views

Antwort

20

Ich bin sicher, dass ich die Liste angegeben haben ein paar Mal trotz der Google-Suchergebnis nur gefüllt ist mit Menschen, die Sie erzählen, wie es zu tun:

  • Es ist eval
  • eval natürlichen Fähigkeiten hat zu leicht injiziert werden, ist es wie ein Nicht-PDO-Gleichgewichte zu SQL, wenn Sie nicht eine vollständige Escaping-Bibliothek um ihn herum aufbauen, wird es Sie vermasseln. Indem Sie diese Funktionen verwenden, ersetzen Sie effektiv die sicherere Muttersprache von MongoDB für etwas, das genauso unsicher ist wie alle alten SQL-Versionen.
  • Es dauert eine globale Sperre und kann Schreibsperre nehmen und wird nicht freigegeben, bis der Vorgang vollständig abgeschlossen ist, im Gegensatz zu anderen Operationen, die in bestimmten Fällen freigegeben werden.
  • eval funktioniert nur auf Primärteile und nie ein anderes Mitglied der Replikatgruppe
  • Es ist im Grunde läuft, unkontrolliert, eine Tonne von JS in einem gebündelten V8/Spider ENVO, die mit voller Fähigkeit, mit MongoDB kommt jeden Teil zu berühren von Ihre Datenbank und Admin-Befehle, klingt das sicher?
  • Es ist nicht MongoDB und noch ist es "MongoDBs SQL", es läuft innerhalb einer eingebauten JS-Umgebung, nicht MongoDBs C++ - Code selbst (im Gegensatz zum Aggregation Framework).
  • Aufgrund des vorherigen Punktes ist es EXTREM langsam im Vergleich zu vielen anderen Optionen, dies gilt auch für $where Verwendung.

Das sollte genug sein, um an dieser Front zu beginnen.

+0

Ok, danke! Über diese Aussage: "Aufgrund des vorherigen Punktes ist es extrem langsam im Vergleich zu vielen anderen Optionen ...". Ich glaube, wenn Sie das geschrieben haben, meinen Sie langsam Leseoperationen, richtig? Mein Problem ist: Ich habe eine Funktion über jedes Dokument meiner Sammlung, und lesen-Update-schreiben ist wirklich langsam, wenn Sie mongodb-nodejs-native Treiber verwenden. Irgendwelche Gedanken dazu? – EdMelo

+0

@EduardoMelo Jede Operation, die JavaScript wird langsamer in der Ausführung als der C++ - Code jeden Tag, nicht nur das, aber es ist nicht nativ in JS, dh die JS-Enigne wird gestartet, ein Thread gemacht und dann der C++ Code passiert die JS-Funktion, die von der Engine ausgeführt wird. Hmm, wenn es über jedes Dokument ist, dann klingt es wie ein einmaliger Befehl, würde ich dies über die Konsole auf dem gleichen Server wie der Master tun MongoDB – Sammaye

+1

Sind die Probleme rund um Sperren/Gleichzeitigkeit/Performance noch gültig? Die aktuelle Dokumentation legt nahe, dass die Standard-JavaScript-Engine ab Version 2.4 "nun die Ausführung mehrerer JavaScript-Vorgänge zur gleichen Zeit zulässt", ohne Sperren zu erhalten. http://docs.mongodb.org/manual/core/server-side-javascript/ –

Verwandte Themen