NoSQL - MongoDB กับ CouchDB [ปิด]


154

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


เป็นขั้นตอนแรก mongoDB ดีกว่าเพราะมันง่ายต่อการเรียนรู้ แต่มีปัญหาบางอย่าง ไม่มีทางเลือกที่ดีที่สุดในการใช้ฐานข้อมูล noSQL เฉพาะมันขึ้นอยู่กับสิ่งที่คุณต้องทำ ลองใช้งานเอกสารที่เน้นคุณค่าคีย์กราฟเชิงคอลัมน์
คริส

คำตอบ:


148

ดูลิงค์ต่อไปนี้

ปรับปรุง : ฉันพบการเปรียบเทียบฐานข้อมูลNoSQLอย่างมาก

MongoDB (3.2)

  • เขียนใน: C ++
  • จุดหลัก: ที่เก็บเอกสาร JSON
  • ใบอนุญาต: AGPL (ไดรเวอร์: Apache)
  • โปรโตคอล: กำหนดเอง, ไบนารี (BSON)
  • การจำลองแบบต้นแบบ / สลาฟ (failover อัตโนมัติพร้อมชุดแบบจำลอง)
  • การสร้างเศษในตัว
  • ข้อความค้นหาคือการแสดงออกของจาวาสคริปต์
  • เรียกใช้ฟังก์ชันจาวาสคริปต์โดยพลการด้านเซิร์ฟเวอร์
  • มีการจัดทำดัชนีเชิงพื้นที่และแบบสอบถาม
  • เอนจินการเก็บข้อมูลหลายตัวที่มีคุณสมบัติด้านประสิทธิภาพที่แตกต่างกัน
  • ประสิทธิภาพเหนือฟีเจอร์
  • การตรวจสอบเอกสาร
  • บันทึก
  • กรอบการรวมที่มีประสิทธิภาพ
  • บนระบบ 32 บิต จำกัด ที่ ~ 2.5Gb
  • ค้นหาข้อความแบบบูรณาการ
  • GridFS เพื่อเก็บข้อมูลขนาดใหญ่ + ข้อมูลเมตา (ไม่ใช่ FS จริงๆ)
  • ตระหนักถึงศูนย์ข้อมูล

ใช้ดีที่สุด : หากคุณต้องการคิวรีแบบไดนามิก หากคุณต้องการกำหนดดัชนีอย่าแมป / ลดฟังก์ชั่น หากคุณต้องการประสิทธิภาพที่ดีในฐานข้อมูลขนาดใหญ่ หากคุณต้องการ CouchDB แต่ข้อมูลของคุณเปลี่ยนแปลงมากเกินไปให้เติมดิสก์

ตัวอย่างเช่น : สำหรับสิ่งส่วนใหญ่ที่คุณจะทำกับ MySQL หรือ PostgreSQL แต่การมีคอลัมน์ที่กำหนดไว้ล่วงหน้าจะช่วยให้คุณกลับมา

CouchDB (1.2)

  • เขียนใน: Erlang
  • จุดหลัก: ความสอดคล้องของฐานข้อมูลใช้งานง่าย
  • ใบอนุญาต: Apache
  • โปรโตคอล: HTTP / REST
  • การจำลองแบบสองทิศทาง (!)
  • ต่อเนื่องหรือเฉพาะกิจ
  • ด้วยการตรวจสอบความขัดแย้ง
  • ดังนั้นการจำลองแบบต้นแบบต้นแบบ (!)
  • MVCC - การดำเนินการเขียนไม่บล็อกการอ่าน
  • มีเอกสารเวอร์ชันก่อนหน้า
  • การออกแบบที่ผิดพลาด (เชื่อถือได้)
  • ต้องการการกระชับเป็นครั้งคราว
  • Views: แผนที่ฝัง / ลด
  • การจัดรูปแบบมุมมอง: รายการและรายการ
  • การตรวจสอบเอกสารฝั่งเซิร์ฟเวอร์ที่เป็นไปได้
  • รับรองความเป็นไปได้
  • การอัปเดตตามเวลาจริงผ่าน '_changes' (!)
  • การจัดการสิ่งที่แนบมา

ใช้ดีที่สุด : สำหรับการรวบรวมข้อมูลที่เปลี่ยนแปลงเป็นครั้งคราวซึ่งแบบสอบถามที่กำหนดไว้ล่วงหน้าจะต้องถูกเรียกใช้ สถานที่ที่การกำหนดเวอร์ชันมีความสำคัญ

