อะไรคือข้อดีของการใช้ NoSQL (เช่น MongoDB) เหนือ MySQL, PostGRE SQL หรือ MSSQL ใน Drupal? ข้อดีที่ได้รับจากการใช้หน่วยเก็บข้อมูลหรือการกำหนดค่าบางอย่างของ Drupal จำเป็นต้องเปลี่ยนหรือไม่?
อะไรคือข้อดีของการใช้ NoSQL (เช่น MongoDB) เหนือ MySQL, PostGRE SQL หรือ MSSQL ใน Drupal? ข้อดีที่ได้รับจากการใช้หน่วยเก็บข้อมูลหรือการกำหนดค่าบางอย่างของ Drupal จำเป็นต้องเปลี่ยนหรือไม่?
คำตอบ:
MongoDB สามารถใช้เพื่อจัดเก็บเอนทิตีส่วนใหญ่หรือทั้งหมดของคุณลงในที่จัดเก็บข้อมูลที่รวดเร็วและเป็นเอกสาร การจัดเก็บประเภทนี้ปรับขนาดได้ดีกว่าหน่วยเก็บข้อมูลพื้นฐาน SQL ที่เรามีในแกน Drupal (ซึ่งยึดตาม schema "หนึ่งตารางต่อเขตข้อมูล")
ในสถานะปัจจุบันของ Drupal 7 คุณจะมี:
สิ่งนี้ช่วยให้ทำการสอบถามอย่างรวดเร็วบนเอนทิตีบน MongoDB และความสามารถในการเพิ่มดัชนีที่ซับซ้อนซึ่งไม่มีการสนับสนุนฐานข้อมูล Opensource SQL (รวมถึงดัชนีข้ามตาราง) ในเวลาเดียวกันคุณจะไม่สูญเสียความสามารถในการทำงานร่วมกันเนื่องจากตารางฐานของเอนทิตียังคงถูกเก็บไว้ใน SQL และสามารถเข้าร่วมโดยโมดูลที่ยังคงใช้ SQL ได้เท่านั้น (เช่นตั้งค่าสถานะ)
การสืบค้นข้อมูลแบบรวดเร็วประเภทนี้มีให้โดยกลไก EntityFieldQuery ซึ่งเป็นวิธีการสร้างแบบสอบถามในเอนทิตีคุณสมบัติและเขตข้อมูลของพวกเขาในลักษณะที่เป็นนามธรรม การใช้งานเริ่มต้นใน core แปลแบบสอบถามเหล่านั้นไปยัง SQL แต่โมดูล MongoDB มีการใช้งานเต็มรูปแบบที่สามารถตอบสนองแบบสอบถามเหล่านั้นจาก MongoDB โดยตรง
ขอบคุณEntityFieldQuery แบ็กเอนด์สำหรับ Viewsคุณสามารถใช้ประโยชน์จากพลังนี้ได้อย่างง่ายดายโดยใช้เครื่องมือที่คุณคุ้นเคย ข้อเสียเพียงอย่างเดียวคือความสัมพันธ์ไม่ได้รับการสนับสนุน (แต่ในทางปฏิบัติคุณไม่ค่อยต้องการความสัมพันธ์อยู่แล้วและสิ่งนี้สามารถแก้ไขได้โดยการดันข้อมูลเพิ่มเติมเข้าไปในวัตถุเอนทิตีและเพิ่มการเปิดเผยพวกเขาเป็นคุณสมบัติเพิ่มเติมของเอนทิตี)
โดยสรุปทันทีที่ประสิทธิภาพการสืบค้นเป็นปัญหาในโครงการของคุณซึ่งเกิดขึ้นทันทีที่คุณมีชุดข้อมูลที่สำคัญ (สมมติว่าเริ่มต้นที่หน่วยงานไม่กี่สิบในพันของประเภทเอนทิตีที่กำหนด) MongoDB เป็นกำไรสุทธิ สำหรับข้อเสียน้อยมาก แนะนำเป็นอย่างยิ่ง
MongoDB และที่คล้ายกันได้รับการออกแบบมาเพื่อเก็บข้อมูลที่มีโครงสร้าง (ลำดับชั้น) ในลักษณะที่ค่อนข้างยืดหยุ่น
ตัวอย่างเช่นDrupal 7
เมื่อใช้field_sql_storage
ทุกฟิลด์จะได้รับเป็นตารางของตัวเอง เมื่อคุณแนบ 10 เขตข้อมูลกับชนิดเนื้อหาคุณจะสิ้นสุดด้วย 10 ตารางในฐานข้อมูลของคุณ เมื่อคุณโหลดโหนดนั้นfield_sql_storage
จะดำเนินการค้นหาต่อฟิลด์และต่อโหนด (หรือหลายโหนดเมื่อใช้node_load_multiple
)
เมื่อคุณใช้mongodb_field_storageคุณสามารถจัดเก็บเขตข้อมูลทั้งหมดของโหนดในเอกสารเดียวและรับด้วยแบบสอบถามเดียว
นอกจากนี้คุณยังสามารถจัดเก็บสิ่งอื่น ๆ เช่นจ้องจับผิดการประชุมแคชบล็อกในMongoDB
คุณยังต้องการ MySQL แต่MongoDBไม่ได้แทนที่ (เฉพาะบางส่วนเท่านั้น)
ข้อดีอีกอย่างคือMongoDB นั้นสามารถปรับขนาดได้ง่ายขึ้นคุณสามารถเพิ่มเซิร์ฟเวอร์จำนวนมากลงในคลัสเตอร์เพื่อแบ่งปันข้อมูลระหว่างกัน
ข้อดีมาพร้อมกับข้อเสีย
Drupal โดยรวมไม่สามารถเปลี่ยนเป็น MongoDb ได้ดังนั้นคุณจะต้องสนับสนุนฐานข้อมูลสองฐานและตรวจสอบให้แน่ใจว่าพวกเขาทำงานร่วมกันได้ดี
โมดูลจำนวนมากจะไม่สามารถทำงานร่วมกับ MongoDB ได้ดังนั้นคุณจะสูญเสียความสามารถในการทำงานร่วมกัน
ถ้าคุณไม่มีความจำเป็นเร่งด่วน (เช่นส่วนหนึ่งของระบบของคุณไม่ได้รับมือกับจำนวนคำขอ / หรือจำนวนข้อมูล) ฉันจะไม่เปลี่ยน และแม้กระทั่งเมื่อคุณเริ่มเข้าใกล้ขีด จำกัด ให้ดูที่การขว้างปาฮาร์ดแวร์ที่ปัญหาหรือการปรับแต่งก่อนเปลี่ยน
ฉันคิดว่าฉันเคยตอบเรื่องนี้มาก่อนมีสิ่งซ้ำซ้อนเกือบทั้งหมดใน SO