เหตุใดจึงใช้ Javascript ใน MongoDB และ CouchDB แทนภาษาอื่นเช่น Java, C ++


19

ฉันถามคำถามเกี่ยวกับ SO แต่แนะนำให้ลองที่นี่ ดังนั้นที่นี่มันจะไป:

ความเข้าใจเกี่ยวกับ Javascript ของฉันจนถึงตอนนี้ก็คือว่ามันเป็นภาษาฝั่งไคลเอ็นต์ที่จับภาพเหตุการณ์และทำให้หน้าเว็บเป็นแบบไดนามิก

แต่จากการอ่านการเปรียบเทียบระหว่าง MongoDB กับ CouchDBฉันสังเกตว่าทั้งสองกำลังใช้ Javascript นี่ทำให้ฉันสงสัยว่าเหตุผลที่เลือก JavaScript มากกว่าภาษาทั่วไปอื่น ๆ

ฉันเดาว่าฉันกำลังพยายามเข้าใจบทบาทของ JavaScript และข้อดีเหนือภาษาอื่น ๆ

อัปเดต: ฉันไม่ได้ถามเกี่ยวกับภาษา / ไดรเวอร์ที่รองรับโดยฐานข้อมูลทั้งสอง การเปรียบเทียบบอกว่า:

ทั้ง CouchDB และ MongoDB ใช้ประโยชน์จาก Javascript CouchDB ใช้ Javascript อย่างกว้างขวางรวมทั้งในอาคารของมุมมอง

MongoDB ยังรองรับการเรียกใช้ฟังก์ชันจาวาสคริปต์ในฝั่งเซิร์ฟเวอร์และใช้จาวาสคริปต์สำหรับแผนที่ / ลดการใช้งาน

ฉันไม่เข้าใจว่าทำไม Javascript จึงถูกนำมาใช้เพื่องานแบ็กเอนด์ เหตุใดจึงเหมาะสำหรับการสร้างมุมมองใน CouchDB หรือสำหรับการใช้แผนที่ / ลดการดำเนินการ? ทำไม C / C ++ หรือ Java ไม่ได้ใช้? อะไรคือข้อดีของการใช้ Javascript สำหรับการทำงานส่วนหลัง


3
Javascript ไม่ได้เป็นเพียงภาษาสคริปต์ของเบราว์เซอร์ แอปพลิเคชั่นอื่น ๆ ไม่กี่ฝัง Javascript หรือภาษาที่คล้ายกัน (เช่น ActionScript ใน Flash พร้อมกับ Javascript สำหรับสคริปต์แอปพลิเคชัน Adobe จำนวนหนึ่ง) ฉันไม่แน่ใจ แต่อาจ Javascript ก็ไม่เคยตั้งใจที่จะเพียงถูกฝังอยู่ในเว็บเบราเซอร์ ดังนั้น ... ทำไมไม่ฝังไว้ในแอปพลิเคชันฐานข้อมูลส่วนหลัง?
Steve314

เนื่องจากฉันเคยเห็น / อ่านเกี่ยวกับ JS ที่ทำงานในเบราว์เซอร์ฉันสงสัยว่ามันทำงานบนฝั่งเซิร์ฟเวอร์โดยไม่ต้องเปิดเบราว์เซอร์ได้อย่างไร
jeff musk

1
ขอบคุณ คุณพูดถูก พวกเขาใช้คอมไพเลอร์ SpiderMonkey เพื่อทำส่วน JS ฝั่งเซิร์ฟเวอร์ en.wikipedia.org/wiki/SpiderMonkey_(JavaScript_engine) @Raynos ชี้เรื่องนี้
jeff musk

6
สำหรับสิ่งที่คุณจะต้องมีเครื่องมือ javascript, เช่นV8และแมงมุม มีค่อนข้างน้อยการใช้งานจาวาสคริสำหรับนอกเบราว์เซอร์ที่มีวิกิพีเดียมีรายการยาว
yannis

Hmmm - ความคิดเห็นก่อนหน้าของฉันนั้นถูกต้องตามแบบแผน แต่สำหรับฉันที่จะพยายามเจาะจงให้มากขึ้นอาจเป็นอันตรายได้ - ฉันไม่รู้อะไรเกี่ยวกับ MongoDB หรือ CouchDB ในขณะที่ไม่มีเหตุผลว่าทำไมแอปฐานข้อมูลส่วนหลัง บนเซิร์ฟเวอร์ไม่สามารถมีล่าม Javascript ที่ไม่ขึ้นกับเบราว์เซอร์เป็นของตัวเองฉันไม่ทราบว่าเป็นวิธีจัดการหรือไม่และคำตอบด้านล่างแนะนำว่าอาจไม่ใช่
Steve314

