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


141

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

คำตอบ:


84

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

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

ฐานข้อมูล NoSQL มีมานานแล้ว - เพียงแค่คำศัพท์ใหม่ ตัวอย่างบางส่วน ได้แก่ กราฟวัตถุคอลัมน์ XML และฐานข้อมูลเอกสาร

สำหรับคำถามที่ 2 ของคุณ:มันใช้ได้หรือไม่ที่จะใช้ทั้งสองอย่างในเว็บไซต์เดียวกัน

ทำไมจะไม่ล่ะ? ทั้งสองตอบสนองวัตถุประสงค์ที่แตกต่างใช่มั้ย


1
ฉันไม่คิดว่ากรดเป็นเอกสิทธิ์ของฐานข้อมูลเชิงสัมพันธ์ คุณสามารถรับประกันความทนทานธุรกรรมดูความสอดคล้องในฐานข้อมูลที่ไม่ใช่เชิงสัมพันธ์
Thilo

@RamshVel คุณสามารถยกตัวอย่างของฐานข้อมูลประเภทที่เก็บค่าคีย์ได้หรือไม่? ขอบคุณ
Rachael

1
@ ราเชล, ตัวอย่างบางส่วนเป็นสีแดง, ระดับและ riak .. มีตันอยู่รอบ ๆ คุณสามารถ google มันได้
RameshVel

76

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

ข้อดีมักจะเฉพาะกับการใช้งานของคุณ แต่ถ้าคุณไม่มีปัญหาในการสร้างแบบจำลองข้อมูลของคุณใน RDBMS ฉันไม่เห็นเหตุผลที่คุณจะเลือก NoSQL

ฉันเองใช้ MongoDB และ Riak สำหรับปัญหาเฉพาะที่ RDBMS ไม่ใช่ทางออกที่ปฏิบัติได้สำหรับสิ่งอื่น ๆ ทั้งหมดที่ฉันใช้ MySQL (หรือ SQLite สำหรับการทดสอบ)

หากคุณต้องการ NoSQL db คุณมักจะรู้เกี่ยวกับเหตุผลที่เป็นไปได้คือ:

  • ลูกค้าต้องการความพร้อมใช้งาน 99.999% ในไซต์ที่มีปริมาณการใช้งานสูง
  • ข้อมูลของคุณไม่สมเหตุสมผลใน SQL คุณพบว่าตัวเองเข้าร่วมหลายแบบสอบถามเพื่อเข้าถึงข้อมูลบางส่วน
  • คุณกำลังทำลายโมเดลเชิงสัมพันธ์คุณมี CLOBs ที่เก็บข้อมูล denormalized และคุณสร้างดัชนีภายนอกเพื่อค้นหาข้อมูลนั้น

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

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


3
ขอบคุณสำหรับคำตอบ. ตัวอย่างของคุณเมื่อใดที่จะใช้ NoSQL จะคลุมเครือที่สุด ฉันหวังว่าจะใช้กรณีเฉพาะเจาะจงมากขึ้นเพื่อให้ฉันสามารถตัดสินใจได้ว่าข้อมูลใด ๆ ของฉันจะถูกเก็บไว้ในฐานข้อมูล NoSQL ได้ดีขึ้นหรือไม่
smfoote

ผมพยายามที่จะไม่ตอบคำถามเดียวกันสองครั้งดูที่คำตอบก่อนหน้าของฉันไปที่คำถามที่คล้ายกันมากstackoverflow.com/questions/3621415/...
Asaf

ฉันเห็นด้วยกับคำตอบที่ยอดเยี่ยมของ Asaf มีเพียงไม่กี่สถานการณ์เท่านั้นที่คุณควรจะต้องใช้ NoSQL ผ่าน RDBMS ฉันเห็น NoSQL มากกว่าเป็น backup db หรือ "add-on db" มากกว่า db หลัก ฉันยังไม่เห็นระบบที่ดีที่ core db คือ NoSQL
Jo Smo

