ความแตกต่างระหว่าง NoSQL และ RDBMS ดั้งเดิมคืออะไร?


71

ความแตกต่างระหว่าง NoSQL และ RDBMS ดั้งเดิมคืออะไร?

ในช่วงไม่กี่เดือนที่ผ่านมา NoSQL ถูกกล่าวถึงบ่อยครั้งในข่าวทางเทคนิค อะไรคือคุณสมบัติที่สำคัญที่สุดที่สัมพันธ์กับ RDBMS แบบดั้งเดิม? ความแตกต่างเกิดขึ้นในระดับใด (กายภาพ, ตรรกะ)

สถานที่ที่ดีที่สุดในการใช้ NoSQL อยู่ที่ไหน ทำไม?

คำตอบ:


61

NoSQL ย่อมาจาก "ไม่เพียง แต่ SQL" และมักจะหมายความว่าฐานข้อมูลไม่ใช่ฐานข้อมูลเชิงสัมพันธ์ซึ่งเป็นที่นิยมอย่างมากในทศวรรษที่ผ่านมา

เหตุผลที่ NoSQL ได้รับความนิยมอย่างมากในช่วงไม่กี่ปีที่ผ่านมาส่วนใหญ่เป็นเพราะเมื่อฐานข้อมูลเชิงสัมพันธ์เติบโตขึ้นจากเซิร์ฟเวอร์เดียวมันก็ไม่ได้ใช้งานง่ายอีกต่อไป กล่าวอีกนัยหนึ่งพวกเขาไม่ได้ขยายขนาดได้ดีมากในระบบกระจาย ไซต์ขนาดใหญ่ทั้งหมดที่คุณพูดถึง Google, Yahoo, Facebook และ Amazon (ฉันไม่รู้มากเกี่ยวกับ Digg) มีข้อมูลจำนวนมากและเก็บข้อมูลไว้ในระบบกระจายด้วยเหตุผลหลายประการ มันอาจจะเป็นว่าข้อมูลที่ไม่เหมาะสมบนเซิร์ฟเวอร์หรือมีข้อกำหนดสำหรับความพร้อมสูง

ทฤษฎีบท CAP

คุณสมบัติของระบบกระจายสามารถอธิบายได้โดยทฤษฎีบท CAP จากสามคุณสมบัติที่คุณมีได้ไม่เกินสองรายการ:

  • C onsistency
  • vailability
  • ความทนทานต่อเครือข่ายP artitioning

อเมซอนไดนาโมใช้ความสอดคล้องในที่สุดเข้ามาใกล้เพื่อรับคุณสมบัติทั้งสาม กระดาษไดนาโม: ร้าน Key-value ที่มีจำหน่ายสูงของ Amazon นั้นคุ้มค่าที่จะอ่านเมื่อเรียนรู้เกี่ยวกับฐานข้อมูล NoSQL และระบบกระจาย Amazon Dynamo มีคุณสมบัติ A และ P

Google ใช้แนวทางที่แตกต่างกับBigTableที่มีคุณสมบัติ C และ A

ฐานข้อมูล NoSQL อื่น ๆ

อย่างที่ฉันเขียนในตอนแรกมีฐานข้อมูล NoSQL อื่น ๆ อีกมากมายที่ออกแบบมาสำหรับความต้องการที่แตกต่างกัน ฐานข้อมูลเช่นกราฟเหมือนNeo4jฐานข้อมูลเอกสารเช่นCouchDBและ multimodel / วัตถุฐานข้อมูลเช่นOrientDB

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


1
ดีคำตอบที่ครบถ้วนสมบูรณ์
TML

NoSQL ไม่ได้หมายความว่าไม่ใช่เชิงสัมพันธ์ แต่ก็หมายถึงสิ่งอื่นที่ไม่ใช่ SQL DBMS
nvogel