คำตอบ:


15

รหัสมือถือ & ข้ามแพลตฟอร์ม

JavaScript คือสิ่งที่เรียกว่ารหัสมือถือรหัสจะถูกขนส่งจากเซิร์ฟเวอร์ (MongoDB และ CouchDB ในกรณีนี้) ไปยังไคลเอนต์ (เว็บเบราว์เซอร์) และดำเนินการกับลูกค้าโดยไม่มีกระบวนการติดตั้ง

สภาพแวดล้อมรันไทม์ของ JavaScript (เว็บเบราว์เซอร์) นั้นมีอยู่ในหลายแพลตฟอร์มเช่นกัน ทำให้ JavaScript เป็นภาษาข้ามแพลตฟอร์มที่ดี

ไม่ได้ใช้ JavaScript เป็นภาษาส่วนหลังหลัก

MongoDB แบ็กเอนด์ถูกนำไปใช้ใน C ++ และ CouchDB ถูกนำไปใช้ใน Erlang ดังนั้น JavaScript จะไม่ถูกใช้เป็นภาษาหลักสำหรับระบบแบ็กเอนด์สำหรับวิทยานิพนธ์เหล่านี้

จากmongodb.com :

เขียนใน C ++

จาก couchdb.apache.com :

CouchDB เขียนขึ้นใน Erlang ซึ่งเป็นภาษาการเขียนโปรแกรมการทำงานที่มีประสิทธิภาพเหมาะสำหรับการสร้างระบบกระจายพร้อมกัน Erlang ช่วยให้การออกแบบที่ยืดหยุ่นสามารถปรับขนาดได้และขยายได้อย่างง่ายดาย


1
ขอขอบคุณสำหรับการตอบสนองของคุณ. "CouchDB ใช้ Javascript อย่างกว้างขวางรวมถึงในการสร้างมุมมอง" เหตุใดลูกค้าจึงเป็นเบราว์เซอร์สำหรับการทำงานส่วนหลังเช่นการสร้างมุมมอง สำหรับงานดังกล่าวทำไมเบราว์เซอร์ถึงเข้ามาในรูปภาพ
jeff musk

@ startup007: ดูส่วนแรกของคำตอบของฉัน เว็บเบราว์เซอร์ได้รับการติดตั้งแล้วในระบบส่วนใหญ่ในปัจจุบัน (เช่น Mac OS X, Windows, Linux, iPhone, Android) ดังนั้นผู้ใช้ไม่จำเป็นต้องติดตั้งอะไรเนื่องจากเว็บไซด์ brosers สามารถเรียกใช้ JavaScript (รหัสมือถือ)
Jonas

ฉันขอโทษที่ไม่ได้รับมันทันที ให้ฉันทำอย่างละเอียด ดังนั้นฐานข้อมูลเหล่านี้จึงเปิดเบราว์เซอร์บนฝั่งเซิร์ฟเวอร์เพื่อทำหน้าที่บางส่วนแล้วส่งคืนเอาต์พุต JSON หรือไม่
jeff musk

1
ขอบคุณ Raynos! wiki บน spidermonkey พูดว่า - "MongoDB ซึ่งเป็นระบบฐานข้อมูล NoSQL อีกตัวใช้ SpiderMonkey สำหรับการประมวลผล JavaScript ฝั่งเซิร์ฟเวอร์" en.wikipedia.org/wiki/SpiderMonkey_(JavaScript_engine) อืมน่าสนใจ
jeff musk

4
ผิด MongoDB หรือ CouchdB ไม่ใช้เบราว์เซอร์เป็นลูกค้า ไคลเอนต์ฐานข้อมูลเป็นไลบรารีที่แอพ (โดยทั่วไปเป็นแอปพลิเคชัน แต่อาจเป็นแอปพลิเคชันประเภทใดก็ได้) ที่ใช้ในการจัดการข้อมูลที่เก็บไว้ในฐานข้อมูล ไม่มีรูปภาพในเบราว์เซอร์ JavaScript ถูกใช้เป็นภาษานิยามข้อมูล (เซ็ตของ JSON) และยังเป็นภาษาของโพรซีเดอร์สโตร์มันถูกประมวลผลในเอ็นจินฐานข้อมูลไม่ใช่ที่ไคลเอ็นต์และไม่ได้อยู่ในเบราว์เซอร์ใด ๆ
Javier

