EdgeDB 5.0 DBMS วางจำหน่ายแล้ว ซึ่งใช้โมเดลข้อมูลกราฟเชิงสัมพันธ์และภาษาคิวรี EdgeQL ซึ่งได้รับการปรับให้เหมาะสมสำหรับการทำงานกับข้อมูลลำดับชั้นที่ซับซ้อน โครงการนี้ได้รับการพัฒนาในรูปแบบของส่วนเสริมสำหรับ PostgreSQL ซึ่งโค้ดนี้เขียนด้วยภาษา Python และ Rust (ตัวแยกวิเคราะห์และส่วนที่มีความสำคัญต่อประสิทธิภาพ) และเผยแพร่ภายใต้ลิขสิทธิ์ Apache 2.0 ไลบรารีไคลเอนต์ได้รับการจัดเตรียมสำหรับภาษา Python, Go, Rust .NET, Elixir และ TypeScript/Javascript จัดเตรียมเครื่องมือบรรทัดคำสั่งสำหรับการจัดการ DBMS และการดำเนินการค้นหาแบบโต้ตอบ (REPL)
แทนที่จะใช้โมเดลข้อมูลแบบตาราง EdgeDB ใช้ระบบการประกาศตามประเภทออบเจ็กต์ แทนที่จะใช้คีย์นอก การเชื่อมโยงโดยการอ้างอิงใช้เพื่อกำหนดความสัมพันธ์ระหว่างประเภท (วัตถุหนึ่งสามารถใช้เป็นคุณสมบัติของวัตถุอื่นได้)
พิมพ์บุคคล { ชื่อที่ต้องการ: str; } ประเภทภาพยนตร์ { ชื่อที่ต้องการ: str; นักแสดงหลายคน: บุคคล; }
คุณลักษณะที่ได้รับการสนับสนุน ได้แก่ การพิมพ์คุณสมบัติที่เข้มงวด ข้อจำกัดด้านมูลค่าคุณสมบัติ คุณสมบัติที่คำนวณ และขั้นตอนการจัดเก็บ คุณลักษณะของแผนการจัดเก็บอ็อบเจ็กต์ EdgeDB ซึ่งค่อนข้างชวนให้นึกถึง ORM รวมถึงความสามารถในการผสมสคีมา คุณสมบัติลิงก์จากอ็อบเจ็กต์ต่างๆ และการรองรับ JSON แบบรวม ดัชนีสามารถใช้เพื่อเร่งการประมวลผลแบบสอบถาม
มีเครื่องมือในตัวสำหรับจัดเก็บการย้ายสคีมา - หลังจากเปลี่ยนสคีมาที่ระบุในไฟล์ esdl แยกต่างหาก เพียงเรียกใช้คำสั่ง "edgedbmigration create" และ DBMS จะวิเคราะห์ความแตกต่างในสคีมาและสร้างสคริปต์แบบโต้ตอบสำหรับการย้ายไปยัง สคีมาใหม่ ประวัติการเปลี่ยนแปลงสคีมาจะถูกติดตามโดยอัตโนมัติ
ในการสร้างคำค้นหา รองรับภาษาการสืบค้น GraphQL และภาษา EdgeDB ที่เป็นกรรมสิทธิ์ ซึ่งเป็นการปรับ SQL สำหรับข้อมูลแบบลำดับชั้น แทนที่จะเป็นรายการ ผลลัพธ์ของการสืบค้นจะถูกจัดรูปแบบในลักษณะที่มีโครงสร้าง และแทนที่จะจัดรูปแบบการสืบค้นย่อยและ JOIN คุณสามารถระบุการสืบค้น EdgeQL หนึ่งรายการเป็นนิพจน์ภายในการสืบค้นอื่นได้ รองรับธุรกรรมและรอบ
เลือกภาพยนตร์ { title, นักแสดง: { name } } filter .title = "The Matrix" แทรกภาพยนตร์ { title := "The Matrix Resurrections", นักแสดง := ( เลือก Person filter .name ใน { 'Keanu Reeves', 'Carrie- แอนน์ มอสส์', 'ลอเรนซ์ ฟิชเบิร์น' } ) }
ในเวอร์ชันใหม่:
- เพิ่มการรองรับสำหรับการแยกสาขา ทำให้คุณสามารถใช้แนวคิดของสาขาที่ใช้ในระบบควบคุมเวอร์ชันเมื่อทำงานกับข้อมูลและสคีมา แทนที่จะใช้คำว่า "ฐานข้อมูล" รุ่นใหม่เสนอแนวคิดของ "สาขา" และคำสั่ง "สร้างฐานข้อมูล" และ "ฐานข้อมูลแบบหล่น" ถูกประกาศว่าล้าสมัย และขอแนะนำให้ใช้คำสั่งใหม่ "สร้างสาขาว่าง" และ " วางสาขา” แทน นอกเหนือจากสาขาว่างแล้ว การใช้คำสั่ง "สร้างสาขาสคีมา" และ "สร้างสาขาข้อมูล" คุณสามารถสร้างสาขาจากสาขาและฐานข้อมูลที่มีอยู่ โดยคัดลอกสคีมาพื้นที่เก็บข้อมูลและข้อมูลจากสาขาเหล่านั้น
ในทางปฏิบัติ การแยกสาขาช่วยให้คุณเก็บข้อมูลให้ซิงค์กับโค้ดที่ใช้ในการประมวลผล ในขณะที่ยังคงความเข้ากันได้กับโค้ดเก่า ตัวอย่างเช่น หลังจากอัปเดตโค้ดแล้ว คุณสามารถแนบสาขาข้อมูลใหม่เข้าไปได้ โดยคำนึงถึงการเปลี่ยนแปลงรูปแบบการจัดเก็บข้อมูลที่เกิดขึ้นในโค้ด ฟังก์ชั่นที่พิจารณานั้นสะดวกในการใช้งานเพื่อลดความซับซ้อนในการพัฒนาและทดสอบซอฟต์แวร์เวอร์ชันใหม่หลังจากนั้นก็เพียงพอที่จะเปลี่ยนไปใช้สาขาที่ทดสอบแล้ว
- ส่วนขยาย pgvector ใช้สำหรับการจัดเก็บและการสืบค้นเวกเตอร์อย่างมีประสิทธิภาพ ได้เพิ่มดัชนีประเภทใหม่ HNSW (Hierarchical Navigable Small Worlds) ซึ่งคล้ายกับดัชนี IVFFlat มีให้เลือกสามเวอร์ชัน: ext::pgvector::hnsw_euclidean ต่อ::pgvector: :hnsw_ip และต่อ::pgvector::hnsw_cosine นอกจากนี้ pgvector ยังได้ขยายความสามารถในการปรับแต่งดัชนีผ่านวัตถุ ext::pgvector::Config
- เพิ่มตัวเลือกการรับรองความถูกต้องเพิ่มเติม ส่วนขยายการรับรองความถูกต้องใช้การสนับสนุนรูปแบบการตรวจสอบสิทธิ์แบบไม่ใช้รหัสผ่าน WebAuthn (รหัสผ่าน) และ "ลิงก์เวทย์มนตร์" (แบบอีเมล) เพิ่มการรองรับการใช้แพลตฟอร์ม Slack และ Discord ในฐานะผู้ให้บริการ OAuth
- ทำการเพิ่มประสิทธิภาพการทำงาน ในการใช้งานแคชพร้อมกับผลลัพธ์ของการคอมไพล์แบบสอบถาม รับประกันการบันทึกสถานะระหว่างการรีสตาร์ทและการคอมไพล์ใหม่อัตโนมัติหลังจากเพิ่มการย้ายข้อมูล เพิ่มความเร็วในการทำงานกับแผนการจัดเก็บข้อมูลขนาดใหญ่
- ภาษาคิวรี EdgeQL อนุญาตให้ส่วนคำสั่ง "for" ละเว้นคีย์เวิร์ด "union" ในการสืบค้นพื้นฐานที่ใช้การแทรก อัปเดต หรือลบนิพจน์
- เพิ่มคำสั่ง Vacuum() เพื่อทำความสะอาด เพิ่มประสิทธิภาพ และบรรจุเนื้อหาในฐานข้อมูล
- อนุญาตให้มีการแปลงข้อมูลระหว่างประเภทไบต์และประเภท int16, int32, int64 และ uuid โดยใช้ฟังก์ชัน to_bytes(), to_uuid() และ to_int*()
- เพิ่มความสามารถในการปิดการเชื่อมต่อทั้งหมดไปยังฐานข้อมูลหลังจากดำเนินการ "ปล่อยฐานข้อมูล"
ที่มา: opennet.ru