38

Martin Fowler มีวิดีโอที่ยอดเยี่ยมซึ่งให้คำอธิบายที่ดีเกี่ยวกับฐานข้อมูล NoSQL ลิงค์ตรงไปยังเหตุผลของเขาที่จะใช้ แต่วิดีโอทั้งหมดมีข้อมูลที่ดี

  1. คุณมีข้อมูลจำนวนมากโดยเฉพาะอย่างยิ่งถ้าคุณไม่สามารถใส่ได้ทั้งหมดในเซิร์ฟเวอร์จริงเพราะ NoSQL ได้รับการออกแบบให้ปรับขนาดได้ดี

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


16

NoSQL เป็นระบบฐานข้อมูลที่จัดระเบียบข้อมูลลงในเอกสาร (MongoDB), คู่ค่าคีย์ (MemCache, Redis), รูปแบบโครงสร้างกราฟ (Neo4J)

อาจมีคำถามและคำตอบที่เป็นไปได้สำหรับ "เมื่อใดควรใช้กับ NoSQL":

  1. ต้องการสคีมาที่ยืดหยุ่นหรือจัดการกับทรีเช่นข้อมูลหรือไม่
    โดยทั่วไปในการพัฒนาแบบว่องไวเราเริ่มออกแบบระบบโดยไม่ทราบความต้องการทั้งหมดอย่างตรงไปตรงมาซึ่งต่อมาตลอดทั้งระบบฐานข้อมูลการพัฒนาอาจจำเป็นต้องรองรับการเปลี่ยนแปลงการออกแบบบ่อยครั้งแสดง MVP (ผลิตภัณฑ์ที่ใช้งานได้น้อยที่สุด) หรือคุณกำลังจัดการกับ data schema ซึ่งเป็นแบบไดนามิกในธรรมชาติ เช่นบันทึกของระบบตัวอย่างที่แม่นยำมากคือบันทึก AWS cloudwatch

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

  3. แลกเปลี่ยนระหว่างการปรับสเกลมากกว่าความสอดคล้อง
    ซึ่งแตกต่างจาก RDMS ฐานข้อมูล NoSQL อาจสูญเสียข้อมูลขนาดเล็กที่นี่และที่นั่น (หมายเหตุ: ความน่าจะเป็นคือ. x%) แต่ง่ายต่อการปรับขนาดในแง่ของประสิทธิภาพ ตัวอย่าง: สิ่งนี้อาจดีสำหรับการจัดเก็บผู้ที่ออนไลน์ในแอพส่งข้อความทันทีโทเค็นใน db บันทึกสถิติการเข้าชมเว็บไซต์

  4. การดำเนินการกับตำแหน่งทางภูมิศาสตร์: MongoDB สนับสนุนแฮชที่หลากหลายสำหรับการดำเนินการทางภูมิศาสตร์และตำแหน่งทางภูมิศาสตร์ ฉันชอบฟีเจอร์นี้ของ MongoDB จริงๆ

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


4
"ฐานข้อมูล NoSQL อาจสูญเสียข้อมูลขนาดเล็กที่นี่และที่นั่น" WTF !? ใครในใจที่ถูกต้องต้องการเสี่ยงนั่น สิ่งนี้จะต้องเป็นเท็จ
Jay Q.

1
@JayQ ใช่มันอาจจะผิด นั่นเป็นเหตุผลที่ฉันพูด * อาจจะ ถ้าเช่นนั้นทำไมเราไม่สามารถใช้ NpSQL DB ในการดำเนินการธุรกรรมได้?
Hrishikesh

7

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

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

