Warum wird in MongoDB und CouchDB Javascript anstelle anderer Sprachen wie Java, C ++ verwendet?

19

Ich habe diese Frage auf SO gestellt, aber es wurde vorgeschlagen, es hier zu versuchen. Also hier geht es:

Mein bisheriges Verständnis von Javascript war, dass es eine clientseitige Sprache ist, die Ereignisse aufzeichnet und eine Webseite dynamisch macht.

Aber als ich den Vergleich zwischen MongoDB und CouchDB las, bemerkte ich, dass beide Javascript verwenden. Dies lässt mich den Grund für die Wahl von JavaScript gegenüber anderen herkömmlichen Sprachen hinterfragen.

Ich denke, ich versuche, die Rolle von JavaScript und seine Vorteile gegenüber anderen Sprachen zu verstehen.

Update: Ich frage nicht nach den Sprachen / Treibern, die von den beiden Datenbanken unterstützt werden. Der Vergleich sagt:

Sowohl CouchDB als auch MongoDB verwenden Javascript. CouchDB verwendet Javascript ausgiebig, auch beim Erstellen von Ansichten .

MongoDB unterstützt auch die Ausführung willkürlicher Javascript-Funktionen auf dem Server und verwendet Javascript für Karten- / Reduzierungsvorgänge.

Mein Unverständnis hat damit zu tun, warum JavaScript überhaupt für die Backend-Arbeit verwendet wird. Warum wird es bevorzugt, um Ansichten in CouchDB zu erstellen oder um Karten- / Reduzierungsoperationen zu verwenden? Warum wurden C / C ++ oder Java nicht verwendet? Was sind die Vorteile bei der Verwendung von Javascript für solche Back-End-Arbeit?

Jeff Moschus
quelle
3
Javascript ist nicht nur eine Browser-Skriptsprache. In einigen anderen Anwendungen ist Javascript oder eine ähnliche Sprache integriert (z. B. ActionScript in Flash sowie Javascript zum Erstellen von Skripts für eine Reihe von Adobe-Anwendungen). Ich bin mir nicht sicher, aber vielleicht sollte Javascript nie nur in Webbrowsern eingebettet sein. Warum sollte es nicht in eine Back-End-Datenbankanwendung eingebettet werden?
Steve314
Da ich gesehen / gelesen habe, wie JS im Browser ausgeführt wird, frage ich mich, wie es auf der Serverseite ausgeführt wird, ohne einen Browser zu öffnen.
Jeff Moschus
1
Vielen Dank. Du hast recht. Sie verwenden den SpiderMonkey-Compiler, um den serverseitigen JS-Teil zu erledigen. de.wikipedia.org/wiki/SpiderMonkey_(JavaScript_engine ) @Raynos wies darauf hin.
Jeff Moschus
6
Dazu benötigen Sie eine Javascript-Engine wie V8 und SpiderMonkey . Außerhalb des Browsers gibt es einige Verwendungszwecke für Javascript, wikipedia hat eine lange Liste .
Yannis
Hmmm - mein vorheriger Kommentar ist als Verallgemeinerung zutreffend, aber für mich könnte es gefährlich sein, genauer zu sein - ich weiß nichts über MongoDB oder CouchDB. Es gibt zwar keinen Grund, warum eine Back-End-Datenbank-App. Auf einem Server kann es keinen eigenen browserunabhängigen Javascript-Interpreter geben. Ich weiß nicht, ob das so gehandhabt wird. Die folgenden Antworten legen nahe, dass dies wahrscheinlich nicht der Fall ist.
Steve314

Antworten:

15

Mobiler Code und plattformübergreifend

JavaScript wird als mobiler Code bezeichnet . Der Code wird vom Server (in diesem Fall MongoDB und CouchDB) zum Client (dem Webbrowser) transportiert und auf dem Client ohne Installationsvorgang ausgeführt.

Auf vielen Plattformen sind auch JavaScript-Laufzeitumgebungen (Webbrowser) weit verbreitet. Das macht JavaScript zu einer guten plattformübergreifenden Sprache.

JavaScript wird nicht als primäre Back-End-Sprache verwendet

Das MongoDB-Backend ist in C ++ und die CouchDB in Erlang implementiert. Daher wird JavaScript nicht als primäre Sprache für das Backend dieser Systeme verwendet.