1
ดูเหมือนว่าในการประชุม O'Reilly Strata เมื่อเร็ว ๆ นี้ Mark Madsen ได้ประกาศการตีความใหม่ของ "NoSQL" ในประวัติศาสตร์ของฐานข้อมูลโดยไม่มีการแทนที่ "ไม่ใช่แค่ SQL" คือตอนนี้: "ไม่, SQL" ;-)
Lukas Eder

6
"ไม่เพียง แต่" เป็นชุดติดตั้งเพิ่มเติมการเคลื่อนไหว NoSQL ในช่วงต้นนั้นเกิดขึ้นอย่างต่อเนื่องกับฐานข้อมูลเชิงสัมพันธ์ จากนั้นพวกเขาก็เข้าสู่โลกแห่งความจริง
ออกุสตุส

22

NoSQL เป็นคำที่กว้างมากและโดยทั่วไปเรียกว่าความหมาย "ไม่ใช่แค่ SQL" คำดังกล่าวไม่ได้รับความนิยมในชุมชนที่ไม่ใช่ RDBMS

คุณจะพบว่าฐานข้อมูล NoSQL มีลักษณะทั่วไปบางอย่าง สามารถแบ่งได้คร่าวๆเป็นสองสามหมวดหมู่:

  • ที่เก็บคีย์ / ค่า
  • ฐานข้อมูล Bigtable ที่ได้รับแรงบันดาลใจ (อ้างอิงจาก Google Bigtable paper)
  • ฐานข้อมูลไดนาโมเป็นแรงบันดาลใจ
  • ฐานข้อมูลแบบกระจาย
  • ฐานข้อมูลเอกสาร

นี่เป็นคำถามใหญ่ แต่ก็ค่อนข้างดีในการตอบนี้การสำรวจฐานข้อมูลแบบกระจาย

สำหรับคำตอบสั้น ๆ :

ฐานข้อมูล NoSQL อาจแจกจ่ายด้วยส่วนต่าง ๆ ของกรดเพื่อให้บรรลุผลประโยชน์อื่น ๆ - ความอดทนพาร์ติชันประสิทธิภาพการทำงานเพื่อกระจายโหลดหรือมาตราส่วนเชิงเส้นด้วยการเพิ่มฮาร์ดแวร์ใหม่

เท่าที่จะใช้เมื่อไร - ขึ้นอยู่กับความต้องการของแอปพลิเคชันของคุณ


12

NoSQL เป็นประเภทของฐานข้อมูลที่ไม่มี schema ที่แน่นอนเช่นเดียวกับ RDBMS แบบดั้งเดิม ด้วยฐานข้อมูล NoSQL สกีมาจะถูกกำหนดโดยนักพัฒนาในขณะดำเนินการ พวกเขาไม่ได้เขียนคำสั่ง SQL ปกติกับฐานข้อมูล แต่ใช้ API เพื่อรับข้อมูลที่ต้องการ โดยปกติฐานข้อมูล NoSQL สามารถขยายข้ามเซิร์ฟเวอร์ทางกายภาพที่แตกต่างกันได้อย่างง่ายดายโดยไม่จำเป็นต้องรู้ว่าข้อมูลใดที่คุณกำลังมองหาอยู่

อย่างไรก็ตามมีการแลกเปลี่ยนบางส่วนสำหรับความยืดหยุ่นทั้งหมดนี้: ฐานข้อมูล NoSQL ค่อนข้างขาดคุณสมบัติเมื่อเทียบกับระบบ RDBMS เช่น SQL Server, Oracle, DB2, MySQL และอื่น ๆ ไม่มี Broker Service, การทำธุรกรรม, แพ็คเกจ ETL ฯลฯ

NoSQL ไม่ใช่สิ่งที่ใหม่ มันมีมานานประมาณ 50-60 ปี ย้อนกลับไปตอนนั้นมันถูกเรียกว่าภาษาโคบอล ความคิดที่เหมือนกันเพียงกลุ่มที่แตกต่างกันเกิดขึ้นกับมัน