ตัวอย่างเช่น : ระบบ CRM, CMS การทำสำเนาต้นแบบหลักเป็นคุณลักษณะที่น่าสนใจโดยเฉพาะช่วยให้การปรับใช้หลายไซต์ทำได้ง่าย


1
สำหรับทุกคนที่เกี่ยวข้องกับสิทธิ์การใช้งานเซิร์ฟเวอร์ของ MongoDB เป็น AGPL การดูนโยบายสิทธิ์ใช้งานของ mongodbอาจช่วยบรรเทาได้บ้าง
แพทริค

@amra ดังนั้นคุณหมายถึงถ้าฉันบันทึกข้อมูลและอ่านอย่างเดียวโดยใช้ couchdb เป็นตัวเลือกที่ดีที่สุด?
verystrongjoe

@verystrongjoe มันขึ้นอยู่กับความซับซ้อนของข้อมูลและการสืบค้น โดยทั่วไปคุณไม่สามารถพูดได้ว่าอันไหนดีที่สุด
amra

@amra Ok แต่ .. ถ้ามันจะเก็บข้อมูลและเลือกข้อมูลและฉันต้องเลือกระหว่าง mongo และ couch อันไหนดีกว่ากัน?
verystrongjoe

CouchApps เป็น "ไม่แนะนำอีกต่อไป" ตั้งแต่ ~ 2012: docs.couchdb.com/en/latest/ddocs
Tim Sylvester

123

หากคุณมาจากโลก MySQL, MongoDB จะ "รู้สึก" เป็นธรรมชาติมากขึ้นสำหรับคุณเนื่องจากการสนับสนุนภาษาที่ใช้แบบสอบถาม

ฉันคิดว่านั่นเป็นสิ่งที่ทำให้เป็นมิตรกับผู้คนมากมาย

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

การจำลองแบบของ MongoDB (ชุดแบบจำลอง) เป็นการตั้งค่า master-slave-slave-slave- * คุณสามารถเขียนถึงต้นแบบในชุดแบบจำลองและอ่านจากชุดใด ๆ

สำหรับการกำหนดค่าไซต์มาตรฐานนั้นใช้ได้ มันแผนที่การใช้งาน MySQL ได้ดีจริงๆ

แต่ถ้าคุณพยายามที่จะสร้างบริการทั่วโลกเช่น CDN ที่ต้องการให้โหนดทั่วโลกทั้งหมดซิงค์แม้ว่าการอ่าน / เขียนทั้งหมดนั้นการจำลองแบบใน CouchDB จะเป็นประโยชน์อย่างมากสำหรับคุณ

ในขณะที่ MongoDB มีภาษาคล้ายข้อความค้นหาที่คุณสามารถใช้และให้ความรู้สึกเป็นธรรมชาติได้มาก CouchDB ใช้วิธีการ "ลดแผนที่" และแนวคิดของมุมมองนี้ ตอนแรกมันรู้สึกแปลก ๆ แต่เมื่อคุณได้รับมันมันจะเริ่มรู้สึกเป็นธรรมชาติ

นี่เป็นภาพรวมโดยย่อดังนั้นจึงมีความหมายบางประการ:

  • CouchDB เก็บข้อมูลของคุณทั้งหมดในทรี b
  • คุณไม่สามารถ "ค้นหา" แบบไดนามิกกับบางสิ่งบางอย่างเช่น "เลือก * จากผู้ใช้ WHERE ... "
  • แต่คุณกำหนด "มุมมอง" ของข้อมูลของคุณโดยสิ้นเชิง ... "นี่คือมุมมองของผู้ใช้ทั้งหมดของฉัน" "นี่คือมุมมองของผู้ใช้ทั้งหมดที่มีอายุมากกว่า 10" "ที่นี่เป็นมุมมองของผู้ใช้ทั้งหมดที่มีอายุมากกว่า 30" และ เป็นต้น
  • มุมมองเหล่านี้ถูกกำหนดโดยใช้วิธีลดแผนที่และกำหนดเป็นฟังก์ชัน JavaScript
  • เมื่อคุณกำหนดมุมมองฐานข้อมูลจะเริ่มป้อนเอกสารทั้งหมดของฐานข้อมูลที่คุณกำหนดมุมมองผ่านและบันทึกผลลัพธ์ของฟังก์ชั่นของคุณเป็น "ดัชนี" ในข้อมูลนั้น
  • มีข้อความค้นหาพื้นฐานบางอย่างที่คุณสามารถทำได้ในมุมมองเช่นขอรหัสเฉพาะ (ID) หรือช่วงของรหัสโดยไม่คำนึงถึงฟังก์ชันแผนที่ / ลดของคุณทำอะไร
  • อ่านสไลด์เหล่านี้มันเป็นแผนที่ที่ชัดเจนที่สุด / ลดลงในโซฟาที่ฉันเคยเห็น

