DuckDB 0.6.0 ตัวแปร SQLite สำหรับการสืบค้นเชิงวิเคราะห์ที่เผยแพร่

DuckDB 0.6.0 DBMS วางจำหน่ายแล้ว โดยผสมผสานคุณสมบัติของ SQLite เช่น ความกะทัดรัด ความสามารถในการเชื่อมต่อในรูปแบบของไลบรารีแบบฝัง การจัดเก็บฐานข้อมูลในไฟล์เดียว และอินเทอร์เฟซ CLI ที่สะดวกสบาย พร้อมด้วยเครื่องมือและการเพิ่มประสิทธิภาพสำหรับการดำเนินการ แบบสอบถามเชิงวิเคราะห์ที่ครอบคลุมส่วนสำคัญของข้อมูลที่เก็บไว้ เช่น ที่รวบรวมเนื้อหาทั้งหมดของตารางหรือรวมตารางขนาดใหญ่หลายตารางเข้าด้วยกัน รหัสโครงการเผยแพร่ภายใต้ใบอนุญาต MIT การพัฒนายังอยู่ในขั้นตอนของการเปิดตัวรุ่นทดลอง เนื่องจากรูปแบบการจัดเก็บข้อมูลยังไม่เสถียรและมีการเปลี่ยนแปลงจากเวอร์ชันหนึ่งไปอีกเวอร์ชันหนึ่ง

DuckDB จัดเตรียมภาษา SQL ขั้นสูงที่มีความสามารถเพิ่มเติมสำหรับการจัดการคำสั่งที่ซับซ้อนและใช้เวลานาน รองรับการใช้ประเภทที่ซับซ้อน (อาร์เรย์ โครงสร้าง สหภาพ) และความสามารถในการดำเนินการแบบสอบถามย่อยที่สัมพันธ์กันแบบซ้อนและแบบซ้อนได้รับการสนับสนุน รองรับการเรียกใช้คิวรีหลายรายการพร้อมกัน โดยเรียกใช้คิวรีโดยตรงจากไฟล์ CSV และ Parquet สามารถนำเข้าจาก PostgreSQL DBMS ได้

นอกเหนือจากโค้ดเชลล์จาก SQLite แล้ว โครงการยังใช้ตัวแยกวิเคราะห์จาก PostgreSQL ในไลบรารีที่แยกต่างหาก ส่วนประกอบ Date Math จาก MonetDB การใช้ฟังก์ชันหน้าต่างของตัวเอง (ขึ้นอยู่กับอัลกอริธึม Segment Tree Aggregation) ซึ่งเป็นตัวประมวลผลนิพจน์ทั่วไปที่ใช้ ไลบรารี RE2 เครื่องมือเพิ่มประสิทธิภาพการสืบค้นของตัวเอง และกลไกการควบคุม MVCC ที่ดำเนินงานพร้อมกัน (การควบคุมการทำงานพร้อมกันแบบหลายเวอร์ชัน) รวมถึงกลไกการดำเนินการสืบค้นแบบเวกเตอร์ตามอัลกอริทึม Hyper-Pipelining Query Execution ซึ่งอนุญาตชุดค่าจำนวนมาก ​​เพื่อดำเนินการในคราวเดียวในการดำเนินการเดียว

