Materialized Views ของ PostgreSQL ยังไม่เพียงพอ ขณะที่นักพัฒนาต้องการโซลูชันฐานข้อมูลที่อัปเดตอัตโนมัติ

ทีมชุมชน BigGo
Materialized Views ของ PostgreSQL ยังไม่เพียงพอ ขณะที่นักพัฒนาต้องการโซลูชันฐานข้อมูลที่อัปเดตอัตโนมัติ

การอพิจารณาล่าสุดในชุมชนนักพัฒนาได้เน้นย้ำถึงข้อจำกัดที่สำคัญของ materialized views ของ PostgreSQL ทำให้เกิดการถกเถียงเกี่ยวกับความจำเป็นในการมี incremental view maintenance แบบอัตโนมัติอย่างแท้จริงในฐานข้อมูล การสนทนานี้มุ่งเน้นไปที่ช่องว่างระหว่างสิ่งที่นักพัฒนาคาดหวังจาก materialized views และสิ่งที่การใช้งานจริงในปัจจุบันสามารถให้ได้

ปัญหาการรีเฟรชแบบแมนนวลของ PostgreSQL

ปัญหาหลักของ materialized views ของ PostgreSQL คือต้องการการรีเฟรชแบบแมนนวลโดยใช้คำสั่ง REFRESH MATERIALIZED VIEW ซึ่งแตกต่างจากเวอร์ชันในอุดมคติที่อธิบายไว้ในบทเรียนหลายๆ เรื่อง views เหล่านี้ไม่ได้ซิงโครไนซ์กับข้อมูลพื้นฐานโดยอัตโนมัติ ทำให้มันเหมือนกับกลไกการแคชที่ซับซ้อนมากกว่าโซลูชันที่อัปเดตอยู่เสมอแบบวิเศษที่นักพัฒนาหลายคนหวังไว้

สถานการณ์จะยิ่งมีปัญหามากขึ้นเมื่อต้องจัดการกับชุดข้อมูลขนาดใหญ่ การรีเฟรช materialized view ใน PostgreSQL ต้องการการสร้าง view ใหม่ทั้งหมด ซึ่งอาจใช้ทรัพยากรมากและอาจรบกวนระบบที่ใช้งานจริง วิธีการแบบทั้งหมดหรือไม่เลยนี้หมายความว่าคุณไม่สามารถอัปเดตเฉพาะส่วนของ view ได้ ทำให้เกิดคอขวดด้านประสิทธิภาพที่อาจเกิดขึ้น

ส่วนขยาย PostgreSQL สำหรับ Incremental Views

  • pg_ivm: ส่วนขยายจากบุคคลที่สามที่เพิ่มการบำรุงรักษา incremental view ให้กับ PostgreSQL
  • ไม่สามารถใช้งานได้บน Amazon RDS
  • ให้การอัปเดตอัตโนมัติแต่ต้องติดตั้งและกำหนดค่าด้วยตนเอง

โซลูชันจากบุคคลที่สามเติมเต็มช่องว่าง

บริษัทหลายแห่งได้เกิดขึ้นเพื่อแก้ไขข้อจำกัดนี้ โดยเสนอความสามารถ incremental view maintenance แบบแท้จริง Materialize, ReadySet, Feldera, RisingWave และ DeltaStream เป็นสตาร์ตอัพที่ให้โซลูชันที่สามารถซิงโครไนซ์ materialized views กับข้อมูลต้นทางโดยอัตโนมัติ แพลตฟอร์มเหล่านี้ใช้เทคนิคเช่น differential dataflow และ incremental view maintenance เพื่อให้ได้สิ่งที่ฐานข้อมูลแบบดั้งเดิมต้องดิ้นรนกับมัน

Materialized views ใน ScyllaDB เป็นที่รู้จัก (หรือเคย?) ว่าเป็นการใช้งานที่มีบั๊ก โดยเฉพาะอย่างยิ่ง มันมักจะขึ้นอยู่กับการที่คลัสเตอร์มีสุขภาพดีในขณะที่เผยแพร่การเปลี่ยนแปลง

