ทำไม NoSQL จึงเร็วกว่า SQL


48

เมื่อเร็ว ๆ นี้ฉันถูกถาม:

ทำไม NoSQL จึงเร็วกว่า SQL

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

ฉันขาดอะไรเกี่ยวกับ NoSQL ไหม?


3
หากคุณไม่เห็นประสิทธิภาพที่เพิ่มขึ้นนั่นคือสิ่งที่คุณพูด ความจริงก็คือโซลูชัน NoSQL ส่วนใหญ่สละคุณสมบัติ ACID หนึ่งรายการ (หรือมากกว่า) ของฐานข้อมูลเชิงสัมพันธ์ดังนั้นจึงมีน้อย
Oded

1
มีเวิร์กโฟลว์บางตัว (และโครงสร้างข้อมูล) ที่ไม่สามารถแมปกับฐานข้อมูลเชิงสัมพันธ์ที่เปิดใช้งาน ACID แบบดั้งเดิมได้อย่างง่ายดาย สำหรับผู้ที่คุณสามารถดูขนาดใหญ่เพิ่มประสิทธิภาพการทำงานโดยใช้ฐานข้อมูล NoSQL แต่ถ้าคุณเพียงแค่ใช้เวลาที่มีอยู่ (การออกแบบที่ดี) SQL DB และใส่ลงในฐานข้อมูล NoSQL แล้วประสิทธิภาพการทำงานของคุณจะแน่นอนต้องทนทุกข์ทรมาน
Joachim Sauer

1
คำตอบคือ: มันได้รับการจัดตั้งขึ้นเร็วขึ้น? และเร็วขึ้นในสิ่งใด เวลาในการพัฒนา อ่านเวลาเหรอ? เขียนเวลาเหรอ? การเขียนประเภทใด เราเปรียบเทียบอะไรกับมัน คำค้นหาหลายตาราง? ร่วม?
Rolf

คำตอบ:


65

มีโซลูชั่น NoSQL จำนวนมากอยู่รอบ ๆ แต่ละแห่งมีจุดแข็งและจุดอ่อนของตนเองดังนั้นจึงต้องดำเนินการดังต่อไปนี้ด้วยเม็ดเกลือ

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

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

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

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


4
โดยวิธีนี้สามารถรับรู้ได้ด้วยมุมมองที่เป็นรูปธรรมหรือเลเยอร์แคชในขณะที่ยังคงได้รับประโยชน์จากความดีของ SQL ทั้งหมด สิ่งที่ทำแบบอย่างถูกต้องคือความสัมพันธ์และการทำสำเนาข้อมูลเชิงตรรกะไม่ใช่วิธีแก้ปัญหา (mat. view เป็นการทำซ้ำ แต่ไม่ใช่การทำสำเนาเชิงตรรกะเนื่องจากเป็นเพียงภาพของสิ่งอื่น)
Morg

ดังที่ฉันได้กล่าวไปแล้วในคำตอบหนึ่งสามารถทำเช่นเดียวกันใน SQL; เป็นเพียงว่าเมื่อสิ่งนี้กลายเป็นกฎแทนที่จะเป็นข้อยกเว้นฐานข้อมูล NoSQL มักจะเร็วกว่าและเป็นธรรมชาติกว่าที่จะใช้ ในทางทฤษฎี SQL เป็นรุ่นที่ดีที่สุดที่สามารถใช้ได้ แต่เมื่อข้อมูลเติบโตเกินขนาดที่กำหนดมันก็ไม่สามารถรองรับบางรุ่นได้และการทำสำเนาข้อมูลจะกลายเป็นเรื่องที่เร็วและง่ายขึ้นสำหรับเหตุผล
Andrea

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

1
ถ้าคุณมีข้อมูล 5,000,000 ล้านแถวและคุณต้องการได้รับความคิดเห็นจากพวกเขาทั้งหมดโดยเงื่อนไข จะเร็วกว่านี้ไหมถ้าคุณมีดัชนีในช่องข้อคิดเห็นของตารางด้วย SQL การทำดัชนีข้อความแบบเต็มจะปรับปรุงสิ่งนี้ต่อไป
jwize

