Java、C ++などの他の言語ではなく、MongoDBとCouchDBでJavascriptが使用されるのはなぜですか?


19

SOでこの質問をしましたが、ここで試してみることを勧められました。だからここに行く:

これまでの私のJavaScriptの理解は、イベントをキャプチャし、Webページを動的にするクライアント側の言語であるということです。

しかし、MongoDBとCouchDBの比較を読むと、どちらもJavascriptを使用していることに気付きました。これは、他の従来の言語よりもJavaScriptを選択した理由を疑問に思います。

JavaScriptの役割と、他の言語に対するJavaScriptの利点を理解しようとしていると思います。

更新:2つのデータベースでサポートされている言語/ドライバーについて質問していません。比較によると:

CouchDBとMongoDBはどちらもJavascriptを使用します。CouchDBは、ビューの構築を含むJavascriptを広く使用しています

MongoDBは、任意のjavascript関数をサーバー側で実行することもサポートし、map / reduce操作にjavascriptを使用します。

私の理解不足は、Javascriptがバックエンド作業にまったく使用されない理由に関係しています。CouchDBでビューを構築するのに、またはmap / reduce操作を使用するのになぜ好まれますか?なぜC / C ++またはJavaが使用されなかったのですか?このようなバックエンド作業にJavascriptを使用する利点は何ですか?


3
Javascriptは、ブラウザのスクリプト言語だけではありません。他のいくつかのアプリケーションには、Javascriptまたは同様の言語が埋め込まれています(たとえば、FlashのActionScriptと、多数のAdobeアプリケーションをスクリプト化するためのJavascript)。確かではありませんが、Javascriptは Webブラウザーのみ埋め込まれる。それで...なぜそれをバックエンドのデータベースアプリケーションに埋め込んでみませんか?
Steve314

私はブラウザで実行されているJSについて見て/読んでいるので、ブラウザを開かずにサーバーサイドでどのように実行されるのでしょうか?
ジェフムスク

1
ありがとう。あなたが正しいです。SpiderMonkeyコンパイラを使用して、サーバー側のJSパートを実行しています。en.wikipedia.org/wiki/SpiderMonkey_(JavaScript_engine)@Raynosはこれを指摘しました。
ジェフムスク

6
そのためには、V8SpiderMonkeyなどのJavaScriptエンジンが必要です。ブラウザ以外のJavascriptの使用法はかなりあります。ウィキペディアには長いリストがあります。
ヤニス

うーん-私の以前のコメントは一般化として正確ですが、私にとってより具体的にしようとすると危険になる可能性があります-MongoDBまたはCouchDBについては何も知りません。バックエンドデータベースアプリを使用する理由はありませんが。サーバーでは、ブラウザに依存しない独自のJavascriptインタープリターを持つことはできません。それがどのように処理されるかはわかりません。以下の回答は、おそらくそうではないことを示唆しています。
Steve314

回答:


15

モバイルコードとクロスプラットフォーム

JavaScriptはモバイルコードと呼ばれるもので、コードはサーバー(この場合はMongoDBとCouchDB)からクライアント(Webブラウザー)に転送され、インストールプロセスなしでクライアントで実行されます。

JavaScriptランタイム環境(Webブラウザー)も多くのプラットフォームで広く利用可能です。これにより、JavaScriptは優れたクロスプラットフォーム言語になります。

JavaScriptは主要なバックエンド言語として使用されません

MongoDBバックエンドはC ++で実装され、CouchDBはErlangで実装されます。したがって、これらのシステムのバックエンドの主要言語としてJavaScriptは使用されません。

mongodb.comから:

C ++で書かれた

から couchdb.apache.com

CouchDBは、同時分散システムの構築に最適な堅牢な関数型プログラミング言語であるErlangで記述されています。Erlangは、容易にスケーラブルで容易に拡張可能な柔軟な設計を可能にします。


1
ご回答ありがとうございます。「CouchDBは、ビューの構築を含むJavascriptを広く使用しています」。では、なぜクライアントはビューの構築などのバックエンド作業用のブラウザーなのでしょうか?このようなタスクの場合、なぜブラウザーが登場するのでしょうか。
ジェフムスク

@ startup007:私の答えの最初の部分を見てください。Webブラウザは現在、ほとんどのシステム(Mac OS X、Windows、Linux、iPhone、Androidなど)にすでにインストールされているため、WebブラウザはJavaScript(モバイルコード)を実行できるため、ユーザーは何もインストールする必要はありません。
ジョナス