บริษัทที่เสนอบริการ Incremental View Maintenance

  • Materialize: ฐานข้อมูล streaming เฉพาะทางที่มีการอัปเดตมุมมองอัตโนมัติ
  • ReadySet: ชั้น SQL caching ที่มี incremental maintenance
  • Feldera: แพลตฟอร์มที่ใช้ DBSP มีความซับซ้อนในการอัปเดต O(1)
  • RisingWave: ฐานข้อมูล streaming สำหรับการวิเคราะห์แบบเรียลไทม์
  • DeltaStream: การประมวลผล stream ที่มี materialized views
  • Confluent: แพลตฟอร์ม streaming ที่ใช้ Kafka มีความสามารถด้าน view

ผู้จำหน่ายฐานข้อมูลกำลังไล่ตาม

ในขณะที่ PostgreSQL ล้าหลัง ระบบฐานข้อมูลอื่นๆ เสนอการใช้งาน materialized views ที่ดีกว่า Microsoft SQL Server ให้ indexed views ที่อัปเดตแบบซิงโครนัสกับตารางพื้นฐาน แม้ว่าจะมีผลกระทบต่อประสิทธิภาพระหว่างการดำเนินการเขียน Oracle เสนอตัวเลือกการสร้างใหม่แบบเต็มและแบบเพิ่มทีละน้อย โดยเวอร์ชันล่าสุดเพิ่มความสามารถในการรีเฟรชแบบพร้อมกัน

ผู้ให้บริการคลาวด์ก็กำลังก้าวหน้าในพื้นที่นี้เช่นกัน Materialized views ของ BigQuery อนุญาตให้ปรับแต่งพารามิเตอร์ความสดใหม่และสามารถเขียนคิวรีใหม่โดยอัตโนมัติเพื่อใช้การรวมที่คำนวณล่วงหน้า อย่างไรก็ตาม ฟีเจอร์ขั้นสูงเหล่านี้มักมาพร้อมกับการพิจารณา vendor lock-in

การเปรียบเทียบฐานข้อมูลสำหรับ Materialized Views

ฐานข้อมูล อัปเดตอัตโนมัติ รีเฟรชแบบเพิ่มหน่วย พร้อมใช้งานจริง
PostgreSQL ไม่มี ใช้ Extension เท่านั้น ใช่
MySQL ไม่มี ไม่มี ใช่
SQL Server ใช่ (Indexed Views) ใช่ ใช่
Oracle เลือกได้ ใช่ ใช่
BigQuery ใช่ ใช่ ใช่
ScyllaDB ใช่ (มีบั๊ก) ใช่ จำกัด

การแลกเปลี่ยนระหว่างประสิทธิภาพและความซับซ้อน

การอภิปรายเผยให้เห็นความตึงเครียดพื้นฐานในการออกแบบฐานข้อมูล คิวรีการนับแบบง่ายที่ทำงานได้อย่างสมบูรณ์แบบกับการจัดทำดัชนีที่เหมาะสมมักถูกออกแบบให้ซับซ้อนเกินไปเป็นโซลูชันการแคชที่ซับซ้อน นักพัฒนาหลายคนชี้ให้เห็นว่าสำหรับกรณีการใช้งานทั่วไปที่เกี่ยวข้องกับหลายพันมากกว่าหลายล้านเรคคอร์ด คิวรี COUNT(*) ที่มีดัชนีที่ดีทำงานได้อย่างเพียงพอโดยไม่มีความซับซ้อนของ materialized views

คุณค่าที่แท้จริงของ materialized views เกิดขึ้นกับคิวรีการวิเคราะห์ที่ซับซ้อนมากขึ้นที่เกี่ยวข้องกับการรวมหลายตาราง การรวมข้อมูล และการแปลงข้อมูล สถานการณ์เหล่านี้ได้รับประโยชน์อย่างมากจากผลลัพธ์ที่คำนวณล่วงหน้า โดยเฉพาะในแอปพลิเคชันคลังข้อมูลและการรายงาน

การพัฒนาอย่างต่อเนื่องในพื้นที่นี้แสดงให้เห็นว่า automatic incremental view maintenance น่าจะกลายเป็นฟีเจอร์มาตรฐานในระบบฐานข้อมูลในอนาคต จนกว่าจะถึงเวลานั้น นักพัฒนาต้องชั่งน้ำหนักการแลกเปลี่ยนระหว่างประสิทธิภาพคิวรี ความสดใหม่ของข้อมูล และความซับซ้อนของระบบอย่างรอบคอบเมื่อเลือกวิธีการจัดการข้อมูลที่ได้มา

อ้างอิง: Materialized views are obviously useful