@morg - "โมเดลเชิงสัมพันธ์ครอบคลุมทุกสิ่งที่คุณสามารถทำได้ใน NoSQL และอีกมากมาย" ไม่จริงไม่ มีตัวอย่างมากมายของประเภทของข้อมูลที่ไม่เหมาะสมเช่นนั้นกับโมเดลเชิงสัมพันธ์ที่บังคับให้ข้อมูลนั้นส่งผลให้ประสิทธิภาพต่ำมาก ตัวอย่าง: เกมออนไลน์มีสิ่งอำนวยความสะดวกสำหรับจัดเก็บคลังผู้เล่น ผู้เล่นมีจำนวนช่องที่กำหนดจำนวน จำกัด ซึ่งแต่ละแห่งอาจจัดเก็บรายการหนึ่งหรือหลายประเภทที่เฉพาะเจาะจง มีบางส่วนทับซ้อนกับจึงมีประมาณ 80 คุณลักษณะเป็นไปได้ ... มีประมาณ 50 ชนิดที่แตกต่างกันของรายการซึ่งแต่ละมีแอตทริบิวต์ที่เกี่ยวข้อง 4-6,
จูลส์

27

สิ่งที่คุณขาดหายไปเกี่ยวกับ NoSQL ก็คือ NoSQl ไม่สามารถนำมาเปรียบเทียบกับ SQL ได้ แต่อย่างใด NoSQL เป็นชื่อของเทคโนโลยีการคงอยู่ทั้งหมดที่ไม่ใช่ SQL Document DBs, Key-Value DBs, DB เหตุการณ์ทั้งหมด NoSQL พวกมันต่างกันเกือบทุกด้านไม่ว่าจะเป็นโครงสร้างของข้อมูลที่บันทึกไว้การสืบค้นประสิทธิภาพและเครื่องมือที่มีให้

ดังนั้นหากมีคนถามคำถามคุณในการสัมภาษณ์นี่ควรเป็นคำตอบ


4
หากมีคุณสมบัตินักฆ่าหนึ่งของ NoSQL ฉันบอกว่ามันเป็นความยืดหยุ่น นั่นเป็นสาเหตุที่ Facebook และ Google ใช้ เนื่องจากปริมาณมหาศาลของข้อมูล NoSQL: เมื่อคุณต้องจัดการกับข้อมูลจำนวนมหาศาล
Pieter B

16

ฐานข้อมูล 'NoSQL' (หรือมากกว่านั้นอย่างแม่นยำ: ไม่ใช่ข้อมูลเชิงสัมพันธ์) มอบคุณสมบัติบางอย่างของฐานข้อมูลแบบดั้งเดิมเพื่อความรวดเร็ว

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


1
การอธิบายว่า NoSQL นั้นไม่ใช่เชิงสัมพันธ์นั้นไม่แม่นยำมากขึ้น มีฐานข้อมูลที่ไม่ใช่เชิงสัมพันธ์อื่น ๆ ที่ไม่ได้อยู่ในหมวดหมู่ NoSQL NoSQL มีความหมายมากกว่าแค่ความสัมพันธ์ อ่านสิ่งนี้สำหรับข้อมูลเพิ่มเติม: martinfowler.com/bliki/NosqlDefinition.html
eddyP23

8

คุณพูดถูกมันเป็นเรื่องไร้สาระที่จะกล่าวว่าในแถลงการณ์แบบครอบคลุม ซึ่งน่าจะเป็นจุดรวม; แทนที่จะเป็นคำตอบเดียวผู้สัมภาษณ์อาจคาดหวังให้คุณตอบคำถามเพื่อช่วยให้คุณทราบว่าบริบทของปัญหาคืออะไร (ชนิดของข้อมูลจำนวนเท่าใดในสภาพแวดล้อมการทำงาน ฯลฯ ) โซลูชัน NoSQL โดยเฉพาะ . พวกเขาจะพยายามค้นหาว่าคุณวิเคราะห์ปัญหาอย่างไรและรับความคิดว่าคุณรู้มากแค่ไหนเกี่ยวกับโซลูชันที่แตกต่างกันออกไป


ใช่มันเป็นคำสั่งแบบครอบคลุมและถ้าเรายอมรับว่ามันเป็นจริงคำตอบสำหรับคำถามคือ: มันขึ้นอยู่กับ
Rolf

5

โดยปกติฐานข้อมูล NoSQL จะสมเหตุสมผลถ้าคุณออกแบบข้อมูลของคุณ

หากคุณตั้งใจจะใช้เพื่อทดแทน RDBMS คุณอาจได้รับประสิทธิภาพน้อยกว่าโดยเฉพาะถ้าคุณมีงบประมาณไม่เพียงพอที่จะจ่ายสำหรับเซิร์ฟเวอร์ที่มี RAM ในปริมาณสูง

ดูบทความนี้เปรียบเทียบการใช้พื้นที่ดิสก์ MySQL กับ MongoDB: http://blog.trackerbird.com/content/mysql-vs-mongodb-disk-space-usage


3

ฐานข้อมูล NoSQL ใด? ฐานข้อมูล SQL ใด ถ้ามีคนบอกคุณว่า NoSQL นั้นเร็วกว่า SQL คุณควรจะเดินไป หรือดีกว่ายังดูวิดีโอนี้:

