ข้อดีของการใช้ฐานข้อมูล NoSQL คืออะไร ฉันอ่านมากเกี่ยวกับพวกเขาเมื่อเร็ว ๆ นี้ แต่ฉันก็ยังไม่แน่ใจว่าทำไมฉันจึงต้องการที่จะใช้หนึ่งและภายใต้สถานการณ์ที่ฉันต้องการที่จะใช้
ข้อดีของการใช้ฐานข้อมูล NoSQL คืออะไร ฉันอ่านมากเกี่ยวกับพวกเขาเมื่อเร็ว ๆ นี้ แต่ฉันก็ยังไม่แน่ใจว่าทำไมฉันจึงต้องการที่จะใช้หนึ่งและภายใต้สถานการณ์ที่ฉันต้องการที่จะใช้
คำตอบ:
ฐานข้อมูลเชิงสัมพันธ์บังคับใช้กรด ดังนั้นคุณจะมีที่เก็บข้อมูลเชิงธุรกรรม ได้รับการพิสูจน์แล้วว่าเหมาะสมกับแอปพลิเคชันในโลกแห่งความเป็นจริง 99% คุณสามารถทำสิ่งใดก็ได้กับฐานข้อมูลเชิงสัมพันธ์
แต่มีข้อ จำกัด เรื่องความเร็วและการปรับขนาดเมื่อมันมาถึงแหล่งข้อมูลขนาดใหญ่ที่มีความพร้อมใช้งานสูง ตัวอย่างเช่น Google และ Amazon มีข้อมูลจำนวนเทราไบต์ในศูนย์ข้อมูลขนาดใหญ่ การเคียวรีและการแทรกไม่ได้มีประสิทธิภาพในสถานการณ์เหล่านี้เนื่องจากลักษณะการบล็อก / สคีมา / ธุรกรรมของ RDBM นั่นคือเหตุผลที่พวกเขาใช้ฐานข้อมูลของตัวเอง (จริง ๆ แล้วเป็นร้านค้าคีย์ - ค่า) เพื่อประสิทธิภาพที่เพิ่มขึ้นและความยืดหยุ่น
ฐานข้อมูล NoSQL มีมานานแล้ว - เพียงแค่คำศัพท์ใหม่ ตัวอย่างบางส่วน ได้แก่ กราฟวัตถุคอลัมน์ XML และฐานข้อมูลเอกสาร
สำหรับคำถามที่ 2 ของคุณ:มันใช้ได้หรือไม่ที่จะใช้ทั้งสองอย่างในเว็บไซต์เดียวกัน
ทำไมจะไม่ล่ะ? ทั้งสองตอบสนองวัตถุประสงค์ที่แตกต่างใช่มั้ย
โดยปกติแล้วโซลูชัน NoSQL นั้นมีจุดประสงค์เพื่อแก้ไขปัญหาที่ฐานข้อมูลเชิงสัมพันธ์นั้นไม่เหมาะสมสำหรับการใช้งานที่มีราคาแพงเกินไป (เช่น Oracle) หรือต้องการให้คุณใช้บางสิ่งที่ทำลายความสัมพันธ์ของฐานข้อมูลของคุณ
ข้อดีมักจะเฉพาะกับการใช้งานของคุณ แต่ถ้าคุณไม่มีปัญหาในการสร้างแบบจำลองข้อมูลของคุณใน RDBMS ฉันไม่เห็นเหตุผลที่คุณจะเลือก NoSQL
ฉันเองใช้ MongoDB และ Riak สำหรับปัญหาเฉพาะที่ RDBMS ไม่ใช่ทางออกที่ปฏิบัติได้สำหรับสิ่งอื่น ๆ ทั้งหมดที่ฉันใช้ MySQL (หรือ SQLite สำหรับการทดสอบ)
หากคุณต้องการ NoSQL db คุณมักจะรู้เกี่ยวกับเหตุผลที่เป็นไปได้คือ:
หากคุณไม่ต้องการโซลูชัน NoSQL โปรดทราบว่าโซลูชันเหล่านี้ไม่ได้หมายถึงการแทนที่ RDBMS แต่เป็นทางเลือกที่อดีตล้มเหลวและที่สำคัญกว่านั้นคือพวกเขาค่อนข้างใหม่เช่นพวกเขายังมีข้อบกพร่องมากมายและ คุณสมบัติที่ขาดหายไป
โอ้และเกี่ยวกับคำถามที่สองมันสมบูรณ์แบบมากที่จะใช้เทคโนโลยีใด ๆ ร่วมกับอีกอย่างหนึ่งดังนั้นเพื่อให้สมบูรณ์จากประสบการณ์ของฉัน MongoDB และ MySQL ทำงานร่วมกันได้ดีตราบใดที่พวกเขาไม่ได้อยู่ในเครื่องเดียวกัน
Martin Fowler มีวิดีโอที่ยอดเยี่ยมซึ่งให้คำอธิบายที่ดีเกี่ยวกับฐานข้อมูล NoSQL ลิงค์ตรงไปยังเหตุผลของเขาที่จะใช้ แต่วิดีโอทั้งหมดมีข้อมูลที่ดี
คุณมีข้อมูลจำนวนมากโดยเฉพาะอย่างยิ่งถ้าคุณไม่สามารถใส่ได้ทั้งหมดในเซิร์ฟเวอร์จริงเพราะ NoSQL ได้รับการออกแบบให้ปรับขนาดได้ดี
ความต้านทานเชิงวัตถุสัมพันธ์ไม่ตรงกัน - วัตถุโดเมนของคุณไม่พอดีในสคีมาฐานข้อมูลที่เกี่ยวข้อง NoSQL ช่วยให้คุณคงข้อมูลของคุณเป็นเอกสาร (หรือกราฟ) ซึ่งอาจแมปมากขึ้นกับรูปแบบข้อมูลของคุณ
NoSQL เป็นระบบฐานข้อมูลที่จัดระเบียบข้อมูลลงในเอกสาร (MongoDB), คู่ค่าคีย์ (MemCache, Redis), รูปแบบโครงสร้างกราฟ (Neo4J)
อาจมีคำถามและคำตอบที่เป็นไปได้สำหรับ "เมื่อใดควรใช้กับ NoSQL":
ต้องการสคีมาที่ยืดหยุ่นหรือจัดการกับทรีเช่นข้อมูลหรือไม่
โดยทั่วไปในการพัฒนาแบบว่องไวเราเริ่มออกแบบระบบโดยไม่ทราบความต้องการทั้งหมดอย่างตรงไปตรงมาซึ่งต่อมาตลอดทั้งระบบฐานข้อมูลการพัฒนาอาจจำเป็นต้องรองรับการเปลี่ยนแปลงการออกแบบบ่อยครั้งแสดง MVP (ผลิตภัณฑ์ที่ใช้งานได้น้อยที่สุด) หรือคุณกำลังจัดการกับ data schema ซึ่งเป็นแบบไดนามิกในธรรมชาติ เช่นบันทึกของระบบตัวอย่างที่แม่นยำมากคือบันทึก AWS cloudwatch
ชุดข้อมูลมีขนาดใหญ่ / ใหญ่?
ใช่ฐานข้อมูล NoSQL เป็นตัวเลือกที่ดีกว่าสำหรับแอพพลิเคชั่นที่ต้องการจัดการฐานข้อมูลนับล้านหรือแม้กระทั่งพันล้านเรคคอร์ดโดยไม่ส่งผลต่อประสิทธิภาพ
แลกเปลี่ยนระหว่างการปรับสเกลมากกว่าความสอดคล้อง
ซึ่งแตกต่างจาก RDMS ฐานข้อมูล NoSQL อาจสูญเสียข้อมูลขนาดเล็กที่นี่และที่นั่น (หมายเหตุ: ความน่าจะเป็นคือ. x%) แต่ง่ายต่อการปรับขนาดในแง่ของประสิทธิภาพ ตัวอย่าง: สิ่งนี้อาจดีสำหรับการจัดเก็บผู้ที่ออนไลน์ในแอพส่งข้อความทันทีโทเค็นใน db บันทึกสถิติการเข้าชมเว็บไซต์
การดำเนินการกับตำแหน่งทางภูมิศาสตร์: MongoDB สนับสนุนแฮชที่หลากหลายสำหรับการดำเนินการทางภูมิศาสตร์และตำแหน่งทางภูมิศาสตร์ ฉันชอบฟีเจอร์นี้ของ MongoDB จริงๆ
โดยสรุป MongoDB เหมาะอย่างยิ่งสำหรับการใช้งานที่คุณสามารถจัดเก็บข้อมูลโครงสร้างแบบไดนามิกในขนาดใหญ่
ข้อมูลที่จำเป็นบางอย่างหายไปเพื่อตอบคำถาม: กรณีใดบ้างที่ฐานข้อมูลจะต้องครอบคลุม การวิเคราะห์ที่ซับซ้อนจะต้องดำเนินการจากข้อมูลที่มีอยู่ ( OLAP ) หรือแอปพลิเคชันจะต้องสามารถดำเนินการธุรกรรมจำนวนมาก ( OLTP ) ได้หรือไม่? โครงสร้างข้อมูลคืออะไร? ที่อยู่ไกลจากเวลาสิ้นสุดของคำถาม
ในมุมมองของฉันมันผิดที่จะตัดสินใจเทคโนโลยีบนพื้นฐานของ buzzwords ที่เป็นตัวหนาโดยไม่ทราบว่าอะไรอยู่เบื้องหลังพวกเขา NoSQL มักได้รับการยกย่องว่ามีความยืดหยุ่น แต่คุณต้องรู้ด้วยว่าการปรับสเกลแนวนอน (มากกว่าหลายโหนด) ก็มีราคาและไม่ฟรี จากนั้นคุณต้องจัดการกับปัญหาเช่นความสอดคล้องในที่สุดและกำหนดวิธีการแก้ไขข้อขัดแย้งของข้อมูลหากไม่สามารถแก้ไขได้ในระดับฐานข้อมูล อย่างไรก็ตามสิ่งนี้ใช้กับระบบฐานข้อมูลแบบกระจายทั้งหมด
ความสุขของนักพัฒนาที่มีคำว่า "schema less" ที่ NoSQL นั้นเป็นจุดเริ่มต้นที่ยิ่งใหญ่มาก buzzword นี้ไม่แยแสอย่างรวดเร็วหลังจากการวิเคราะห์ทางเทคนิคเพราะมันไม่ถูกต้องไม่ต้องคีเมื่อเขียน แต่เข้ามาเล่นเมื่ออ่าน นั่นคือสาเหตุที่ควรเป็น "schema เมื่ออ่าน" อย่างถูกต้อง อาจเป็นการล่อลวงให้สามารถเขียนข้อมูลตามดุลยพินิจของตนเอง แต่ฉันจะจัดการกับสถานการณ์ได้อย่างไรหากมีข้อมูลที่มีอยู่ แต่แอปพลิเคชันเวอร์ชันใหม่คาดว่าสคีมาที่แตกต่างกันอย่างไร
รูปแบบเอกสาร (เช่นใน MongoDB เป็นต้น) ไม่เหมาะสมสำหรับตัวแบบข้อมูลที่มีความสัมพันธ์หลายอย่างระหว่างข้อมูล การเข้าร่วมจะต้องทำในระดับแอปพลิเคชันซึ่งเป็นความพยายามเพิ่มเติมและทำไมฉันจึงควรเขียนโปรแกรมสิ่งต่าง ๆ ที่ฐานข้อมูลควรทำ
หากคุณโต้แย้งว่า Google และ Amazon ได้พัฒนาฐานข้อมูลของตนเองเนื่องจาก RDBMS ทั่วไปไม่สามารถจัดการกับข้อมูลได้อีกต่อไปคุณสามารถพูดได้ว่า: คุณไม่ใช่ Google และ Amazon บริษัท เหล่านี้เป็นหัวหอกในบางสถานการณ์ที่ 0.01% ของฐานข้อมูลแบบดั้งเดิมไม่เหมาะสมอีกต่อไป แต่สำหรับส่วนที่เหลือของโลกพวกเขา
ไม่มีอะไรที่ไม่สำคัญ: SQLมีมานานกว่า 40 ปีและมีการพัฒนาหลายล้านชั่วโมงในระบบขนาดใหญ่เช่น Oracle หรือ Microsoft SQL สิ่งนี้จะต้องเกิดขึ้นได้จากฐานข้อมูลใหม่ บางครั้งการค้นหาผู้ดูแล SQL ก็ง่ายกว่า MongoDB ซึ่งนำเราไปสู่คำถามของการบำรุงรักษาและการจัดการ หัวข้อที่ไม่เซ็กซี่ แต่เป็นส่วนหนึ่งของการตัดสินใจทางเทคโนโลยี
ฉันเจอคำถามนี้ในขณะที่มองหาเหตุผลที่น่าเชื่อถือเพื่อเบี่ยงเบนจากการออกแบบ RDBMS
มีการโพสต์ที่ยอดเยี่ยมโดย Julian Brown ที่ให้แสงสว่างกับข้อ จำกัด ของระบบกระจาย แนวคิดนี้เรียกว่า Brewer's CAP Theorem ซึ่งสรุปแล้ว:
ข้อกำหนดสามประการของระบบแบบกระจายคือ: ความสอดคล้องความพร้อมใช้งานและความทนทานต่อการแบ่งพาร์ติชัน (CAP สั้น) แต่คุณสามารถมีได้สองครั้งเท่านั้น
และนี่คือวิธีที่ฉันสรุปสำหรับตัวฉันเอง:
คุณควรใช้ NoSQL ถ้าความสอดคล้องคือสิ่งที่คุณเสียสละ
ผมออกแบบและดำเนินการแก้ปัญหากับฐานข้อมูล NoSQL และนี่คือรายชื่อด่านของฉันเพื่อให้การตัดสินใจที่จะไปกับSQLหรือเอกสารที่มุ่งเน้น NoSQL
DON'Ts
SQL ไม่ล้าสมัยและยังคงเป็นเครื่องมือที่ดีกว่าในบางกรณี มันยากที่จะแสดงให้เห็นถึงการใช้ NoSQL เชิงเอกสารเมื่อ
ที่ควรทำ
หากคุณไม่ได้มีเงื่อนไขเหล่านั้นหรือสามารถลดพวกเขาต่อไปนี้เป็น 2 เหตุผลที่คุณอาจได้รับประโยชน์จาก NoSQL:
ข้อมูลเพิ่มเติม
ในโพสต์บล็อกของฉันฉันอธิบายเหตุผลในรายละเอียดเพิ่มเติม:
หมายเหตุ:ข้างต้นสามารถใช้ได้กับ NoSQL เชิงเอกสารเท่านั้น มีNoSQL ชนิดอื่น ๆซึ่งจำเป็นต้องมีการพิจารณาอื่น ๆ
การจัดการการอ่านเขียนจำนวนมาก
ดูที่ฐานข้อมูล NoSQL เมื่อคุณต้องการปรับขนาดอย่างรวดเร็ว และเมื่อใดที่คุณต้องขยายอย่างรวดเร็ว
เมื่อมีการดำเนินการอ่าน - เขียนบนเว็บไซต์ของคุณจำนวนมาก & เมื่อต้องรับมือกับข้อมูลจำนวนมากฐานข้อมูล NoSQL จะเหมาะสมที่สุดในสถานการณ์เหล่านี้ เนื่องจากพวกเขามีความสามารถในการเพิ่มโหนดได้ทันทีพวกเขาสามารถจัดการปริมาณการใช้งานพร้อมกันและข้อมูลจำนวนมากพร้อมเวลาแฝงที่น้อยที่สุด
ความยืดหยุ่นด้วยการสร้างแบบจำลองข้อมูล
คิวที่สองคือช่วงเริ่มต้นของการพัฒนาเมื่อคุณไม่แน่ใจเกี่ยวกับตัวแบบข้อมูลการออกแบบฐานข้อมูลสิ่งต่าง ๆ ที่คาดว่าจะเปลี่ยนแปลงอย่างรวดเร็ว ฐานข้อมูล NoSQL ให้ความยืดหยุ่นมากกว่า
ความสอดคล้องในที่สุดมากกว่าความสอดคล้องที่แข็งแกร่ง
เราควรเลือกฐานข้อมูล NoSQL เมื่อเราตกลงที่จะยอมแพ้ในเรื่องความสอดคล้องที่แข็งแกร่งและเมื่อเราไม่ต้องการธุรกรรม
ตัวอย่างที่ดีของเรื่องนี้คือเว็บไซต์เครือข่ายสังคมเช่น Twitter เมื่อทวีตของดาราดังระเบิดขึ้นและทุกคนก็ชื่นชอบและทวีตซ้ำจากทั่วโลก จะเป็นอย่างไรถ้าจำนวนครั้งของการไลค์เพิ่มขึ้นหรือลดลงในช่วงเวลาสั้น ๆ ?
คนดังจะไม่สนใจแน่นอนถ้าแทนที่จะเป็นจำนวน 5 ล้าน 500 รายการจริงระบบจะแสดงจำนวนที่เหมือนกันเป็น 5 ล้าน 250 ในระยะเวลาสั้น ๆ
เมื่อมีการปรับใช้แอปพลิเคชันขนาดใหญ่บนเซิร์ฟเวอร์หลายร้อยแห่งกระจายอยู่ทั่วโลกโหนดกระจายทางภูมิศาสตร์ต้องใช้เวลาพอสมควรในการเข้าถึงฉันทามติระดับโลก
จนกว่าจะถึงฉันทามติมูลค่าของเอนทิตีจะไม่สอดคล้องกัน ในที่สุดมูลค่าของกิจการจะได้รับความสอดคล้องหลังจากผ่านไปไม่นาน นี่คือสิ่งที่ความสอดคล้องในที่สุดคือ
แม้ว่าความไม่สอดคล้องกันไม่ได้หมายความว่ามีการสูญเสียข้อมูลใด ๆ หมายความว่าข้อมูลใช้เวลาสั้น ๆ ในการเดินทางทั่วโลกผ่านสายเคเบิลอินเทอร์เน็ตใต้มหาสมุทรเพื่อให้ได้ความสอดคล้องทั่วโลกและสอดคล้องกัน
เราพบกับพฤติกรรมนี้ตลอดเวลา โดยเฉพาะบน YouTube บ่อยครั้งที่คุณจะเห็นวิดีโอที่มีการดู 10 ครั้งและชอบ 15 ครั้ง สิ่งนี้เป็นไปได้อย่างไร
มันไม่ใช่. มุมมองที่เกิดขึ้นจริงมีมากกว่าการกดไลค์ เป็นเพียงจำนวนการดูที่ไม่สอดคล้องกันและใช้เวลาสักครู่เพื่อรับการอัปเดต
กำลังเรียกใช้การวิเคราะห์ข้อมูล
ฐานข้อมูล NoSQL ยังเหมาะสมที่สุดสำหรับการวิเคราะห์ข้อมูลใช้กรณีที่เราต้องจัดการกับการไหลเข้าของข้อมูลจำนวนมหาศาล