2013-03-27 8 views

Odpowiedz

20

Jestem pewien, że stwierdziły listę kilka razy pomimo wyniku wyszukiwania Google są wypełnione tylko ludzie mówią ci, jak to zrobić:

  • Jest eval
  • eval ma naturalne zdolności do być łatwym do wstrzyknięcia, to jak nierównomierny w stosunku do SQL SQL, jeśli nie zbudujesz wokół niego pełno skali, uciekając do biblioteki, to zepsu ci to. Korzystając z tych funkcji, skutecznie zastępujesz bezpieczniejszy język ojczysty w MongoDB, co jest tak samo niebezpieczne, jak każdy stary kod SQL.
  • Wymaga globalnej blokady i może wykonać blokadę zapisu i nie zostanie zwolniona, dopóki operacja nie zostanie całkowicie wykonana, w przeciwieństwie do innych operacji, które zostaną zwolnione w niektórych przypadkach.
  • eval działa tylko w prawyborach i nigdy inny członek repliki ustawić
  • To jest w zasadzie działa, niekontrolowany, tona JS w pakiecie V8/SpiderMonkey envo że pochodzi z MongoDB z pełną zdolność dotykać żadnej części twoja baza danych i polecenia administratora, czy to brzmi bezpiecznie?
  • NIE jest to MongoDB, ani nie jest to "MongoDBs SQL", działa w obrębie wbudowanego środowiska JS, a nie w samym MongoDBs C++ (w przeciwieństwie do frameworka agregacji).
  • Ze względu na poprzedni punkt jest bardzo powolny w porównaniu do wielu innych opcji, to odnosi się również do użytkowania $where.

To powinno wystarczyć, aby zacząć od tego frontu.

+0

OK, dziękuję! O tym stwierdzeniu: "Ze względu na poprzedni punkt jest bardzo powolny w porównaniu do wielu innych opcji ...". Wierzę, że kiedy to napisałeś, masz na myśli powolne czytanie, prawda? Mój problem polega na tym, że wykonałem funkcję nad każdym dokumentem z mojej kolekcji, a read-update-write jest naprawdę powolny, gdy używam ngo-monopod-niodajskiego sterownika. Jakieś przemyślenia na ten temat? – EdMelo

+0

@EduardoMelo Dowolna operacja, JavaScript będzie wolniejszy w wykonaniu niż kod C++ w dowolnym dniu, nie tylko to, ale nie jest natywnie wstawiany do JS, tj. Enigne JS jest uruchamiane, wątek wykonany, a następnie przechodzi kod C++ funkcja JS uruchamiana przez silnik. Hmm, jeśli jest nad każdym dokumentem, to brzmi jak jednorazowe polecenie, zrobiłbym to za pośrednictwem konsoli na tym samym serwerze, co master MongoDB – Sammaye

+1

Czy problemy związane z blokowaniem/współbieżnością/wydajnością są nadal aktualne? Obecna dokumentacja sugeruje, że od wersji 2.4 domyślny silnik JavaScript teraz "pozwala na jednoczesne wykonywanie wielu operacji JavaScript" bez uzyskiwania blokad. http://docs.mongodb.org/manual/core/server-side-javascript/ –

Powiązane problemy