ท่ามกลางการเปลี่ยนแปลงในรุ่นใหม่:

  • งานปรับปรุงรูปแบบการจัดเก็บข้อมูลอย่างต่อเนื่อง มีการนำโหมดการเขียนดิสก์ในแง่ดีมาใช้ ซึ่งเมื่อโหลดชุดข้อมูลขนาดใหญ่ในธุรกรรมเดียว ข้อมูลจะถูกบีบอัดและเขียนลงในไฟล์จากฐานข้อมูลในโหมดสตรีมมิ่ง โดยไม่ต้องรอให้ธุรกรรมได้รับการยืนยันด้วยคำสั่ง COMMIT . เมื่อได้รับคำสั่ง COMMIT ข้อมูลจะถูกเขียนลงดิสก์แล้ว และเมื่อมีการดำเนินการ ROLLBACK ข้อมูลจะถูกละทิ้ง ก่อนหน้านี้ ข้อมูลจะถูกบันทึกลงในหน่วยความจำอย่างสมบูรณ์ในตอนแรก และเมื่อส่งข้อมูลจะถูกบันทึกลงในดิสก์
  • เพิ่มการรองรับการโหลดข้อมูลแบบขนานลงในตารางแยกกัน ซึ่งช่วยให้คุณเพิ่มความเร็วในการโหลดบนระบบมัลติคอร์ได้อย่างมาก ตัวอย่างเช่น ในรุ่นก่อนหน้านี้ การโหลดฐานข้อมูลที่มี 150 ล้านแถวบน CPU 10 คอร์ใช้เวลา 91 วินาที แต่ในเวอร์ชันใหม่ การดำเนินการนี้จะเสร็จสิ้นภายใน 17 วินาที มีโหมดการโหลดแบบขนานสองโหมด - โดยมีการเก็บรักษาลำดับของบันทึกและไม่มีการเก็บรักษาลำดับ
  • สำหรับการบีบอัดข้อมูล จะใช้อัลกอริธึม FSST (Fast Static Symbol Table) ซึ่งช่วยให้คุณสามารถแพ็คข้อมูลภายในสตริงโดยใช้พจนานุกรมทั่วไปที่ตรงกันโดยทั่วไป การใช้อัลกอริธึมใหม่ทำให้สามารถลดขนาดของฐานข้อมูลทดสอบจาก 761MB เป็น 251MB
  • มีการเสนออัลกอริธึม Chimp และ Patas เพื่อบีบอัดตัวเลขทศนิยม (DOUBLE และ FLOAT) เมื่อเปรียบเทียบกับอัลกอริธึม Gorillas ก่อนหน้านี้ Chimp ให้การบีบอัดในระดับที่สูงกว่าและการบีบอัดที่เร็วขึ้น อัลกอริธึม Patas ช้ากว่า Chimp ในอัตราส่วนการบีบอัด แต่มีความเร็วในการบีบอัดเร็วกว่ามาก ซึ่งแทบไม่ต่างจากการอ่านข้อมูลที่ไม่มีการบีบอัด
  • เพิ่มความสามารถในการทดลองในการโหลดข้อมูลจากไฟล์ CSV ลงในสตรีมคู่ขนานหลายรายการ (SET Experimental_parallel_csv=true) ซึ่งช่วยลดเวลาที่ใช้ในการโหลดไฟล์ CSV ขนาดใหญ่ได้อย่างมาก ตัวอย่างเช่น เมื่อเปิดใช้งานตัวเลือกนี้ เวลาในการดาวน์โหลดไฟล์ CSV ขนาด 720 MB จะลดลงจาก 3.5 เป็น 0.6 วินาที
  • มีการนำความเป็นไปได้ของการดำเนินการสร้างดัชนีและการดำเนินการจัดการแบบคู่ขนานกัน ตัวอย่างเช่น การดำเนินการ CREATE INDEX ในคอลัมน์ที่มี 16 ล้านระเบียนลดลงจาก 5.92 เป็น 1.38 วินาที
  • เปิดใช้งานการดำเนินการรวมข้อมูลแบบขนานในแบบสอบถามที่มีนิพจน์ "COUNT (DISTINCT col)"
  • SQL ได้เพิ่มการรองรับประเภท UNION ซึ่งอนุญาตให้หลายประเภทเชื่อมโยงกับองค์ประกอบเดียว (เช่น "UNION(num INT, error VARCHAR))")
  • SQL ให้ความสามารถในการสร้างแบบสอบถามที่ขึ้นต้นด้วยคำว่า “FROM” แทน “SELECT” ในกรณีนี้ จะถือว่าแบบสอบถามเริ่มต้นด้วย "SELECT *"
  • SQL ได้เพิ่มการรองรับนิพจน์ COLUMNS ซึ่งช่วยให้คุณสามารถดำเนินการกับหลายคอลัมน์ได้โดยไม่ต้องทำซ้ำนิพจน์ ตัวอย่างเช่น “SELECT MIN(COLUMNS(*)) from obs;” จะทำให้ฟังก์ชัน MIN ถูกดำเนินการสำหรับแต่ละคอลัมน์ในตาราง obs และ "SELECT COLUMNS('val[0-9]+') from obs;" สำหรับคอลัมน์ที่มีชื่อประกอบด้วย "val" และตัวเลข
  • เพิ่มการรองรับการดำเนินการกับรายการ เช่น “SELECT [x + 1 for x in [1, 2, 3]] AS l;”
  • การใช้หน่วยความจำได้รับการปรับให้เหมาะสม ตามค่าดีฟอลต์ แพลตฟอร์ม Linux จะใช้ไลบรารี jemalloc สำหรับการจัดการหน่วยความจำ ปรับปรุงประสิทธิภาพของการดำเนินการรวมแฮชอย่างมีนัยสำคัญเมื่อหน่วยความจำมีจำกัด
  • เพิ่มโหมดเอาต์พุต ".mode duckbox" ให้กับอินเทอร์เฟซบรรทัดคำสั่ง ซึ่งจะละทิ้งคอลัมน์กลางโดยคำนึงถึงความกว้างของหน้าต่างเทอร์มินัล (เหมาะสำหรับการประเมินผลลัพธ์ของการสืบค้นด้วยสายตาอย่างรวดเร็วด้วยคอลัมน์จำนวนมาก เช่น "SELECT * FROM tbl” ซึ่งในโหมดปกติจะกระจายเป็นหลายบรรทัด) เมื่อใช้พารามิเตอร์ “.maxrows X” คุณสามารถจำกัดจำนวนแถวที่แสดงเพิ่มเติมได้
  • CLI จัดเตรียมการเติมข้อมูลอัตโนมัติโดยคำนึงถึงบริบท (การป้อนข้อมูลคำหลัก ชื่อตาราง ฟังก์ชัน ชื่อคอลัมน์ และชื่อไฟล์เสร็จสมบูรณ์)
  • CLI มีตัวบ่งชี้ความคืบหน้าของแบบสอบถามที่เปิดใช้งานตามค่าเริ่มต้น

ที่มา: opennet.ru

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