ความสุขของนักพัฒนาที่มีคำว่า "schema less" ที่ NoSQL นั้นเป็นจุดเริ่มต้นที่ยิ่งใหญ่มาก buzzword นี้ไม่แยแสอย่างรวดเร็วหลังจากการวิเคราะห์ทางเทคนิคเพราะมันไม่ถูกต้องไม่ต้องคีเมื่อเขียน แต่เข้ามาเล่นเมื่ออ่าน นั่นคือสาเหตุที่ควรเป็น "schema เมื่ออ่าน" อย่างถูกต้อง อาจเป็นการล่อลวงให้สามารถเขียนข้อมูลตามดุลยพินิจของตนเอง แต่ฉันจะจัดการกับสถานการณ์ได้อย่างไรหากมีข้อมูลที่มีอยู่ แต่แอปพลิเคชันเวอร์ชันใหม่คาดว่าสคีมาที่แตกต่างกันอย่างไร

รูปแบบเอกสาร (เช่นใน MongoDB เป็นต้น) ไม่เหมาะสมสำหรับตัวแบบข้อมูลที่มีความสัมพันธ์หลายอย่างระหว่างข้อมูล การเข้าร่วมจะต้องทำในระดับแอปพลิเคชันซึ่งเป็นความพยายามเพิ่มเติมและทำไมฉันจึงควรเขียนโปรแกรมสิ่งต่าง ๆ ที่ฐานข้อมูลควรทำ

หากคุณโต้แย้งว่า Google และ Amazon ได้พัฒนาฐานข้อมูลของตนเองเนื่องจาก RDBMS ทั่วไปไม่สามารถจัดการกับข้อมูลได้อีกต่อไปคุณสามารถพูดได้ว่า: คุณไม่ใช่ Google และ Amazon บริษัท เหล่านี้เป็นหัวหอกในบางสถานการณ์ที่ 0.01% ของฐานข้อมูลแบบดั้งเดิมไม่เหมาะสมอีกต่อไป แต่สำหรับส่วนที่เหลือของโลกพวกเขา

ไม่มีอะไรที่ไม่สำคัญ: SQLมีมานานกว่า 40 ปีและมีการพัฒนาหลายล้านชั่วโมงในระบบขนาดใหญ่เช่น Oracle หรือ Microsoft SQL สิ่งนี้จะต้องเกิดขึ้นได้จากฐานข้อมูลใหม่ บางครั้งการค้นหาผู้ดูแล SQL ก็ง่ายกว่า MongoDB ซึ่งนำเราไปสู่คำถามของการบำรุงรักษาและการจัดการ หัวข้อที่ไม่เซ็กซี่ แต่เป็นส่วนหนึ่งของการตัดสินใจทางเทคโนโลยี


1
ดูเหมือนว่าถูกต้อง แต่ฉันไม่คิดว่ามันยังมีสิทธิที่จะเปรียบเทียบเท่าใดเวลาที่มันมีการใช้จ่ายหากพบว่ากรณีที่ทุกคนจะใช้การชุมนุมภาษาในทุกโปรแกรมของพวกเขาผมค่อนข้างจะบอกว่ามันมักจะลงมาเพื่อการประยุกต์ใช้และ USECASE ของคุณ
Gopherine

3

ฉันเจอคำถามนี้ในขณะที่มองหาเหตุผลที่น่าเชื่อถือเพื่อเบี่ยงเบนจากการออกแบบ RDBMS

มีการโพสต์ที่ยอดเยี่ยมโดย Julian Brown ที่ให้แสงสว่างกับข้อ จำกัด ของระบบกระจาย แนวคิดนี้เรียกว่า Brewer's CAP Theorem ซึ่งสรุปแล้ว:

ข้อกำหนดสามประการของระบบแบบกระจายคือ: ความสอดคล้องความพร้อมใช้งานและความทนทานต่อการแบ่งพาร์ติชัน (CAP สั้น) แต่คุณสามารถมีได้สองครั้งเท่านั้น

และนี่คือวิธีที่ฉันสรุปสำหรับตัวฉันเอง:

คุณควรใช้ NoSQL ถ้าความสอดคล้องคือสิ่งที่คุณเสียสละ


0

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

DON'Ts