7

เนื่องจาก JavaScript เป็นภาษาสคริปต์

มันเป็นภาษาที่ยืดหยุ่นและมีพลังที่ผู้คนคุ้นเคย

เหตุผลอื่นที่ใช้ JavaScript ก็คือมันสอดคล้องกับรูปแบบ JSON ที่ฐานข้อมูลเหล่านี้ใช้งานได้ดี

และในที่สุดฐานข้อมูลเหล่านี้ต้องการภาษาที่สามารถตีความได้ เพราะรหัสสำหรับการค้นหาเหล่านี้จะถูกส่งผ่านเครือข่าย

ดังนั้นคุณต้อง

  • พลวัต
  • คล่องตัว
  • คุ้นเคย
  • ตีความ

ภาษา. ฉันไม่คิดว่า JavaScript เป็นตัวเลือกที่ไม่ดีที่นี่ มันอาจจะเลือกให้มีไวยากรณ์สไตล์ C

ตอนนี้ทำไมเลือก JavaScript ในภาษาสคริปต์อื่นเป็นคำถามที่ดี


2
Now why JavaScript was chosen over another scripting language: ฉันสามารถคาดเดาได้ว่าเป็นเพราะ JavaScript เป็นภาษาสคริปต์ที่ใช้กันอย่างแพร่หลายมากทดสอบอย่างดีผ่านการใช้งานบนเบราว์เซอร์และมีการแปลล่ามโอเพนซอร์ซที่ยอดเยี่ยมอยู่เล็กน้อย CouchDB ใช้uneval()คำใบ้ว่าพวกเขาได้สร้างล่ามของพวกเขาที่ด้านบนของแมงมุม
yannis

Microsoft ได้สนับสนุน VBscript ในฝั่งไคลเอ็นต์หลายปีที่ผ่านมา แต่โชคดีที่ไม่เคยเอาออก ...
Mark K Cowan

6

เราทุกคนจะต้องกินความอ่อนน้อมถ่อมตนเมื่อเรารู้ว่า JS กำลังถูกใช้ในการเขียน:

  • ฐานข้อมูล

  • เซิร์ฟเวอร์

  • ระบบปฏิบัติการ

  • และไลบรารี, กรอบงาน, เอ็นจิ้นการเรนเดอร์และการรวบรวมภาษา

... เพราะมันดีกว่า

ได้โปรดเถอะ ... ได้ยินฉันหน่อย อย่ายิงผู้ส่งสาร

ถาม Microsoft ว่าเหตุใดจึงสร้าง Windows 8 โดยใช้ JS ในฐานะพลเมืองชั้นหนึ่ง หรือระบบปฏิบัติการมือถือใหม่ของ Mozilla หรือ Rivertrail, PhoneGap, ExtJS หรือ IBM ของ IBM

บริษัท หรือโครงการเหล่านี้จะประสบความสำเร็จหรือไม่หากผู้เชี่ยวชาญไม่พบสิ่งที่ดีกว่าในการนำไปใช้

คำตอบคือ ... พวกเขาทำ เราทำ. ดังนั้นรูปแบบที่นี่ควรชัดเจน: มีวิธีที่ดีกว่า

แต่สิ่งที่ดีกว่าก็คืออัตวิสัยดังนั้นเราต้องเจาะลึกและเปรียบเทียบ อะไรดีกว่า?

มันเริ่มต้นด้วย AJAX ... และมันยังไม่หยุด

  1. ไม่มีการปิดกั้น IO นี่เป็นเรื่องใหญ่และคุ้มค่าที่จะรู้ ใน JS นี่คือรูปแบบการโทรกลับ ปรากฎว่าการใช้การโทรกลับสามารถเปิดใช้งานเซิร์ฟเวอร์ที่ไม่บล็อก: Node.js ~ ประมาณ 8 บรรทัดของรหัส setTimeout () เป็นการโทรกลับ การประมวลผลแบบอะซิงโครนัสแบบเธรดเดี่ยว

  2. มีความยืดหยุ่น อะไร? -Java และ C มีคลาสและอินเตอร์เฟส แต่เรียกว่า object-oriented JavaScript มีวัตถุเท่านั้น แต่มันถูกเรียกว่า ... อย่างอื่น

    - การมีวัตถุอย่างเดียวเป็นสิ่งที่ดีสำหรับความยืดหยุ่นเนื่องจากสมาชิกและวิธีการเป็นแบบไดนามิกอย่างเต็มที่ในขณะทำงาน - การถ่ายทอดทางพันธุกรรมไม่น่ากลัว ผู้เชี่ยวชาญบางคนอธิบายว่ามันเป็น object-packpack -JS เป็นมิตรกับข้อผิดพลาด - รหัสสามารถผสมเข้าด้วยกันเพื่อส่งผลให้คอมโพสิต - ส่วนประกอบโดยไม่ต้องใช้ความพยายามมากหรือรู้ ... 'อินเทอร์เฟซ', 'abstraction', 'การสืบทอด', 'encapsulation', 'polymorphism' สิ่งที่ดี แต่เหมือน Nike ใน JS; คุณแค่ทำมัน

  3. ข้อมูลการแปล ด้วย JSON คุณสามารถถ่ายโอนวัตถุจากด้านหน้าไปด้านหลังกลับไปด้านหน้า ไม่มีการแปลข้อมูล XML JSON นั้นง่ายมาก

  4. เส้นโค้งการเรียนรู้ต่ำ มีความเป็นไปได้ที่จะตัดและวางโค้ดที่ซับซ้อนมากจากนั้นทำการดีบักเป็นขั้นตอน ฉันได้ยินเพื่อนร่วมงาน ... 'noobs' แต่มันไม่ใช่แค่สำหรับ noobs

- ปรากฎว่านี่เป็นคุณสมบัติที่ดีมากสำหรับ Rapid Prototyping และไซต์ต่างๆก็โผล่ขึ้นมาทั่วซึ่งใช้ประโยชน์จากสิ่งที่ออกแบบในเบราว์เซอร์และอีกมากมาย รันไทม์การสร้างต้นแบบ ชำระเงิน 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 สามารถทำทุกอย่างได้เช่นกัน
Jonathan

@JonathanLeaders - ทั้งหมดเหรอ? :)
แจ็คสโตน

1
@ jonathan-Leaders Python สามารถทำงานบนเว็บเบราว์เซอร์ได้หรือไม่?
แอรอน C

1
  • คุณสามารถทำอะไรได้น้อยลงด้วยมาก - มีโรงเรียนสองแห่งในนี้ โรงเรียนคำฟุ่มเฟื่อยต้องการทุกสิ่งที่สะกดออกมาในรายละเอียดที่ดีที่คนบ้าสามารถเข้าใจ JS เป็นสมาชิกของโรงเรียนตรงข้ามที่คุณสามารถเลเยอร์ความซับซ้อนได้ง่ายขึ้นเพื่อให้ได้ภาพใหญ่ก่อนที่จะเข้าใจวิธีการทำงานของรายละเอียดปลีกย่อย มันง่ายกว่าที่จะเขียนลงในอินเตอร์เฟสใน JS มากกว่าในภาษาส่วนใหญ่ IMO

  • ฟังก์ชั่นชั้นหนึ่งการปิดการสืบทอดต้นแบบ - มันเป็นคำสั่งผสมที่ยืดหยุ่นจริงๆ เราสามารถเลียนแบบคลาสได้ถ้าต้องการ แต่นั่นถูกมองว่าเป็นความพยายามที่ไม่มีจุดหมายโดยผู้ที่เข้าใจ JS เป็นอย่างดี การแต่งชุดให้เหมาะกับ JS นั้นดีกว่าการถูกล่ามโซ่

  • การบล็อกมีประโยชน์ในระดับที่สูงขึ้น ใช่คุณได้ยินฉัน มันช่วยให้คุณให้ความสำคัญกับ JS ในฐานะผู้ส่งสารมากกว่า workhorse และประมวลผลคิวตัวเองในขณะที่ช่วยให้การขัดจังหวะจากพฤติกรรมแบบอะซิงโครนัสระหว่างการเรียกใช้ฟังก์ชัน

  • ฉันจะบอกว่าช่วงการเรียนรู้นั้นสูงชันเล็กน้อยสำหรับการเขียน JS ที่ทรงพลัง แต่เมื่อคุณอยู่ที่นั่นมันก็บีบแตร อย่างไรก็ตามมันไม่ยากเลยที่จะใช้สิ่งที่เตรียมไว้ล่วงหน้าใน JS ในระดับทักษะที่ต่ำกว่า