Von mongodb.com :

Geschrieben in C ++

Von couchdb.apache.com :

CouchDB ist in Erlang geschrieben, einer robusten funktionalen Programmiersprache, die sich ideal für die Erstellung von parallelen verteilten Systemen eignet. Erlang ermöglicht ein flexibles Design, das leicht skalierbar und leicht erweiterbar ist.

Jonas
quelle
1
Danke für Ihre Antwort. Msgstr "CouchDB verwendet Javascript ausgiebig, auch beim Erstellen von Ansichten". Warum ist der Client ein Browser für Back-End-Arbeiten wie das Erstellen einer Ansicht? Warum kommt für eine solche Aufgabe ein Browser ins Bild?
Jeff Moschus
@ startup007: Siehe den ersten Teil meiner Antwort. Webbrowser sind bereits auf den meisten Systemen (z. B. Mac OS X, Windows, Linux, iPhone, Android) installiert, sodass der Benutzer nichts installieren muss, da Webbrowser JavaScript (mobilen Code) ausführen können.
Jonas
Ich entschuldige mich dafür, dass ich es nicht sofort bekommen habe. Lassen Sie mich näher darauf eingehen. Öffnen diese Datenbanken also Browser auf der Serverseite, um einen Teil der Aufgabe zu erledigen und dann die JSON-Ausgabe zurückzugeben?
Jeff Moschus
1
Vielen Dank, Raynos! Wiki auf spidermonkey sagt: "MongoDB, ein anderes NoSQL-Datenbanksystem, verwendet SpiderMonkey für die serverseitige JavaScript-Ausführung." en.wikipedia.org/wiki/SpiderMonkey_(JavaScript_engine) . hmm interessant
Jeff Moschus
4
falsch, weder MongoDB noch CouchdB benutzen den Browser als Client. Der Datenbank-Client ist eine Bibliothek, die von der App (normalerweise eine Webanwendung, kann jedoch jede Art von Anwendung sein) zur Verwaltung der in der Datenbank gespeicherten Daten verwendet wird. Es ist kein Browser im Bild. JavaScript wird als Datendefinitionssprache (eine Obermenge von JSON) und auch als Sprache für Speicherprozeduren verwendet und in der Datenbank-Engine, nicht auf dem Client und erst recht in keinem Browser ausgeführt.
Javier
7

Weil JavaScript eine Skriptsprache ist.

Es ist eine flexible und dynamische Sprache, die den Menschen vertraut ist.

Der andere Grund, warum JavaScript verwendet wird, liegt darin, dass es gut mit dem von diesen Datenbanken verwendeten JSON-Format übereinstimmt.

Und schließlich benötigen diese Datenbanken eine Sprache, die interpretiert werden kann. Weil der Code für diese Abfragen über das Netzwerk gesendet wird.

Also brauchst du eine

  • dynamisch
  • flexibel
  • familiär
  • interpretiert

Sprache. Ich denke nicht, dass JavaScript hier eine schlechte Wahl ist. Es wird wahrscheinlich für die C-Syntax gewählt.

Nun ist es eine gute Frage, warum JavaScript einer anderen Skriptsprache vorgezogen wurde .

Raynos
quelle
2
Now why JavaScript was chosen over another scripting language: Ich könnte spekulieren, dass dies daran liegt, dass JavaScript die am häufigsten verwendete Skriptsprache ist, die über die Verwendung in Browsern sehr gut getestet wurde, und dass es einige hervorragende Open-Source-Interpreter-Implementierungen gibt. CouchDB verwendet uneval()einen Hinweis darauf, dass sie ihren Interpreter auf SpiderMonkey aufgebaut haben .
Yannis
Microsoft hat VBscript vor vielen Jahren auf Client-Seite unterstützt, aber zum Glück hat sich das nie
Mark K Cowan
6

Wir werden alle bescheidene Kuchen essen müssen, wenn wir feststellen, dass JS verwendet wird, um zu schreiben:

  • Datenbanken

  • Server

  • Betriebssystem

  • und eine Vielzahl von Bibliotheken, Frameworks, Rendering-Engines und Kompilierungssprachen,

... weil es besser ist.

Im Ernst, bitte ... hör mir zu. Nicht den Boten erschießen.