すぐに手に入らないことをおpoびします。詳しく説明させてください。これらのデータベースは、サーバー側でブラウザーを開いてタスクの一部を実行し、JSON出力を返しますか?
ジェフムスク

1
Raynosに感謝します!spidermonkeyのwikiによれば、「別のNoSQLデータベースシステムであるMongoDBは、サーバー側のJavaScript実行にSpiderMonkeyを使用しています。」en.wikipedia.org/wiki/SpiderMonkey_(JavaScript_engine)。うーん面白い
ジェフムスク

4
間違っています。MongoDBもCouchdBもブラウザをクライアントとして使用していません。データベースクライアントは、データベースに保存されたデータを管理するためにアプリ(通常はwebappですが、あらゆる種類のアプリケーション)が使用するライブラリです。写真にはブラウザがありません。JavaScriptは、データ定義言語(JSONのスーパーセット)として使用され、ストアプロシージャ言語としても使用され、クライアントではなくデータベースエンジンで実行され、ブラウザでも実行されません。
ハビエル

7

JavaScriptはスクリプト言語であるためです。

それは、人々になじみのある柔軟で動的な言語です。

JavaScriptが使用されるもう1つの理由は、これらのデータベースが使用するJSON形式とうまく整合するためです。

そして最後に、これらのデータベースには解釈可能な言語が必要です。これらのクエリのコードはネットワーク経由で送信されるためです。

だから、あなたが必要です

  • 動的
  • フレキシブル
  • おなじみの
  • 解釈された

言語。ここではJavaScriptが悪い選択だとは思わない。おそらくCスタイルの構文を持つために選択されます。

さて、JavaScriptが別のスクリプト言語よりも選ばれた理由は良い質問です。


2
Now why JavaScript was chosen over another scripting language:JavaScriptが最も広く使用されているスクリプト言語であり、ブラウザーでの使用を介して非常によくテストされており、優れたオープンソースインタープリターの実装がかなりあるためだと推測できます。CouchDBはuneval()SpiderMonkeyの上にインタープリターを構築したというヒントを使用しています。
ヤニス

Microsoftは長年バッククライアント側でサポートVBScriptをやったけど...離陸したことはありませんありがたいことに
マーク・K・コーワン

6

JSが記述に使用されていることに気付いたとき、私たちは皆、謙虚なパイを食べる必要があります。

  • データベース

  • サーバー

  • オペレーティング・システム

  • そして無数のライブラリ、フレームワーク、レンダリングエンジン、およびコンパイル言語、

...優れているからです。

真剣に、お願い…聞いてください。メッセンジャーを撃ってはいけません。

Microsoftに、JSを第一級市民としてWindows 8を構築している理由を尋ねてください。または、Mozillaの新しいモバイルOS、またはIBMのRivertrail、PhoneGap、ExtJS、またはWebGL。

専門家がより良い実装を見つけられなかった場合、これらの企業またはプロジェクトのいずれかが成功したでしょうか?

答えは...彼らはやった。やった したがって、ここでのテーマは明確でなければなりません。より良い方法があります。

しかし、主観的な方が良いため、ドリルダウンして比較する必要があります。何が良いですか?

それはAJAXで始まりました...そしてそれは止まりませんでした。

  1. ノンブロッキングIO。これは本当に大したことで、知る価値があります。JSでは、これはコールバックパターンです。コールバックを使用すると、ノンブロッキングサーバーを有効にできることがわかりました:Node.js〜約8行のコード。setTimeout()はコールバックです。シングルスレッドの非同期処理。

  2. 柔軟性。何?-JavaとCにはクラスとインターフェースがありますが、オブジェクト指向と呼ばれます。JavaScriptにはオブジェクトのみがあります。しかし、それは...何か他のものと呼ばれます。

    -オブジェクトのみを保持することは、柔軟性のために良いことです。メンバーとメソッドは実行時に完全に動的であるためです。-プロトタイプの継承は怖くない。一部の専門家は、これをオブジェクトパックパックと説明しています。-JSはエラーに対応しています。-コードは、多くの労力や知識なしで複合コンポーネントを生成するために混ざることができます...「インターフェース」、「抽象化」、「継承」、「カプセル化」、「多態性」の知識 良いことですが、JSのNikeと同様です。あなたはそれをするだけです。

  3. データ変換。JSONを使用すると、オブジェクトを前後に転送できます。XMLデータの翻訳はありません。JSONは明らかに単純です。

  4. 低学習曲線。非常に複雑なコードをカットアンドペーストしてから、ステップデバッグして存在させることができます。同僚の話を聞きます...「noobs」。しかし、それは初心者のためだけではありません。