0

คำถามนี้ล้าสมัยเล็กน้อย แต่เหตุผลในการใช้ JavaScript กับ Java / C ++ คือ Java หรือ C ++ นั้นไม่รองรับส่วนย่อยของรหัสได้อย่างง่ายดาย

แม้ว่า JavaScript ไม่เคยถูกประดิษฐ์ขึ้นมา Java หรือ C ++ จะเป็นตัวเลือกที่ดีสำหรับ Source Code Fragments ที่จะทำงานบนฝั่งเซิร์ฟเวอร์ พวกเขาจะเลือกภาษาอื่นหรือคิดค้นของตนเอง ย้อนกลับไปในวันที่ผลิตภัณฑ์ที่ใช้ในการสร้างภาษาของตัวเองกำหนดกฎการผลิตของตัวเอง, AST, ล่าม ฯลฯ ที่เชี่ยวชาญในโดเมนของพวกเขา

แต่ด้วย JavaScript มันง่ายมากในการสร้าง Domain Specific Language (DSL) สำหรับผลิตภัณฑ์ของคุณและฝังเอ็นจิ้นโดยไม่ต้องกังวลเกี่ยวกับการสร้างโครงสร้างพื้นฐานที่เกี่ยวข้องกับโดเมนอื่น ๆ ทั้งหมด


0

รูปแบบการเขียนโปรแกรมที่ขับเคลื่อนด้วยเหตุการณ์

JavaScript ถูกสร้างขึ้นโดยใช้วิธีการที่ไม่ใช่หน่วยความจำแบบแบ่งใช้ในการคำนวณ ในการพัฒนา UI นี่คือหมวกที่สมบูรณ์แบบ ไม่มีข้อสันนิษฐานว่า "แอปพลิเคชัน" ของคุณอยู่ในการควบคุมกระบวนการ ไม่มี API กระบวนการ หรือมีฟังก์ชั่นหลัก

"แอปพลิเคชัน" ของคุณคือชุดของสคริปต์ที่จะถูกดำเนินการเมื่อมีสิ่งใดเกิดขึ้นเช่น

  • โหลดสคริปต์ในเบราว์เซอร์
  • การโหลดหน้า html มาถึงจุดหนึ่ง
  • ในการโต้ตอบของผู้ใช้เฉพาะกับองค์ประกอบที่กำหนด

สิ่งนี้เข้ากันได้ดีกับตรรกะการประมวลผลขนาดเล็กที่จำเป็นสำหรับการแปลงข้อมูล

ภาษาสคริปต์

ความสามารถในการดำเนินการโดยไม่มีขั้นตอนการคอมไพล์หมายความว่าสามารถเก็บคำสั่งการประมวลผลได้อย่างง่ายดาย คุณสามารถบันทึกสคริปต์ได้อย่างง่ายดายเป็นข้อความแล้วส่งไปรอบ ๆ โดยไม่มีชนิดข้อมูลหรือความรู้พิเศษ

ง่ายมากเสถียรและย้อนกลับได้

รหัสที่คุณเขียนวันนี้ไม่ได้แตกต่างจากเมื่อ 10 ปีก่อนมากนัก การกำหนดเวอร์ชันไม่น่าจะเป็นปัญหาสำหรับคนที่ฝังไว้

performant

มีเครื่องมือโอเพนซอร์ซที่ดีอยู่หลายตัวพร้อมกับงานมากมาย มันรันเร็วกว่าตัวเลือกมากมาย

วงเล็บปีกกา

หลายคนถูก จำกัด ด้วยความสะดวกสบายด้วยภาษาโปรแกรมที่หลากหลาย พวกเขารู้วิธีตั้งโปรแกรม Java หรือ C # เท่านั้น ดังนั้นพวกเขาจึงคาดหวังที่จะเรียนรู้ JavaScript ได้ง่ายเพราะมันดูคุ้นเคย แน่นอนว่าเป็นภาพลวงตา เมื่อฉันเรียน Python มันก็เหมือนกับการเรียนรู้ JavaScript ไวยากรณ์มีความหมายทางอารมณ์เพียงอย่างเดียวโดยถือว่าไม่ชัดเจน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.