การเปิดตัว FerretDB 0.1 ซึ่งเป็นการใช้งาน MongoDB บน ​​PostgreSQL DBMS

การเปิดตัวโครงการ FerretDB 0.1 (เดิมคือ MangoDB) ได้รับการเผยแพร่แล้ว ซึ่งช่วยให้คุณสามารถแทนที่ DBMS MongoDB เชิงเอกสารด้วย PostgreSQL โดยไม่ต้องทำการเปลี่ยนแปลงรหัสแอปพลิเคชัน FerretDB ถูกนำมาใช้เป็นพร็อกซีเซิร์ฟเวอร์ที่แปลการเรียก MangoDB เป็นการสืบค้น SQL เป็น PostgreSQL ทำให้สามารถใช้ PostgreSQL เป็นที่เก็บข้อมูลจริงได้ รหัสนี้เขียนในภาษา Go และเผยแพร่ภายใต้ลิขสิทธิ์ Apache 2.0

ความจำเป็นในการโยกย้ายอาจเกิดขึ้นเนื่องจากการที่ MongoDB เปลี่ยนไปใช้ใบอนุญาต SSPL ที่เป็นกรรมสิทธิ์ซึ่งขึ้นอยู่กับใบอนุญาต AGPLv3 แต่ไม่ได้เปิดอยู่ เนื่องจากมีข้อกำหนดที่เลือกปฏิบัติในการส่งมอบภายใต้ใบอนุญาต SSPL ไม่เพียงแต่รหัสแอปพลิเคชันเท่านั้น แต่ยังรวมถึง ซอร์สโค้ดของส่วนประกอบทั้งหมดที่เกี่ยวข้องกับการจัดหาบริการคลาวด์

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

ให้เราระลึกว่า MongoDB ครอบครองเฉพาะระหว่างระบบที่รวดเร็วและปรับขนาดได้ซึ่งดำเนินการข้อมูลในรูปแบบคีย์/ค่า และ DBMS เชิงสัมพันธ์ที่ทำงานและกำหนดคิวรีได้ง่าย MongoDB รองรับการจัดเก็บเอกสารในรูปแบบ JSON, มีภาษาที่ค่อนข้างยืดหยุ่นสำหรับการสร้างแบบสอบถาม, สามารถสร้างดัชนีสำหรับแอตทริบิวต์ที่เก็บไว้ต่างๆ, ให้การจัดเก็บวัตถุไบนารีขนาดใหญ่อย่างมีประสิทธิภาพ, รองรับการบันทึกการดำเนินการสำหรับการเปลี่ยนแปลงและเพิ่มข้อมูลลงในฐานข้อมูล, ทำงานตามกระบวนทัศน์ Map/Reduce รองรับการจำลองแบบและการสร้างการกำหนดค่าที่ทนทานต่อข้อผิดพลาด

การเปิดตัว FerretDB 0.1.0 ได้ออกแบบวิธีการดึงข้อมูลจาก PostgreSQL ใหม่ทั้งหมด ก่อนหน้านี้ สำหรับคำขอ MongoDB ขาเข้าแต่ละรายการ จะมีการสร้างแบบสอบถาม SQL หนึ่งรายการไปยัง PostgreSQL โดยใช้ฟังก์ชันสำหรับการทำงานกับรูปแบบ JSON และกรองผลลัพธ์ทางฝั่ง PostgreSQL เนื่องจากความแตกต่างด้านความหมายของฟังก์ชัน json ของ PostgreSQL และ MongoDB จึงมีความคลาดเคลื่อนในลักษณะการทำงานเมื่อเปรียบเทียบและเรียงลำดับประเภทต่างๆ เพื่อแก้ไขปัญหานี้ ขณะนี้ข้อมูลจะถูกดึงมาจาก PostgreSQL ซ้ำซ้อน และผลลัพธ์จะถูกกรองบนฝั่ง FerretDB ซึ่งทำให้สามารถจำลองพฤติกรรมของ MongoDB ในสถานการณ์ส่วนใหญ่ได้

ราคาของความเข้ากันได้ที่เพิ่มขึ้นคือประสิทธิภาพที่ลดลง ซึ่งในรุ่นอนาคต พวกเขาคาดว่าจะได้รับการชดเชยด้วยการเลือกกรองเฉพาะแบบสอบถามฝั่ง FerretDB เท่านั้นที่มีความคลาดเคลื่อนในลักษณะการทำงาน ตัวอย่างเช่น การสืบค้น "db.collection.find({_id: 'some-id-value'})" สามารถประมวลผลได้ทั้งหมดใน PostgreSQL เป้าหมายหลักของโครงการในขั้นตอนการพัฒนานี้คือการบรรลุความเข้ากันได้กับ MongoDB และประสิทธิภาพถูกลดระดับไว้ที่เบื้องหลังในตอนนี้ ท่ามกลางการเปลี่ยนแปลงการทำงานในเวอร์ชันใหม่ มีการรองรับตัวดำเนินการบิตทั้งหมด ตัวดำเนินการเปรียบเทียบ “$eq” รวมถึงตัวดำเนินการ “$elemMatch” และ “$bitsAllClear” ที่ถูกบันทึกไว้

ที่มา: opennet.ru

เพิ่มความคิดเห็น