-これはラピッドプロトタイピングにとって本当に素晴らしい機能であることが判明しました。そして、このブラウザ内のデザインを活用するサイトが、より広範囲に出現しています。ランタイムプロトタイプ。JSFiddleとCodePen、およびMicroJSもチェックアウトします。GitHub。

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

It is a big deal.

更新:この投稿JavaScriptは現在、他の言語で広く使用されているため。

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. 

Pythonもこれらすべてを実行できます。
ジョナサン

@JonathanLeaders-すべて?:)
ジャックストーン

1
@ jonathan-leadersはWebブラウザーでPythonを実行できますか?
アーロンC

1
  • あなたはもっと多くのことを少なくすることができます-これにはいくつかの学校があります。冗長性の学校では、すべてのバカが理解できるように、すべてを非常に詳細に記述したいと考えています。JSは反対派のメンバーであり、複雑なレイヤーを重ねることで、細かい部分がどのように機能するかを理解する前に全体像を把握しやすくなります。ほとんどの言語であるIMOよりもJSのインターフェイスに書く方がはるかに簡単です。

  • ファーストクラスの関数、クロージャー、プロトタイプの継承-これは本当に柔軟なコンボです。必要に応じてクラスを模倣できます。しかし、それはJSを本当によく理解している人たちにとって、いくぶん無意味な努力と見なされています。合成は、連鎖継承よりもはるかにJSに適しています。

  • ブロッキングは、より高いレベルで役立ちます。はい、あなたは私を聞いた。これは、主力ではなくメッセンジャーとしてJSに焦点を当て続けるのに役立ち、関数呼び出し間の非同期動作からの中断を許可しながら、プロセス自体をほとんどキューに入れます。

  • 実は、学習曲線は強力なJSを作成するのに少し急ですが、いったんそこに着くと、それは重要なことです。ただし、より低いスキルレベルでプリベークされたものをJSに実装することはまったく難しくありません。


0

この質問は少し古いですが、JavaScriptとJava / C ++を使用する理由は、JavaもC ++もコードフラグメントを簡単にサポートしないためです。

JavaScriptが発明されなかったとしても、JavaまたはC ++は、サーバー側で実行されるソースコードフラグメントに適した選択肢です。彼らは別の言語を選んだり、独自の言語を発明したりしました。当時、製品は独自の言語を作成し、独自の生産ルール、AST、インタープリターなど、ドメインに特化したものを定義するために使用されていました。

ただし、JavaScriptを使用すると、他のすべての非ドメイン関連インフラストラクチャを作成することを心配せずに、製品のドメイン固有言語(DSL)を作成し、エンジンを組み込むことが非常に簡単です。


0

イベント駆動型プログラミングモデル

JavaScriptは、コンピューティングに対するイベント駆動型の非共有メモリアプローチで作成されました。UI開発では、これは完全に古いものです。「アプリケーション」がプロセスを制御しているという仮定はありません。プロセスAPIはありません。主な機能もありません。

「アプリケーション」は、次のような特定のことが発生したときに実行されるスクリプトのコレクションです。

  • スクリプトがブラウザにロードされます
  • htmlページの読み込みが特定のポイントに達する
  • 特定のユーザーと特定の要素との対話

これは、データ変換に必要な処理ロジックの小さな塊と非常によく一致します。

スクリプト言語

コンパイル段階なしで実行できるということは、処理命令を簡単に保存できることを意味します。スクリプトをテキストとして簡単に保存し、特別なデータ型や知識がなくても渡すことができます。

非常にシンプルで安定しており、下位互換性があります

今日書くコードは、10年前とそれほど変わりません。バージョニングは、それを組み込む人々にとっては大きな問題にはなりそうにありません。

出演者

たくさんの優れたオープンソースエンジンがあり、膨大な作業が行われています。多くの選択肢よりもかなり高速に実行されます。

中かっこ

多くの人々は、さまざまなプログラミング言語の使いやすさに制限されています。たとえば、JavaまたはC#のプログラミング方法のみを知っています。そのため、見慣れたJavaScriptを簡単に学習できると期待しています。それはもちろん幻想です。Pythonを学んだときは、JavaScriptを学ぶのとほぼ同じペースでした。構文は、完全に曖昧ではないという前提で、感情的に重要です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.