Fragen Sie Microsoft, warum Windows 8 mit JS als erstklassigem Bürger erstellt wird. Oder Mozillas neues mobiles Betriebssystem oder IBMs Rivertrail, PhoneGap, ExtJS oder WebGL.

Wäre eines dieser Unternehmen oder Projekte erfolgreich gewesen, wenn die Experten in der Umsetzung nichts Besseres gefunden hätten?

Die Antwort ist ... Sie haben es getan. Wir machten. Das Thema hier sollte also klar sein: Es gibt einen besseren Weg.

Aber das Bessere ist subjektiv: Also müssen wir einen Drilldown durchführen und vergleichen. Was ist besser?

Es begann mit AJAX ... und es hat nicht aufgehört.

  1. Nicht blockierendes E / A. Das ist eine wirklich große Sache und es lohnt sich zu wissen. In JS ist dies das Rückrufmuster. Es stellt sich heraus, dass Callbacks einen nicht blockierenden Server aktivieren können: Node.js ~ ca. 8 Codezeilen. setTimeout () ist ein Rückruf. Asynchrone Verarbeitung mit einem Thread.

  2. Flexibilität. Was? -Java und C haben Klassen und Schnittstellen, werden aber als objektorientiert bezeichnet. JavaScript hat nur Objekte. Aber es heißt ... etwas anderes.

    - Nur Objekte zu haben ist eine nette Sache für die Flexibilität, da Mitglieder und Methoden zur Laufzeit vollständig dynamisch sind. -Prototypische Vererbung ist nicht beängstigend. Einige Experten beschreiben es als Objekt-Pack-Pack. -JS ist fehlerfreundlich. -Code kann zusammengemischt werden, um Composite-Komponenten zu erhalten, ohne viel Aufwand oder Kenntnisse über ... 'Schnittstellen', 'Abstraktion', 'Vererbung', 'Kapselung', 'Polymorphismus'. Gute Dinge, aber wie Nike in JS; du machst es einfach.

  3. Daten-Übersetzung. Mit JSON können Objekte von vorne nach hinten und von hinten nach vorne übertragen werden. Keine XML-Datenübersetzungen. JSON ist eindeutig einfach.

  4. Geringe Lernkurve. Es ist möglich, äußerst komplexen Code auszuschneiden und einzufügen und ihn dann schrittweise zu debuggen. Ich höre einen Kollegen ... "Noobs". Aber es ist nicht nur für Noobs.

-Es stellt sich heraus, dass dies eine wirklich schöne Funktion für Rapid Prototyping ist. Und überall tauchen Websites auf, die dieses Design-in-Browser-Konzept nutzen, und das noch umfassender. Laufzeit-Prototyping. Kasse JSFiddle und CodePen, auch MicroJS. GitHub.

Like Transformers, with JS, there is more than meets the eye.  

It is a big deal.

UPDATE: seit diesem Posting wird JavaScript von anderen Sprachen ausgiebig genutzt.

In Java - check out Nashorn.
In C++ - check out Emscripten, or ASM.
And there are many more.

The big surprise since the original writing of this answer was JS cross-compilation.

It turns out that many languages can be compiled to JS.

And the community is encouraging that... CoffeeScript, Dart, etc.    

This is not my specific area of expertise, but it is going on in big ways.

Simply put, we just don't know how the dynamism of JS is going to hash out yet. 
Jack Stone
quelle
Python kann all das auch
Jonathan
@ JonathanLeaders - alle? :)
Jack Stone
1
@ Jonathan-Leader Kann Python in einem Webbrowser ausgeführt werden?
Aaron C
1
  • Mit mehr kann man weniger machen - dazu gibt es ein paar Schulen. Die Ausführlichkeitsschule möchte, dass alles bis ins kleinste Detail beschrieben wird, was jeder Idiot verstehen kann. JS ist ein Mitglied der anderen Schule, in der Sie die Komplexität so aufteilen können, dass Sie sich einen Überblick verschaffen können, bevor Sie verstehen, wie die feineren Details funktionieren. Es ist viel einfacher, in JS auf eine Schnittstelle zu schreiben, als in den meisten Sprachen, IMO.

  • Erstklassige Funktionen, Verschlüsse, prototypische Vererbung - Es ist eine wirklich sehr flexible Kombination. Wir können den Unterricht nachahmen, wenn wir wollen. Aber das wird von jenen, die JS wirklich gut verstehen, als etwas sinnloses Unterfangen angesehen. Compositing ist für JS viel besser geeignet als verkettete Vererbung.

  • Das Blockieren ist auf einer höheren Ebene nützlich. Ja, du hast mich gehört. Es hilft Ihnen, den Fokus auf den JS als Messenger und nicht auf das Arbeitspferd zu richten, und verarbeitet so gut wie die Warteschlange selbst, während Unterbrechungen durch asynchrones Verhalten zwischen Funktionsaufrufen berücksichtigt werden.

  • Ich würde sagen, dass die Lernkurve für das Schreiben von leistungsfähigem JS tatsächlich etwas steil ist, aber wenn Sie erst einmal da sind, ist es ein Kinderspiel. Es ist jedoch überhaupt nicht schwer, vorgebackene Sachen in JS auf der niedrigeren Fähigkeitsstufe zu implementieren.