http://www.youtube.com/watch?v=b2F-DItXtZs

ฉันจะไม่พูดครึ่งสิ่งที่อ้างว่า NoSQL ผิด แต่ฉันจะบอกว่ามีแฟน ๆ NoSQL จำนวนมากออกมาจากคนที่ไม่เข้าใจมันเป็นอย่างดี

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


-2

NoSql สนับสนุนโดยฐานข้อมูลเชิงคอลัมน์ที่ RDBMS เป็นฐานข้อมูลแถวที่มุ่งเน้น ... และพูดเช่นเรามีตารางพนักงานที่มีชื่อ, อายุ, Salery, ที่อยู่, EmployeeId ฯลฯ ... เราใส่ตารางเดียวกันใน MySql (สนับสนุน RDBMS) และ HBase (รองรับ NoSQL) หากลูกค้า / ลูกค้าเขียนแบบสอบถามเพื่อรับรายละเอียดอายุหรือรายละเอียดเฉลี่ยจากพนักงาน 1Lakh บันทึก ... จะเกิดอะไรขึ้น

ใน RDBMS มันจะไปรอบ ๆ แต่ละแถวและรวบรวมค่าและผลรวม & หารสำหรับผลลัพธ์ เมื่อมาถึงฐานข้อมูล Columnar ไม่จำเป็นต้องกังวลเกี่ยวกับการทำซ้ำแถวหนึ่งแสนทั้งหมด แต่จัดการกับแถวเดียวเท่านั้นซึ่งเร็วกว่าในการคำนวณ ดังนั้นวิธีนี้บางครั้ง NoSQL จึงเร็วกว่า SQL กรณีนี้ NoSQL ไม่สนใจเกี่ยวกับการร้องเรียนเรื่องกรดมีค่า!


2
ฉันได้แก้ไขรูปแบบเล็กน้อย แต่ฉันไม่แน่ใจว่าสิ่งที่คุณพยายามได้ระหว่างสอง และกรดก็ไม่ได้รับการสนับสนุนจาก RDBMS เสมอไป

-3

ลืมทฤษฎีเกี่ยวกับฐานข้อมูล .... จุดเมื่อคุณเข้าใจแบบสอบถามของคุณคุณสามารถบันทึกข้อมูลในฐานข้อมูล nosql ในแบบที่พวกเขาจะใช้จริงในใบสมัครของคุณ ....

ตัวอย่างเช่นนำตัวอย่างนี้คุณมีรูปแบบของลูกค้าที่มีคำสั่งซื้อจำนวนมากและหลายรายการที่เกี่ยวข้องกับการสั่งซื้อแต่ละครั้งจากนั้นพวกเขายังมีรายการที่บันทึกไว้จำนวนมากสำหรับการซื้อในภายหลัง ... ถ้าคุณเป็นร้านอีคอมเมิร์ซขนาดใหญ่ ล้านคำสั่งซื้อ และลูกค้านั้นล็อกอินเข้าสู่แผงควบคุมซึ่งแสดงข้อมูลที่ถูกต้องจำนวนฐานข้อมูล sql ที่ต้องทำเพื่อค้นหาลูกค้าเข้าร่วมคำสั่งซื้อและรายการโฆษณาแต่ละรายการและรายการที่บันทึกไว้ ในฐานข้อมูล sql ข้อมูลทั้งหมดนี้จะต้องเข้าร่วมในบางวิธี ... หรือคุณสามารถสร้างคอลเลกชันในฐานข้อมูลของคุณที่เรียกว่า usercache และบันทึกข้อมูลนี้ว่าคุณใช้มันอย่างไรในชีวิตจริง ดังนั้นนี่อาจเป็นแบบสอบถามเดียวในฟิลด์เดียว [id] เพื่อรับข้อมูลทั้งหมดกลับคืนมา ยิ่งไปกว่านั้นฐานข้อมูล nosql ไม่ได้ '

ดังนั้น sql db สามารถสืบค้นฟิลด์ Id เดียวได้อย่างรวดเร็วหากไม่เร็วกว่า nosql หรือไม่ ใช่ แต่ฐานข้อมูล sql สามารถส่งคืนข้อมูลทั้งหมดที่คุณต้องการโดยการสอบถามหนึ่งตารางและหนึ่งเขตข้อมูลหรือไม่ ไม่เว้นเสียแต่ว่าคุณจะทำอะไรเช่นบันทึกข้อมูลใน Json ภายในช่องข้อความขนาดใหญ่ แต่ตอนนี้ข้อมูลไม่สามารถสืบค้นได้เพื่อใช้ในอนาคต

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