สำรวจแนวคิดหลักของ Michael Stonebraker จาก Ingres, Postgres และ Vertica—และวิธีที่ไอเดียเหล่านี้หล่อหลอมฐานข้อมูล SQL เครื่องมือวิเคราะห์ และสแต็กข้อมูลสมัยใหม่

Michael Stonebraker เป็นนักวิทยาการคอมพิวเตอร์ที่โครงการของเขาไม่ได้แค่มีอิทธิพลต่อการวิจัยฐานข้อมูล แต่ยังเป็นรูปแบบการออกแบบและผลิตภัณฑ์ที่ทีมงานจำนวนมากพึ่งพาทุกวัน หากคุณเคยใช้ฐานข้อมูลเชิงสัมพันธ์ เวิร์เฮาส์เชิงวิเคราะห์ หรือระบบสตรีม คุณได้ประโยชน์จากไอเดียที่เขาช่วยพิสูจน์ สร้าง หรือทำให้เป็นที่แพร่หลาย
นี่ไม่ใช่ชีวประวัติหรือทัวร์ทฤษฎีฐานข้อมูลเชิงวิชาการ แต่เป็นการเชื่อมระบบสำคัญของ Stonebraker (เช่น Ingres, Postgres และ Vertica) เข้ากับทางเลือกที่คุณเห็นในสแต็กข้อมูลสมัยใหม่:
ฐานข้อมูลสมัยใหม่หมายถึงระบบที่สามารถ:
แต่ละระบบจะเน้นเป้าหมายเหล่านี้ต่างกัน โดยเฉพาะเมื่อเปรียบเทียบแอปเชิงธุรกรรม, แดชบอร์ด BI และ pipeline แบบเรียลไทม์
เราจะเน้นผลกระทบเชิงปฏิบัติ: ไอเดียที่ปรากฏในโลก “warehouse + lake + stream + microservices” ของวันนี้ และส่งผลต่อสิ่งที่คุณซื้อ สร้าง และปฏิบัติการ คาดหวังคำอธิบายชัดเจน ข้อแลกเปลี่ยน และผลลัพธ์เชิงโลกจริง—ไม่ใช่การเจาะลึกพิสูจน์ทางทฤษฎีหรือรายละเอียดการใช้งาน
เส้นทางอาชีพของ Stonebraker เข้าใจง่ายที่สุดเมื่อมองเป็นลำดับระบบที่สร้างขึ้นเพื่องานเฉพาะ—แล้วไอเดียที่ดีที่สุดก็ย้ายเข้าสู่ผลิตภัณฑ์หลักทั่วไป
Ingres เริ่มจากโครงการวิชาการที่พิสูจน์ว่าฐานข้อมูลเชิงสัมพันธ์สามารถเร็วและปฏิบัติได้จริง ไม่ใช่แค่ทฤษฎี มันช่วยทำให้การคิวรีแบบ SQL และแนวคิดการปรับแผนคิวรีตามต้นทุนเป็นที่แพร่หลาย ซึ่งต่อมากลายเป็นเรื่องปกติในเอนจินเชิงพาณิชย์
Postgres (ระบบวิจัยที่นำไปสู่ PostgreSQL) ทดลองเดิมพันแบบต่างออกไป: ฐานข้อมูลไม่ควรเป็นฟังก์ชันตายตัว คุณควรสามารถเพิ่มชนิดข้อมูลใหม่ วิธีการดัชนีใหม่ และพฤติกรรมที่ซับซ้อนขึ้นโดยไม่ต้องเขียนเอนจินทั้งตัวใหม่
ฟีเจอร์ “สมัยใหม่” หลายอย่างย้อนกลับไปยังยุคนี้—ชนิดข้อมูลที่ขยายได้ ฟังก์ชันที่ผู้ใช้กำหนดเอง และฐานข้อมูลที่ปรับตัวตามภาระงานที่เปลี่ยนไป
เมื่อการวิเคราะห์เติบโต ระบบแบบเก็บแถวก็มีปัญหากับการสแกนข้อมูลจำนวนมากและการรวมผล Stonebraker ผลักดัน การจัดเก็บแบบคอลัมน์ และเทคนิคการประมวลผลที่อ่านเฉพาะคอลัมน์ที่ต้องการและบีบอัดได้ดี—ไอเดียที่วันนี้เป็นมาตรฐานในฐานข้อมูลเชิงวิเคราะห์และเวิร์เฮาส์บนคลาวด์
Vertica นำไอเดียจากงานวิจัยคอลัมน์ไปสู่เอนจิน SQL แบบ massively parallel processing (MPP) ที่พร้อมใช้งานสำหรับคิวรีวิเคราะห์ขนาดใหญ่ รูปแบบนี้เกิดซ้ำในอุตสาหกรรม: โปรโตไทป์วิจัยพิสูจน์แนวคิด แล้วผลิตภัณฑ์ทำให้มันแข็งแรงขึ้นด้านความน่าเชื่อถือ เครื่องมือ และข้อจำกัดของลูกค้าจริง
งานในช่วงหลังขยายสู่ การประมวลผลสตรีม และเอนจินเฉพาะงาน—โต้แย้งว่าฐานข้อมูลทั่วไปเดียวมักไม่ชนะในทุกบริบท
โปรโตไทป์สร้างขึ้นเพื่อทดสอบสมมติฐานอย่างรวดเร็ว ผลิตภัณฑ์ต้องให้ความสำคัญกับการปฏิบัติการ: การอัปเกรด การมอนิเตอร์ ความปลอดภัย ประสิทธิภาพที่คาดเดาได้ และการสนับสนุน อิทธิพลของ Stonebraker ปรากฏเพราะไอเดียจากโปรโตไทป์หลายอย่างกลายเป็นความสามารถเริ่มต้นในฐานข้อมูลเชิงพาณิชย์ ไม่ใช่ตัวเลือกเฉพาะกลุ่ม
Ingres (ย่อมาจาก INteractive Graphics REtrieval System) เป็นผลงานยืนยันว่าโมเดลเชิงสัมพันธ์สามารถเป็นมากกว่าไอเดียที่สวยงาม ในตอนนั้นหลายระบบถูกสร้างรอบวิธีเข้าถึงข้อมูลแบบกำหนดเองและเส้นทางข้อมูลเฉพาะแอปพลิเคชัน
Ingres ต้องการแก้ปัญรง่ายๆ ที่เป็นมิตรกับธุรกิจ:
จะให้คนถามคำถามยืดหยุ่นกับข้อมูลได้อย่างไร โดยไม่ต้องเขียนซอฟต์แวร์ใหม่ทุกครั้งเมื่อคำถามเปลี่ยน?
ฐานข้อมูลเชิงสัมพันธ์สัญญาว่าคุณสามารถบรรยาย สิ่งที่ต้องการ (เช่น “ลูกค้าที่อยู่ในแคลิฟอร์เนียที่ค้างชําระ”) แทนที่จะบอก วิธี ดึงข้อมูลทีละขั้นตอน แต่การทำให้คำสัญญานั้นเป็นจริงต้องระบบที่สามารถ:
Ingres เป็นก้าวสำคัญสู่เวอร์ชัน “ปฏิบัติได้” ของการคอมพิวติ้งเชิงสัมพันธ์—ที่สามารถรันบนฮาร์ดแวร์ในสมัยนั้นและยังรู้สึกตอบสนองได้
Ingres ช่วยทำให้ฐานข้อมูลควรทำงานหนักในการวางแผนคิวรี แทนที่นักพัฒนาจะต้องปรับจูนทางเข้าข้อมูลทีละรายการ ระบบสามารถเลือกกลยุทธ์ เช่น ตารางใดอ่านก่อน จะใช้ดัชนีใด และจะ join ตารางอย่างไร
นั่นช่วยให้แนวคิดแบบ SQL แพร่หลาย: เมื่อคุณเขียนคิวรีแบบประกาศความต้องการ คุณทำการวนรอบได้เร็วขึ้น และคนจำนวนมากขึ้นสามารถถามคำถามได้โดยตรง—นักวิเคราะห์ ทีมผลิตภัณฑ์ แม้แต่ฝ่ายการเงิน—โดยไม่ต้องรอรายงานเฉพาะตัว
อินไซต์เชิงปฏิบัติใหญ่คือ การปรับแผนคิวรีตามต้นทุน: เลือกแผนคิวรีที่คาดว่าจะมี “ต้นทุน” ต่ำสุด (โดยปกติผสมกันของ I/O, CPU และหน่วยความจำ) อิงจากสถิติของข้อมูล
สิ่งนี้สำคัญเพราะมักหมายถึง:
Ingres ไม่ได้คิดค้นทุกชิ้นส่วนของการปรับแผนสมัยใหม่ แต่ช่วยวางรูปแบบ: SQL + optimizer คือสิ่งที่ทำให้ระบบเชิงสัมพันธ์ขยายจาก “ไอเดียดี” เป็นเครื่องมือรายวัน
ฐานข้อมูลเชิงสัมพันธ์ยุคแรกมักสมมติชุดชนิดข้อมูลคงที่ (ตัวเลข ข้อความ วันที่) และชุดการดำเนินการคงที่ (กรอง join รวม) นั่นทำงานได้ดี—จนทีมเริ่มเก็บข้อมูลชนิดใหม่ (ภูมิศาสตร์ log time series ตัวระบุโดเมนเฉพาะ) หรือต้องการฟีเจอร์ด้านประสิทธิภาพพิเศษ
เมื่อการออกแบบตายตัว ทุกความต้องการใหม่จะกลายเป็นตัวเลือกที่ไม่ดี: บีบข้อมูลเป็น blob ข้อความ ผูกระบบแยกต่างหาก หรือรอให้ผู้จำหน่ายเพิ่มการรองรับ
Postgres ผลักดันแนวคิดต่างออกไป: ฐานข้อมูลควรเป็น ขยายได้—หมายถึงคุณสามารถเพิ่มความสามารถใหม่ในรูปแบบที่ควบคุมได้ โดยไม่ทำลายความปลอดภัยและความถูกต้องที่คาดหวังจาก SQL
พูดง่ายๆ การขยายความสามารถเหมือนการเพิ่มหัวต่อที่รับรองกับเครื่องมือไฟฟ้า แทนที่จะต่อสายมอเตอร์เอง คุณสามารถสอนฐานข้อมูลให้ทำ “ทริก” ใหม่ๆ ในขณะที่ยังรักษาธุรกรรม สิทธิ์ และการปรับแผนคิวรีให้ทำงานร่วมกันอย่างสอดคล้อง
แนวคิดนี้เห็นได้ชัดในระบบนิเวศของ PostgreSQL ในปัจจุบัน (และหลายระบบที่ได้รับแรงบันดาลใจจาก Postgres) แทนที่จะรอฟีเจอร์แกนกลาง ทีมงานสามารถรับส่วนขยายที่ผ่านการตรวจสอบแล้วซึ่งผสานรวมอย่างเรียบร้อยกับ SQL และเครื่องมือการปฏิบัติการ
ตัวอย่างในภาพรวม ได้แก่:
กุญแจคือ Postgres ถือว่า “การเปลี่ยนสิ่งที่ฐานข้อมูลทำได้” เป็นเป้าหมายการออกแบบ ไม่ใช่เรื่องเสริม และไอเดียนี้ยังมีอิทธิพลต่อการวิวัฒนาการของแพลตฟอร์มข้อมูลสมัยใหม่
ฐานข้อมูลไม่ใช่แค่การเก็บข้อมูล—แต่เป็นการทำให้ข้อมูลยังคง ถูกต้อง แม้หลายสิ่งจะเกิดขึ้นพร้อมกัน นั่นคือหน้าที่ของธุรกรรมและการควบคุมความขนาน และเป็นเหตุผลสำคัญที่ระบบ SQL ได้รับความเชื่อถือสำหรับงานทางธุรกิจจริง
ธุรกรรม คือกลุ่มการเปลี่ยนแปลงที่ต้องสำเร็จหรือไม่สำเร็จเป็นหน่วยเดียว
ถ้าคุณโอนเงินระหว่างบัญชี สั่งสินค้า หรืออัปเดตสต็อก คุณไม่สามารถยอมให้ผลลัพธ์ "ครึ่งเดียว" ได้ ธุรกรรมทำให้แน่ใจว่าคุณจะไม่เจอสถานการณ์เช่นคำสั่งซื้อที่ชาร์จเงินแล้วแต่ไม่ได้จองสต็อก หรือสต็อกลดลงโดยไม่มีคำสั่งซื้อบันทึกไว้
ในเชิงปฏิบัติ ธุรกรรมให้คุณ:
ความขนาน หมายถึงคนและแอปหลายคนอ่านและเปลี่ยนข้อมูลพร้อมกัน เช่น การชำระเงินของลูกค้า ตัวแทนฝ่ายสนับสนุนแก้ไขบัญชี งานพื้นหลังอัปเดตสถานะ และนักวิเคราะห์รันรายงาน
หากไม่มีกฎระมัดระวัง ความขนานจะสร้างปัญหาเช่น:
แนวทางที่มีอิทธิพลคือ MVCC (Multi-Version Concurrency Control) แนวคิดคือเก็บหลายเวอร์ชันของแถวเป็นช่วงเวลาสั้นๆ เพื่อให้ผู้อ่านเห็น snapshot ที่เสถียรในขณะที่ผู้เขียนทำการอัปเดต
ข้อดีใหญ่คือ การอ่านไม่ค่อยบล็อกการเขียน และผู้เขียนไม่ต้องรอเบื้องหลังการคิวรีที่รันนาน คุณยังคงได้ความถูกต้องแต่มีการรอคอยน้อยลง
ฐานข้อมูลปัจจุบันมักรับงานผสม: การเขียนเชิงธุรกรรมปริมาณสูงควบคู่กับการอ่านบ่อยสำหรับแดชบอร์ด มุมมองลูกค้า และการวิเคราะห์เชิงปฏิบัติการ ระบบ SQL สมัยใหม่พึ่งพาเทคนิคอย่าง MVCC การล็อกที่ชาญฉลาด และระดับการแยกส่วนเพื่อสร้างสมดุลระหว่างความเร็วกับความถูกต้อง—ทำให้คุณขยายกิจกรรมโดยไม่สูญเสียความน่าเชื่อถือของข้อมูล
ฐานข้อมูลแบบเก็บแถวถูกสร้างมาสำหรับการประมวลผลเชิงธุรกรรม: การอ่าน/เขียนเล็กๆ จำนวนมาก มักแตะเรคอร์ดหนึ่งลูกค้า คำสั่ง หรือบัญชีในแต่ละครั้ง แบบนี้ดีเมื่อคุณต้องดึงหรืออัปเดตเรคอร์ดทั้งหมดอย่างรวดเร็ว
คิดถึงสเปรดชีต ระบบ row store เหมือนการเก็บแต่ละแถวเป็นแฟ้มหนึ่ง: เมื่อคุณต้องการ "ทั้งหมดเกี่ยวกับคำสั่ง #123" ก็หยิบแฟ้มนั้นขึ้นมาได้เลย ส่วน column store เหมือนการแยกแฟ้มโดยคอลัมน์: ลิ้นชักหนึ่งเก็บ "order_total" อีกลิ้นชักเก็บ "order_date" อีกลิ้นชักเก็บ "customer_region"
สำหรับงานวิเคราะห์ คุณไม่ค่อยต้องทั้งแฟ้ม—มักถามว่า "รายได้รวมตามภูมิภาคไตรมาสที่แล้วเป็นเท่าไร" คิวรีนั้นอาจแตะเพียงไม่กี่ฟิลด์ข้ามเรคอร์ดล้านแถว
คิวรีเชิงวิเคราะห์มัก:
ด้วยการจัดเก็บแบบคอลัมน์ เอนจินสามารถ อ่านเฉพาะคอลัมน์ที่อ้างถึง ข้ามไปคอลัมน์อื่นๆ ได้ ทำให้อ่านข้อมูลจากดิสก์น้อยลงและย้ายผ่านหน่วยความจำน้อยลง—มักเป็นผลสำเร็จด้านประสิทธิภาพที่ใหญ่ที่สุด
คอลัมน์มักมีค่าซ้ำกัน (ภูมิภาค สถานะ หมวดหมู่) ทำให้บีบอัดได้ดี—และการบีบอัดช่วยเพิ่มความเร็วเพราะระบบอ่านไบต์น้อยลง และบางครั้งสามารถประมวลผลข้อมูลบีบอัดได้เลย
ระบบแบบคอลัมน์ช่วยเน้นการย้ายจากฐานข้อมูลที่เน้น OLTP ไปสู่เอนจินที่ออกแบบมาสำหรับการวิเคราะห์เป็นหลัก โดยการสแกน การบีบอัด และการรวมผลอย่างรวดเร็วกลายเป็นเป้าหมายหลักแทนที่จะเป็นเรื่องรอง
Vertica เป็นตัวอย่างที่ชัดเจนว่าหลักคิดเกี่ยวกับฐานข้อมูลเชิงวิเคราะห์ของ Stonebraker กลายเป็นผลิตภัณฑ์ที่ทีมงานสามารถรันในการผลิตได้อย่างไร มันนำบทเรียนจากการเก็บแบบคอลัมน์มาคู่กับการออกแบบแบบกระจายที่มุ่งแก้ปัญหาเฉพาะ: ตอบคิวรี SQL เชิงวิเคราะห์ขนาดใหญ่ให้เร็ว แม้ว่าปริมาณข้อมูลจะเกินเซิร์ฟเวอร์เครื่องเดียว
MPP ย่อมาจาก massively parallel processing วิธีคิดง่ายๆ คือ: หลายเครื่องร่วมกันทำคิวรี SQL เดียวพร้อมกัน
แทนที่เซิร์ฟเวอร์ฐานข้อมูลเครื่องเดียวจะอ่านข้อมูลทั้งหมดและทำ grouping กับ sorting เอง ข้อมูลจะแบ่งข้ามโหนด แต่ละโหนดประมวลผลชิ้นของตัวเองแบบขนาน แล้วระบบรวมผลย่อยเป็นคำตอบสุดท้าย
นี่คือเหตุผลที่คิวรีที่ใช้เวลานาทีเดียวบนเครื่องเดียวอาจลดเหลือวินาทีเมื่อกระจายข้ามคลัสเตอร์—ถ้าข้อมูลกระจายดีและคิวรีสามารถขนานได้
ระบบวิเคราะห์สไตล์ Vertica เหมาะเมื่อคุณมีแถวจำนวนมากและต้องการสแกน กรอง และรวมผลอย่างมีประสิทธิภาพ กรณีใช้งานทั่วไปได้แก่:
เอนจินวิเคราะห์แบบ MPP ไม่ใช่ตัวแทนแทนฐานข้อมูลเชิงธุรกรรมโดยตรง พวกมันถูกปรับแต่งสำหรับ การอ่านแถวจำนวนมาก และ การคำนวณสรุป ไม่ใช่การจัดการอัปเดตเล็กๆ จำนวนมาก
ข้อแลกเปลี่ยนที่พบบ่อยได้แก่:
แนวคิดสำคัญคือการมุ่งจุดประสงค์: Vertica และระบบคล้ายกันได้ความเร็วโดยจูนการจัดเก็บ การบีบอัด และการประมวลผลแบบขนานสำหรับงานวิเคราะห์—แลกด้วยข้อจำกัดที่ระบบธุรกรรมออกแบบมาเพื่อหลีกเลี่ยง
ฐานข้อมูลสามารถ “เก็บและคิวรี” ข้อมูลได้แต่ยังรู้สึกช้าเมื่อทำการวิเคราะห์ ความแตกต่างไม่ใช่แค่ SQL ที่คุณเขียน แต่เป็นวิธีที่เอนจิน ประมวลผล มัน: อ่านเพจ ย้ายข้อมูลผ่าน CPU ใช้หน่วยความจำ และลดงานที่เสียเปล่า
โครงการเชิงวิเคราะห์ของ Stonebraker ผลักดันแนวคิดว่า ประสิทธิภาพคิวรีเป็นปัญหาการประมวลผลเท่ากับปัญหาการจัดเก็บ ความคิดนี้ช่วยผลักดันทีมจากการปรับจูนค้นหาแถวเดียวไปสู่การปรับจูนสแกนขนาดใหญ่ join และ aggregation บนแถวล้านๆ
เอนจินเก่าบางตัวประมวลผลคิวรีแบบ "tuple-at-a-time" (ทีละแถว) ซึ่งสร้างการเรียกฟังก์ชันและ overhead มาก การประมวลผลแบบเวกเตอร์กลับโมเดลนั้น: เอนจินประมวลผล แบตช์ (เวกเตอร์) ของค่าในลูปที่แน่นหนา
พูดให้เข้าใจง่าย มันเหมือนการเคลื่อนของชำร่วยด้วยรถเข็นแทนที่จะถือทีละชิ้น การประมวลผลเป็นแบตช์ลด overhead และให้ CPU สมัยใหม่ทำงานได้ดีขึ้น: ลูปที่คาดเดาได้ น้อยการแตกกิ่ง และการใช้ cache ที่ดีขึ้น
เอนจินวิเคราะห์ที่เร็วจะใส่ใจกับการใช้ CPU และ cache มากเป็นพิเศษ นวัตกรรมการประมวลผลมักมุ่งไปที่:
ไอเดียเหล่านี้สำคัญเพราะคิวรีเชิงวิเคราะห์มักถูกจำกัดด้วยแบนด์วิดท์หน่วยความจำและ cache miss ไม่ใช่ด้วยความเร็วดิสก์บริสุทธิ์
เวิร์เฮาส์ข้อมูลสมัยใหม่และเอนจิน SQL—เวิร์เฮาส์คลาวด์ ระบบ MPP และเครื่องมือวิเคราะห์ในโปรเซส—มักใช้การประมวลผลแบบเวกเตอร์ ตัวดำเนินการที่เข้าใจการบีบอัด และพายป์ไลน์ที่เป็นมิตรกับ cache เป็นความปกติ
แม้เมื่อผู้ขายโฆษณาฟีเจอร์อย่าง "autoscaling" หรือ "การแยก storage กับ compute" ความเร็วที่คุณรู้สึกในวันต่อวันยังพึ่งพาการเลือกโมเดลการประมวลผลเหล่านี้อย่างมาก
ถ้าคุณกำลังประเมินแพลตฟอร์ม ถามไม่เพียงว่า เก็บอะไร แต่ถามว่า มันรัน join และ aggregation อย่างไรใต้ฝากม่าน—และว่าโมเดลการประมวลผลถูกออกแบบมาสำหรับงานวิเคราะห์หรือสำหรับงานธุรกรรม
ข้อมูลสตรีมคือข้อมูลที่มาถึงอย่างต่อเนื่องเป็นลำดับของเหตุการณ์—คิดถึง "เกิดเหตุการณ์ใหม่" ข้อความ การรูดบัตรเครดิต การอ่านเซนเซอร์ การคลิกบนหน้าผลิตภัณฑ์ การสแกนพัสดุ หรือบรรทัดล็อกแต่ละบรรทัด: แต่ละรายการมาถึงแบบเรียลไทม์และต่อเนื่อง
ฐานข้อมูลและ pipeline แบบแบตช์เหมาะเมื่อคุณรอได้: โหลดข้อมูลของเมื่อวาน รันรายงาน เผยแพร่แดชบอร์ด แต่ความต้องการแบบเรียลไทม์ไม่รอการรันงานรายชั่วโมง
ถ้าคุณประมวลผลข้อมูลเป็นแบตช์เท่านั้น มักเจอปัญหา:
ระบบสตรีมมิงถูกออกแบบบนแนวคิดว่าการคำนวณทำงานต่อเนื่องเมื่อตัวเหตุการณ์มาถึง
คิวรีต่อเนื่อง เหมือนคิวรี SQL ที่ไม่เคย "จบ" มันอัปเดตผลเมื่อเหตุการณ์ใหม่มาถึงเรื่อยๆ
เพราะสตรีมไม่มีที่สิ้นสุด ระบบสตรีมใช้ windows เพื่อจัดการการคำนวณ หน้าต่างคือช่วงเวลา或จำนวนเหตุการณ์ เช่น "5 นาทีล่าสุด" "ทุกนาที" หรือ "1,000 เหตุการณ์ล่าสุด" ซึ่งช่วยให้คำนวณการนับ ค่าเฉลี่ย หรือ top-N แบบโรลลิงโดยไม่ต้องประมวลผลซ้ำทั้งหมด
การสตรีมแบบเรียลไทม์มีค่าสูงเมื่อเวลาเป็นสิ่งสำคัญ:
Stonebraker โต้เถียงมาหลายสิบปีว่าฐานข้อมูลไม่ควรถูกสร้างเป็นเครื่องมือทั่วไป "ทำได้ทุกอย่าง" เหตุผลง่าย: ภาระงานต่างกันให้ผลตอบแทนจากการออกแบบที่ต่างกัน หากคุณปรับจูนหนักเพื่อให้งานหนึ่งดี (เช่น อัปเดตเชิงธุรกรรมเล็กๆ) คุณมักทำให้งานอื่นช้าลง (เช่น การสแกนแถวหลายพันล้านแถวเพื่อทำรายงาน)
สแต็กสมัยใหม่ส่วนใหญ่ใช้มากกว่าหนึ่งระบบเพราะธุรกิจต้องการคำตอบหลายแบบ:
นั่นคือสาเหตุ "ไซส์เดียวไม่ได้เหมาะกับทุกคน" ในทางปฏิบัติ: คุณเลือกเอนจินที่ตรงกับรูปแบบงาน
ใช้ตัวกรองเร็วๆ นี้เมื่อเลือก (หรืออธิบายเหตุผลในการเพิ่ม) ระบบใหม่:
การมีหลายเอนจินอาจเป็นเรื่องดี แต่เมื่อแต่ละเครื่องมือมีภาระงานชัดเจน เครื่องมือใหม่ควรได้รับที่อยู่โดยลดค่าใช้จ่าย เวลาแฝง หรือความเสี่ยง—ไม่ใช่เพราะความใหม่ชอบ แต่ละระบบควรมีความเป็นเจ้าของเชิงปฏิบัติการที่ชัดเจน และเก็บเครื่องมือที่ไม่มีวัตถุประสงค์ชัดเจนออกไป
เส้นใยงานวิจัยของ Stonebraker—พื้นฐานเชิงสัมพันธ์ ความสามารถขยาย การเก็บแบบคอลัมน์ การประมวลผลแบบ MPP และแนวคิด "เครื่องมือที่ใช่สำหรับงาน"—ปรากฏในรูปแบบมาตรฐานของแพลตฟอร์มข้อมูลสมัยใหม่
เวิร์เฮาส์ สะท้อนงานหลายสิบปีเรื่องการปรับแผนคิวรี SQL การเก็บแบบคอลัมน์ และการประมวลผลแบบขนาน เมื่อคุณเห็นแดชบอร์ดเร็วบนตารางขนาดใหญ่ มักเป็นการผสมระหว่างรูปแบบไฟล์คอลัมน์และการประมวลผลแบบเวกเตอร์และการสเกลแบบ MPP
Lakehouse ยืมแนวคิดจากเวิร์เฮาส์ (สกีมา สถิติ แคช การปรับแผนคิวรีตามต้นทุน) แต่วางไว้บนรูปแบบไฟล์เปิดและ object storage การเปลี่ยนแปลงว่า "storage ถูก compute ยืดหยุ่น" เป็นเรื่องใหม่; แต่การคิดเรื่องคิวรีและธุรกรรมข้างใต้ไม่ใช่เรื่องใหม่
ระบบวิเคราะห์ MPP (shared-nothing clusters) เป็นทายาทตรงของงานวิจัยที่พิสูจน์ว่าคุณสามารถสเกล SQL โดยการแบ่งพาร์ติชันข้อมูล ย้ายการคำนวณไปยังข้อมูล และจัดการการย้ายข้อมูลอย่างระมัดระวังในระหว่างการ join และ aggregation
SQL กลายเป็นอินเตอร์เฟซที่ใช้ร่วมกันระหว่างเวิร์เฮาส์ ระบบ MPP และแม้แต่ชั้นคิวรีบน "lake" ทีมพึ่งพามันเป็น:
แม้ว่าการประมวลผลจะเกิดขึ้นในเอนจินต่างกัน (แบตช์ โต้ตอบ สตรีม) SQL มักยังคงเป็นภาษาหน้าตาผู้ใช้
การจัดเก็บยืดหยุ่นไม่ได้ยกเลิกความจำเป็นของโครงสร้าง การมีสกีมาที่ชัดเจน ความหมายที่มีเอกสาร และการวิวัฒนาการที่ควบคุมได้ ลดการเสียหายด้านล่างได้มาก
การกำกับดูแลที่ดีไม่ใช่เรื่องป้ายกำกับ แต่เป็นการทำให้ข้อมูลเชื่อถือได้: คำจำกัดความที่ชัดเจน เจ้าของ การตรวจสอบคุณภาพ และการควบคุมการเข้าถึง
เมื่อประเมินแพลตฟอร์ม ให้ถาม:
ถ้าผู้ขายอธิบายผลิตภัณฑ์ของตนตามพื้นฐานเหล่านี้เป็นภาษาง่ายๆ ไม่ได้ นวัตกรรมอาจเป็นแค่การบรรจุใหม่
เส้นทางของ Stonebraker ง่าย: ฐานข้อมูลทำงานได้ดีที่สุดเมื่อออกแบบมาสำหรับงานเฉพาะ—และเมื่อพวกมันสามารถวิวัฒน์ตามงานนั้นได้
ก่อนเปรียบเทียบฟีเจอร์ เขียนสิ่งที่คุณต้องทำจริงๆ ลงไป:
กฎที่มีประโยชน์: ถ้าคุณบรรยายภาระงานไม่ได้ในไม่กี่ประโยค (รูปแบบคิวรี ขนาดข้อมูล ความต้องการ latency ความขนาน) คุณจะเลือกสินค้าตามคำพูดฮิปๆ
ทีมมักประเมินต่ำว่าความต้องการเปลี่ยนบ่อยแค่ไหน: ชนิดข้อมูลใหม่ เมตริกใหม่ กฎกำกับดูแลใหม่ ผู้บริโภคใหม่
เลือกแพลตฟอร์มและโมเดลข้อมูลที่ทำให้การเปลี่ยนแปลงเป็นเรื่องปกติ ไม่ใช่ความเสี่ยง:
คำตอบที่เร็วมีค่าก็ต่อเมื่อเป็นคำตอบที่ ถูกต้อง เมื่อประเมินตัวเลือก ถามว่าระบบจัดการอย่างไรกับ:
รัน “พิสูจน์ของจริงด้วยข้อมูลของคุณ” ขนาดเล็ก ไม่ใช่แค่สาธิต:
คำแนะนำฐานข้อมูลมากมักหยุดที่ "เลือกเอนจินที่ใช่" แต่ทีมยังต้องส่งมอบแอปและเครื่องมือภายในรอบเอนจินนั้น: แผง admin, แดชบอร์ดเมตริก, บริการ ingestion และ workflow หลังบ้าน
ถ้าคุณอยากทำโปรโตไทป์โดยไม่ต้องคิดระบบใหม่ทั้งชุด แพลตฟอร์มแบบ vibe-coding อย่าง Koder.ai สามารถช่วยสปินแอปเว็บ (React), บริการ backend (Go + PostgreSQL) และแม้แต่ไคลเอนต์มือถือ (Flutter) จาก workflow แบบแชทได้ นั่นมีประโยชน์เมื่อคุณวนรอบการออกแบบสกีมา สร้าง "data product" ภายในขนาดเล็ก หรือตรวจสอบพฤติกรรมภาระงานจริงก่อนตัดสินใจโครงสร้างพื้นฐานระยะยาว
ถ้าคุณอยากลงลึกขึ้น ให้ค้นหาคำอธิบายเกี่ยวกับ การจัดเก็บแบบคอลัมน์, MVCC, การประมวลผลแบบ MPP, และ การประมวลผลสตรีมมิง มีบทความอธิบายเพิ่มเติมในบล็อก
เขาเป็นกรณีที่ไม่บ่อยนักที่งานวิจัยกลายเป็น DNA ของผลิตภัณฑ์จริงๆ ไอเดียที่ทดสอบใน Ingres (SQL + การปรับแผนคิวรี), Postgres (แนวคิดเรื่อง extensibility + MVCC) และ Vertica (คอลัมน์ + MPP เชิงวิเคราะห์) ปรากฏในวิธีการที่ warehouse, ฐานข้อมูล OLTP และแพลตฟอร์มสตรีมมิ่งถูกสร้างและทำการตลาดในวันนี้
SQL ชนะเพราะช่วยให้คุณบอก สิ่งที่ต้องการ ส่วนฐานข้อมูลจะคิดเองว่า จะทำอย่างไรให้ได้ผลลัพธ์นั้นอย่างมีประสิทธิภาพ การแยกหน้าที่นี้เอื้อต่อ:
optimizer แบบต้นทุนจะใช้สถิติตารางเพื่อตรวจเปรียบเทียบแผนคิวรีที่เป็นไปได้แล้วเลือกแผนที่มีค่าคาดหวังต่ำสุด (I/O, CPU, หน่วยความจำ) ในเชิงปฏิบัติช่วยให้คุณ:
MVCC (Multi-Version Concurrency Control) เก็บหลายเวอร์ชันของแถวเพื่อให้ผู้อ่านเห็น snapshot ที่สอดคล้องในขณะที่มีการเขียน ในการใช้งานประจำวันหมายความว่า:
Extensibility ทำให้ฐานข้อมูลเติบโตฟีเจอร์ใหม่ได้อย่างปลอดภัย—ประเภทข้อมูล ฟังก์ชัน และดัชนี—โดยไม่ต้อง fork หรือเขียนเอนจินใหม่ เหมาะเมื่อคุณต้อง:
กฎเชิงปฏิบัติ: ปฏิบัติต่อส่วนเสริมเหมือน dependency—เวอร์ชัน ควบคุมการทดสอบการอัปเกรด และจำกัดผู้ที่จะติดตั้ง
ระบบแบบแถวเหมาะกับการอ่าน/เขียนทั้งเรคอร์ดบ่อยครั้ง (OLTP) ส่วนระบบแบบคอลัมน์โดดเด่นเมื่อคุณสแกนแถวจำนวนมากแต่ใช้เพียงไม่กี่ฟิลด์ (งานเชิงวิเคราะห์)
เฮียวริสติกง่ายๆ:
MPP (massively parallel processing) แบ่งข้อมูลข้ามโหนดเพื่อให้เครื่องหลายเครื่องประมวลผลคิวรี SQL เดียวพร้อมกัน เหมาะกับ:
แต่ต้องระวัง trade-off เช่น การเลือกกระจายข้อมูล ค่า shuffle ระหว่างการ join และความยุ่งยากในการจัดการการอัปเดตแถวเดียวบ่อยๆ
Vectorized execution ประมวลผลข้อมูลเป็นแบตช์ (เวกเตอร์) แทนทีละแถว ลด overhead และใช้ cache ของ CPU ได้ดีกว่า คุณจะสังเกตได้จาก:
ระบบแบบ batch ทำงานเป็นช่วงเวลา ทำให้ข้อมูล “ไม่สด” เสมอ ระบบสตรีมมิ่งรับเหตุการณ์ต่อเนื่องแล้วคำนวณผลแบบเพิ่มทีละนิด
สถานการณ์ที่สตรีมมิ่งคุ้มค่า:
การคำนวณบนสตรีมมิงใช้ "windows" (เช่น 5 นาทีล่าสุด) เพื่อให้การคำนวณจำกัดขอบเขตได้
ใช้หลายระบบเมื่อแต่ละระบบมีขอบเขตงานชัดเจนและให้ประโยชน์ที่วัดได้ (ค่าใช้จ่าย เวลาแฝง ความเชื่อถือได้) เพื่อหลีกเลี่ยง tool sprawl: