MongoDB 3.2 กำลังจะมี join

MongoDB กำลังจะมี join แล้วใน version 3.2 ก็ถือว่าเป็นฟีเจอร์ที่หลายคน(น่าจะ)เรียกร้องกันมานาน ใครสนใจรายละเอียดหรือวิธีใช้งานลองอ่านใน บล็อกของ MongoDB ดู บล็อกนี้ผมคงไม่ลงรายละเอียดส่วนนั้นมากแต่จะลองสังเกตส่วนอื่นๆเพิ่มเติมดู

ข้อสังเกตของฟีเจอร์นี้
– ยัง limit อยู่ที่ Left Outer Equi-Join แบบเดียว (ใครไม่รู้ว่าคืออะไรลองอ่านในบล็อกของ MongoDB มีภาพอธิบายประกอบ หรือถ้าอยากรู้ว่า join มีกี่แบบลองดูที่ Wiki)
– เรียกการ join นี้ว่า $lookup โดยใช้งานผ่าน aggregate
– มีเฉพาะใน Enterprise Advanced Edition เท่านั้น (ในขณะที่ผมเขียนบล็อกนี้)

จริงๆฟีเจอร์นี้ก็มีข้อถกเถียงกันมายาวนาน เพราะถ้ามีการ join ก็จะเริ่มไปเจอปัญหาแบบเดียวกับ Relational SQL เช่น เรื่องประสิทธิภาพ เรื่อง integrity ของข้อมูล (FK constraint) เรื่องการใช้การเวลามีการทำ sharding กระจายไปหลายเครื่อง เป็นต้น เวลาออกแบบ nosql ส่วนใหญ่จึงทำ denormalize กันเพื่อประสิทธิภาพในการคิวรีเรียกดูข้อมูล แต่คิดว่า users จำนวนมากคงไม่ได้ทำแบบนั้น หรือมี use case ที่จำเป็นต้อง join เช่น การทำ report เลยต้องมีฟีเจอร์ขึ้นมา

ก็ไม่แน่ใจว่า engine ของ MongoDB จัดการยังไงให้มีประสิทธิภาพ สมัย ป.โท ผมเคยทำวิจัยที่ต้องไปศึกษาการทำ engine ของระบบฐานข้อมูลให้รองรับ distributed join เลยรู้ว่าการทำ engine แบบนี้ยากมากถ้าจะให้มีประสิทธิภาพดี ปัจจุบันก็ยังมีงานวิจัยด้านนี้ทำกันอยู่ เช่น งานตีพิมพ์ใน VLDB (เป็น top-tier conference ด้านระบบฐานข้อมูล) ปีก่อน (2014) ของ Microsoft หรือของ Ecole Polytechnique Federale de Lausanne เป็นต้น (จริงๆก็มีหลายระบบก็เลือกที่จะทำ Hybrid ระหว่าง SQL และ NoSQL ที่น่าจะพยายามแก้ปัญหานี้เช่นกัน พวกสายตระกูล NewSQL ทั้งหลาย เช่น NuoDB, VoltDB, หรือ F1 บน Spanner ของกูเกิ้ล

แต่จริงๆประเด็นที่ผมมองว่าเป็นปัญหาหนักมากคือการมีอยู่แค่ใน Enterprise Advanced เท่านั้น เพราะว่าถ้าเราโค้ดที่ใช้งานฟีเจอร์ $lookup นี้ไปแล้ว คนที่เอาไปใช้ของเราต่อจะไม่สามารถทำงานโปรแกรมของเราได้ถ้าใช้ Opensource Edition ซึ่งปกติแล้วพวกฟีเจอร์ที่เป็น Enterprise Edition ควรเป็นส่วนเสริมที่ไม่กระเทือนระดับ business logic ของโปรแกรม (เช่น ฟีเจอร์ auto backup, monitoring, performance tuning เป็นต้น)

ก็ต้องคอยติดตามกันต่อไปว่าสุดท้ายแล้วฟีเจอร์นี้จะเข้ามารวมอยู่กับ Opensource Edition หรือไม่ครับ