Erik Reppen
quelle
0

Diese Frage ist etwas veraltet, aber der Grund für die Verwendung von JavaScript im Vergleich zu Java / C ++ ist, dass weder Java noch C ++ Codefragmente problemlos unterstützen.

Selbst wenn JavaScript niemals erfunden worden wäre, wären Java oder C ++ eine gute Wahl für Quellcode-Fragmente, die auf der Serverseite ausgeführt werden. Sie würden sich eine andere Sprache aussuchen oder ihre eigene erfinden. Früher verwendeten Produkte, um ihre eigene Sprache zu erstellen, ihre eigenen Produktionsregeln, AST, Dolmetscher usw. zu definieren, die auf ihre Domäne spezialisiert waren.

Mit JavaScript ist es jedoch extrem einfach, eine domänenspezifische Sprache (Domain Specific Language, DSL) für Ihr Produkt zu erstellen und die Engine einzubetten, ohne sich um die Erstellung der gesamten anderen nicht domänenbezogenen Infrastruktur kümmern zu müssen.

Andrew T. Finnell
quelle
0

Ereignisgesteuertes Programmiermodell

JavaScript wurde mit einem ereignisgesteuerten Nicht-Shared-Memory-Ansatz für die Datenverarbeitung erstellt. In der UI-Entwicklung ist dies ein völlig alter Hut. Es gibt keine Vermutung, dass Ihre "Anwendung" die Kontrolle über einen Prozess hat. Es gibt keine Prozess-API. Es gibt auch keine Hauptfunktion.

Ihre "Anwendung" ist eine Sammlung von Skripten, die ausgeführt werden, wenn ein bestimmtes Ereignis eintritt, z

  • Das Skript wird in den Browser geladen
  • Das Laden der HTML-Seite erreicht einen bestimmten Punkt
  • auf eine bestimmte Benutzerinteraktion mit einem bestimmten Element

Dies passt ziemlich gut zu den kleinen Teilen der Verarbeitungslogik, die für Datentransformationen benötigt werden.

Skriptsprache

In der Lage zu sein, ohne eine Kompilierungsstufe auszuführen, bedeutet, dass Verarbeitungsanweisungen leicht gespeichert werden können. Sie können das Skript einfach als Text speichern und ohne spezielle Datentypen oder Kenntnisse weitergeben.

Ganz einfach, stabil und abwärtskompatibel

Der Code, den Sie heute schreiben, ist nicht viel anders als vor 10 Jahren. Die Versionierung ist für die Nutzer, die sie einbetten, wahrscheinlich kein großes Problem.

Darsteller

Es gibt mehrere gute Open-Source-Engines, in die jede Menge Arbeit investiert wurde. Es wird viel schneller ausgeführt als viele Alternativen.

Geschweifte Klammern

Viele Menschen sind mit einer Reihe von Programmiersprachen in ihrem Komfort eingeschränkt. Sie können zum Beispiel nur Java oder C # programmieren. Sie erwarten daher, dass sie JavaScript leicht erlernen können, da es vertraut aussieht. Das ist natürlich eine Illusion. Als ich Python lernte, war es ungefähr so ​​schnell wie das Erlernen von JavaScript. Syntax ist nur dann emotional bedeutsam, wenn sie nicht vollständig undurchsichtig ist.

Henrik Vendelbo
quelle