3
จุดที่ 1 ไม่ถูกต้องสำหรับฐานข้อมูล NoSQL จำนวนมาก (ทั้งหมดหรือไม่) เว้นแต่คุณจะบอกฐานข้อมูลอย่างชัดเจนว่าคุณไม่สนใจว่าการเขียนสำเร็จหรือไม่ เช่นฐานข้อมูลใด ๆ ที่สำรองไว้ Hadoop จะเขียนข้อมูลไปยังสถานที่สามแห่งว่าเป็นนรก โดยค่าเริ่มต้นคาสซานดราจะเขียนถึงสามตำแหน่งและรับทราบว่าการเขียนสำเร็จเมื่อสองสำเร็จ
เยเรมีย์ Peschka

3
มันจัดการกับการทำงานพร้อมกันได้อย่างไรเมื่อทำการอัพเดทเหล่านั้น? มีธุรกรรมชนิดกระจายที่ไประหว่างพวกเขาหรือเขียน ACKed ก่อนมือและเซิร์ฟเวอร์จัดการส่วนที่เหลือในพื้นหลังหรือไม่
mrdenny

ภาวะพร้อมกันขึ้นอยู่กับการนำไปใช้งานทั้งหมด Riak ใช้นาฬิกาแบบเวกเตอร์เพื่อให้แน่ใจว่ามีการเกิดขึ้นพร้อมกันและในกรณีที่มีข้อขัดแย้งในการเขียนพวกเขาสามารถส่งคืนไปยังแอปพลิเคชันการโทรเพื่อแก้ไขปัญหา คนอื่นใช้การเขียนครั้งสุดท้ายชนะ
Jeremiah Peschka

เท่าที่ทราบการเขียน - ในกรณีส่วนใหญ่การเขียนไม่ได้รับการยอมรับจนกว่าระบบปฏิบัติการยอมรับการเขียน คุณยังสามารถไปขอการรับรองการเขียนแบบทนทานซึ่งหมายความว่าบิตจะถูกฟลัชชิงไปยังดิสก์แทนที่จะเป็นในบัฟเฟอร์ของระบบปฏิบัติการ MongoDB ตอบรับการเขียนไปยังหน่วยความจำโดยค่าเริ่มต้น แต่สามารถกำหนดค่าให้ต้องรับทราบการเขียนลงดิสก์ การจำลองแบบถูกจัดการแตกต่างกันไปในทุกผลิตภัณฑ์ ด้วย Hadoop ไคลเอนต์เขียนไปยังเซิร์ฟเวอร์ A ซึ่งเขียนไปยัง B ซึ่งเขียนไปยัง C เมื่อ C ตอบสนองการเขียนเสร็จสมบูรณ์และไคลเอนต์ได้รับ ack ack
เยเรมีย์ Peschka

ในกรณีนั้นฉันยืนแก้ไข ฉันได้ลบคำสั่งที่ไม่ถูกต้อง ฉันไม่ FUBAR อะไรอีกหรือไม่
mrdenny

6

โดยพื้นฐานแล้วการแจกจ่ายด้วยการตั้งค่าความสัมพันธ์พร้อมกับคีย์หลักและต่างประเทศและด้วยค่าใช้จ่ายเพิ่มเติมที่เกี่ยวข้องในการรักษาความปลอดภัยของธุรกรรมมักจะช่วยเพิ่มประสิทธิภาพการทำงานของคุณ อย่างไรก็ตามสิ่งนี้ไม่ซ้ำกับฐานข้อมูล / ดาต้าสโตร์ใหม่เช่น MySQL ได้รับการปรับให้ทำงานที่ "ระดับ NoSQL" โดยการข้ามเลเยอร์