SQL ไม่ล้าสมัยและยังคงเป็นเครื่องมือที่ดีกว่าในบางกรณี มันยากที่จะแสดงให้เห็นถึงการใช้ NoSQL เชิงเอกสารเมื่อ

  • ต้องการ OLAP / OLTP
  • มันเป็นโครงการฐานข้อมูลขนาดเล็ก / โครงสร้างที่เรียบง่าย
  • ต้องการคำสั่งเฉพาะกิจ
  • ไม่สามารถหลีกเลี่ยงความสอดคล้องได้ในทันที
  • ข้อกำหนดที่ไม่ชัดเจน
  • ขาดนักพัฒนาที่มีประสบการณ์

ที่ควรทำ

หากคุณไม่ได้มีเงื่อนไขเหล่านั้นหรือสามารถลดพวกเขาต่อไปนี้เป็น 2 เหตุผลที่คุณอาจได้รับประโยชน์จาก NoSQL:

  • จำเป็นต้องเรียกใช้ในระดับ
  • สะดวกในการพัฒนา (ผสานรวมกับสแต็คเทคโนโลยีของคุณได้ดีขึ้นไม่จำเป็นต้องใช้ ORM ฯลฯ )

ข้อมูลเพิ่มเติม

ในโพสต์บล็อกของฉันฉันอธิบายเหตุผลในรายละเอียดเพิ่มเติม:

หมายเหตุ:ข้างต้นสามารถใช้ได้กับ NoSQL เชิงเอกสารเท่านั้น มีNoSQL ชนิดอื่น ๆซึ่งจำเป็นต้องมีการพิจารณาอื่น ๆ


0

การจัดการการอ่านเขียนจำนวนมาก

ดูที่ฐานข้อมูล NoSQL เมื่อคุณต้องการปรับขนาดอย่างรวดเร็ว และเมื่อใดที่คุณต้องขยายอย่างรวดเร็ว

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

ความยืดหยุ่นด้วยการสร้างแบบจำลองข้อมูล

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

ความสอดคล้องในที่สุดมากกว่าความสอดคล้องที่แข็งแกร่ง

เราควรเลือกฐานข้อมูล NoSQL เมื่อเราตกลงที่จะยอมแพ้ในเรื่องความสอดคล้องที่แข็งแกร่งและเมื่อเราไม่ต้องการธุรกรรม

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

คนดังจะไม่สนใจแน่นอนถ้าแทนที่จะเป็นจำนวน 5 ล้าน 500 รายการจริงระบบจะแสดงจำนวนที่เหมือนกันเป็น 5 ล้าน 250 ในระยะเวลาสั้น ๆ

เมื่อมีการปรับใช้แอปพลิเคชันขนาดใหญ่บนเซิร์ฟเวอร์หลายร้อยแห่งกระจายอยู่ทั่วโลกโหนดกระจายทางภูมิศาสตร์ต้องใช้เวลาพอสมควรในการเข้าถึงฉันทามติระดับโลก

จนกว่าจะถึงฉันทามติมูลค่าของเอนทิตีจะไม่สอดคล้องกัน ในที่สุดมูลค่าของกิจการจะได้รับความสอดคล้องหลังจากผ่านไปไม่นาน นี่คือสิ่งที่ความสอดคล้องในที่สุดคือ

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

เราพบกับพฤติกรรมนี้ตลอดเวลา โดยเฉพาะบน YouTube บ่อยครั้งที่คุณจะเห็นวิดีโอที่มีการดู 10 ครั้งและชอบ 15 ครั้ง สิ่งนี้เป็นไปได้อย่างไร

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

กำลังเรียกใช้การวิเคราะห์ข้อมูล

ฐานข้อมูล NoSQL ยังเหมาะสมที่สุดสำหรับการวิเคราะห์ข้อมูลใช้กรณีที่เราต้องจัดการกับการไหลเข้าของข้อมูลจำนวนมหาศาล

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