ดังนั้นทั้งสองแหล่งใช้เอกสาร JSON แต่ CouchDB ทำตามนี้มากกว่า "เซิร์ฟเวอร์ทุกเครื่องเป็นหลักและสามารถซิงค์กับโลก" ซึ่งเป็นวิธีที่ยอดเยี่ยมหากคุณต้องการในขณะที่ MongoDB เป็น MySQL ของโลก NoSQL จริงๆ

ดังนั้นหากฟังดูเหมือนสิ่งที่คุณต้องการ / ต้องการให้ทำเช่นนั้น

ความแตกต่างเล็กน้อยเช่นโปรโตคอลไบนารีของ Mongo เทียบกับอินเตอร์เฟส RESTful ของ CouchDB ล้วนเป็นรายละเอียดเล็กน้อย

ถ้าคุณต้องการความรวดเร็วของข้อมูลและความปลอดภัยของข้อมูลคุณสามารถทำให้ Mongo ทำงานได้เร็วกว่า CouchDB เพราะคุณสามารถบอกได้ว่าหน่วยความจำไม่เพียงพอและไม่ต้องใช้สิ่งใดในดิสก์ยกเว้นช่วงระยะห่าง

คุณสามารถทำเช่นเดียวกันกับ Couch ได้ แต่โปรโตคอลการสื่อสาร HTTP ที่ใช้ HTTP นั้นจะช้ากว่าการสื่อสารแบบไบนารีดิบกับ Mongo 2-4 เท่าใน "ความเร็วเหนือทุกอย่าง!" สถานการณ์

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

หวังว่าทุกอย่างจะช่วย!


"MongoDB เป็น MySQL ของโลก NoSQL จริงๆ" - ฉันไม่รู้ว่าสิ่งต่าง ๆ มีการเปลี่ยนแปลงหรือไม่ แต่บทความในปี 2014 นี้ไม่เห็นด้วย: sarahmei.com/blog/2013/11/11/why-you-should-never-use- mongodb
Onur Yıldırım

ฉันคิดว่าความคิดเห็นยังคงใช้ได้ แต่คุณคิดถูกมากในช่วงครึ่งทศวรรษที่ผ่านมาและความคิดเห็นของฉันควรจะถูกยกเลิกอย่างง่ายดาย
Riyad Kalla

5

1

ขณะนี้มีฐานข้อมูล NoSQL จำนวนมากในตลาดมากขึ้นกว่าเดิม ฉันขอแนะนำให้ดูที่ Gartner Magic Quadrant หากคุณกำลังมองหาฐานข้อมูลที่จะยอดเยี่ยมสำหรับแอพพลิเคชั่นระดับองค์กรตามการสนับสนุนการขยายการจัดการและค่าใช้จ่าย

http://www.gartner.com/technology/reprints.do?id=1-23A415Q&ct=141020&st=sb

ฉันอยากจะแนะนำ Couchbase ให้กับทุกคนที่ยังไม่ได้ลอง แต่ไม่ได้อิงตามรุ่นที่แสดงในรายงาน (2.5.1) เพราะมันเกือบ 2 รุ่นที่อยู่ด้านหลังซึ่ง CB Server ในปัจจุบันใกล้รีลีส 4.0 ใน 2H15 .

http://www.couchbase.com/coming-in-couchbase-server-4-0

อีกส่วนหนึ่งเกี่ยวกับ Couchbase ในฐานะผู้จำหน่าย / ผลิตภัณฑ์คือเป็นฐานข้อมูลที่ใช้งานได้หลากหลาย มันสามารถทำหน้าที่เป็นร้าน K / V ล้วนๆฐานข้อมูล Document Oriented ที่มีการปรับขนาดหลายมิติ Memcached แคชกันอย่างต่อเนื่องและสนับสนุน SQL ที่สอดคล้องกับ ANSI 92 ด้วยการเข้าร่วมอัตโนมัติการจำลองแบบกลุ่ม DR ด้วยการกดปุ่มและ แม้จะมีองค์ประกอบมือถือในตัวกับระบบนิเวศ

หากไม่มีสิ่งใดเป็นมูลค่าการตรวจสอบมาตรฐานล่าสุด:

http://info.couchbase.com/Benchmark_MongoDB_VS_CouchbaseServer_HPW_BM.html http://info.couchbase.com/NoSQL-Technical-Comparison-Report.html

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