ในระยะสั้นคุณมักจะได้รับประสิทธิภาพที่น่าประทับใจหากคุณไม่เสี่ยงต่อการสูญเสียข้อมูล ระบบ NoSQL ส่วนใหญ่ทำสิ่งนี้ เช่น MongoDB จัดลำดับการเปลี่ยนแปลงข้อมูลที่จะเขียนเมื่อสะดวก ข้อมูลมีความปลอดภัยและปลอดภัยในการทำธุรกรรม แต่เก็บไว้ในที่จัดเก็บข้อมูลแบบระเหย (หน่วยความจำ) หากคุณสูญเสียพลังงานคุณจะไม่มั่นใจ 100% ว่าข้อมูลของคุณไม่สูญหายหรือว่าคุณไม่มีข้อมูลเสียหาย

เป็นการแลกเปลี่ยนระหว่างความปลอดภัยและประสิทธิภาพ


5

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

บางไซต์ใช้ทั้ง NoSQL และเซิร์ฟเวอร์ RDBMS ทั่วไปพร้อมกัน แต่เพื่อเก็บข้อมูลที่แตกต่างกัน ดังนั้นคุณไม่ต้องเลือกอย่างใดอย่างหนึ่ง


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

1
หมายเหตุสำคัญที่นี่คือการสนับสนุนความสัมพันธ์ที่ยกเลิก (คีย์ต่างประเทศ) ในฐานข้อมูล / โครงสร้างพื้นฐานเซิร์ฟเวอร์ช่วยบรรเทาฐานข้อมูล / เซิร์ฟเวอร์จากภาระค่าใช้จ่ายและการจัดการล็อคของการรักษาความสมบูรณ์อ้างอิง ผลที่ตามมาของสิ่งนี้คือการแลกเปลี่ยนคือความสมบูรณ์ของการอ้างอิงความสอดคล้องและความกังวลเกี่ยวกับกรดอื่น ๆ จะถูกส่งไปยังแอปพลิเคชัน แอปพลิเคชันจำนวนมากได้รับประโยชน์จากสิ่งนี้แทนที่จะถูก จำกัด โดยมัน (แอพพลิเคชั่นบางตัวจะต้องได้รับการประกันในรูปแบบไคลเอ็นต์ / เซิร์ฟเวอร์)
Jim Dennis

0

ฉันทำงานอย่างหนักกับฐานข้อมูล MongoDB NoSQL และ Oracle

schema

ฐานข้อมูล SQL มีสกีมาที่กำหนดไว้ล่วงหน้าเพื่อเก็บข้อมูลที่มีโครงสร้าง

ในฐานข้อมูล NoSQL ไม่มีสกีมาที่กำหนดไว้ล่วงหน้าที่นี่สคีมาเป็นองค์ประกอบแบบไดนามิกส่วนใหญ่ขึ้นอยู่กับองค์ประกอบข้อมูล

scalability

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

ฐานข้อมูล NoSQL สามารถปรับขนาดได้ในแนวนอนหมายความว่าหากเราต้องการขยายขนาดเราต้องเพิ่มโหนดและสร้างเครือข่ายการกระจายตามความต้องการของเราเองและพลังงานที่ต้องการ นี่คือวิธีที่พวกเขาลดภาระในฐานข้อมูล

การดึงข้อมูล

ในฐานข้อมูลที่ใช้ SQL เพื่อกำหนดและจัดการข้อมูลเราสามารถใช้ SQL (Structured Query Language) ซึ่งมีประสิทธิภาพมากในปัจจุบัน

ในแง่ของฐานข้อมูล NoSQL แบบสอบถามจะเน้นที่การรวบรวมและเอกสาร บางครั้งมันถูกเรียกว่า UnQL (Uniqued Language Query Language) นี่ยังอยู่ในช่วงวิวัฒนาการดังนั้นจึงแตกต่างกันไปตามผู้ขายถึงผู้ขายของฐานข้อมูล NoSQL

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับความแตกต่างที่สำคัญบล็อกของฉัน: ความแตกต่างระหว่างฐานข้อมูล SQL และ NoSQL

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