คุณไม่เคยมีการพูดคุยเกี่ยวกับฐานข้อมูลที่เรียกว่า "NoSQL" โดยไม่ต้องนำทฤษฎีบท CAP (ความสอดคล้องความพร้อมใช้งานพาร์ติชัน: เลือกสอง) ถ้าคุณต้องเลือกว่าระหว่าง MongoDB (Partition, Consistency) และ CouchDB (Availability, Partition) สิ่งแรกที่คุณต้องคิดคือ "ฉันต้องการข้อมูลที่ถูกต้องหรือต้องเข้าถึงตลอดเวลาหรือไม่"
ฐานข้อมูลใหม่เหล่านั้นถูกจัดทำขึ้นเพื่อแบ่งพาร์ติชัน แต่ถ้าฉันทำไม่ได้ล่ะ ถ้าฉันคิดว่ามันยอดเยี่ยมมากที่มีคีย์ / ค่าคอลัมน์เอกสารฐานข้อมูลใด ๆ แทนที่จะเป็นเชิงสัมพันธ์และเพิ่งสร้างเซิร์ฟเวอร์อินสแตนซ์เดียวและไม่เคยทิ้งมัน ในกรณีนั้นฉันจะไม่มีทั้งความพร้อมใช้งานและความสอดคล้องใช่ไหม MongoDB ไม่จำเป็นต้องทำซ้ำสิ่งใดดังนั้นจึงสามารถใช้งานได้ และ CouchDB จะมีแหล่งข้อมูลเพียงแหล่งเดียวดังนั้นมันจึงค่อนข้างสอดคล้องกัน
นั่นหมายความว่าในกรณีนี้ MongoDB และ CouchDB จะมีความแตกต่างเล็กน้อยในแง่ของการใช้งาน? ดียกเว้นประสิทธิภาพของหลักสูตร API และ al แต่นั่นจะเป็นการเลือกระหว่าง PostgreSQL และ MySQL มากกว่าการมีข้อกำหนดที่แตกต่างกันสองชุด
ฉันอยู่ตรงนี้หรือไม่ ฉันสามารถเปลี่ยนฐานข้อมูล AP หรือ CP เป็น AC ได้โดยไม่สร้างมากกว่าหนึ่งอินสแตนซ์หรือไม่ หรือมีบางอย่างที่ฉันขาดหายไป?
ลองถามคำถามตรงข้ามกัน ถ้าฉันใช้ฐานข้อมูลเชิงสัมพันธ์สมมติว่า MySQL และวางไว้ในการกำหนดค่าหลัก / ทาส ฉันไม่ใช้ธุรกรรม ACID หากฉันต้องการให้มีการซิงโครไนซ์การเขียนใด ๆ กับทาสทันทีนั่นจะไม่ทำให้ฐานข้อมูล CP ใช่หรือไม่ และถ้าฉันซิงโครไนซ์มันเป็นช่วงเวลาที่กำหนดไว้ล่วงหน้าและมันไม่สำคัญว่าลูกค้าอ่านข้อมูลเก่าจากทาส นั่นจะไม่ทำให้มันเป็นฐานข้อมูล AP หรือไม่? นั่นไม่ได้หมายความว่าถ้าฉันยอมแพ้กับ ACID ฉันยังคงสามารถใช้โมเดลความสัมพันธ์สำหรับฐานข้อมูลแบบแยกส่วนได้หรือไม่
ในสาระสำคัญ: ความสามารถในการปรับขนาดได้เกี่ยวกับสิ่งที่คุณพร้อมที่จะยอมแพ้ในทฤษฎีบท CAP มากกว่าแบบจำลองข้อมูลพื้นฐานหรือไม่ การมีคอลัมน์, เอกสาร, ค่าคีย์, สิ่งใดที่ช่วยเพิ่มความสามารถในการปรับขนาดได้มากกว่าโมเดลเชิงสัมพันธ์หรือไม่? เราสามารถออกแบบฐานข้อมูลเชิงสัมพันธ์ที่ออกแบบจากพื้นฐานเพื่อความทนทานต่อการแบ่งพาร์ติชันได้หรือไม่? (อาจมีอยู่แล้ว) เราสามารถทำให้กรดฐานข้อมูล NoSQL สอดคล้องกับมาตรฐานได้หรือไม่?
ขออภัยมันมีคำถามมากมาย แต่ฉันได้อ่านฐานข้อมูล NoSQL จำนวนมากเมื่อเร็ว ๆ นี้และดูเหมือนว่าประโยชน์ที่ใหญ่ที่สุดของการใช้พวกเขาคือพวกเขาเหมาะสมกับรูปร่างของข้อมูลของคุณมากกว่าพาร์ทิชัน CAP และการยกเลิกการปฏิบัติตาม ACID ท้ายที่สุดไม่ใช่ว่าทุกคนจะมีข้อมูลจำนวนมากซึ่งพวกเขาจำเป็นต้องแบ่งมัน มีประสิทธิภาพ / ความสามารถในการปรับขยายได้หากไม่ใช้โมเดลเชิงสัมพันธ์ก่อนที่ฉันจะคิดถึงการแบ่งพาร์ติชันข้อมูลของฉันหรือไม่?