ในโลกของการพัฒนาซอฟต์แวร์ Event Sourcing ได้ปรากฏขึ้นเป็นรูปแบบที่ทรงพลังสำหรับการสร้างแอปพลิเคชันที่แข็งแกร่ง แทนที่จะเก็บเพียงสถานะปัจจุบันของข้อมูล วิธีการนี้จะบันทึกการเปลี่ยนแปลงทุกครั้งเป็นเหตุการณ์ที่ไม่สามารถเปลี่ยนแปลงได้ ซึ่งสร้างเส้นทางการตรวจสอบที่สมบูรณ์ของทุกสิ่งที่เกิดขึ้นในระบบ ความท้าทายอยู่ที่ว่าจะสามารถสอบถามข้อมูลจากบันทึกเหตุการณ์ที่เติบโตขึ้นเรื่อยๆ นี้ได้อย่างมีประสิทธิภาพอย่างไร การนำเสนอ EventQL ซึ่งเป็นภาษาคิวรีที่ออกแบบมาเฉพาะสำหรับระบบ Event Sourcing ได้จุดประกายการสนทนาที่น่าสนใจภายในชุมชนนักพัฒนาเกี่ยวกับอนาคตของการสอบถามเหตุการณ์
ปรัชญาที่อยู่เบื้องหลังการสร้างภาษาคิวรีใหม่
เมื่อทีม EventSourcingDB เริ่มต้นสร้าง Event Store ของพวกเขา พวกเขาเผชิญกับข้อตัดสินใจพื้นฐาน: นำมาตรฐานการสอบถามที่มีอยู่เช่น SQL มาใช้ หรือสร้างสิ่งใหม่ทั้งหมด พวกเขาเลือกเส้นทางหลัง โดยให้เหตุผลว่า SQL แบบดั้งเดิมมีความไม่ตรงกันเชิงแนวคิดกับสตรีมเหตุการณ์ SQL มีวิวัฒนาการสำหรับตารางเชิงสัมพันธ์ที่มีเร็กคอร์ดที่เปลี่ยนแปลงได้ ในขณะที่ Event Sourcing จัดการกับข้อเท็จจริงที่ไม่เปลี่ยนแปลงซึ่งจัดเรียงตามลำดับเวลา ทีมงานยังตั้งคำถามกับโครงสร้างพื้นฐานของ SQL โดยชี้ให้เห็นว่าการเริ่มคิวรีด้วย SELECT นั้นรู้สึกย้อนแย้งในทางแนวคิด เพราะคุณเริ่มต้นด้วยการกำหนดแหล่งข้อมูลของคุณ
EventQL กลับแนวทางแบบดั้งเดิมนี้ คิวรีจะเริ่มต้นด้วยประโยค FROM สะท้อนให้เห็นว่านักพัฒนาคิดเกี่ยวกับการสำรวจสตรีมเหตุการณ์ตามธรรมชาติอย่างไร คุณเริ่มต้นด้วยการระบุว่ากำลังตรวจสอบเหตุการณ์ใด จากนั้นกรองพวกมัน และสุดท้ายจึงฉายผลลัพธ์ไปยังรูปแบบที่คุณต้องการ การออกแบบที่มีความตั้งใจนี้ขยายไปถึงการเลือกใช้คำศัพท์ - โดยใช้ PROJECT INTO แทนคำศัพท์ทางเทคนิคเช่น map เพื่อเน้นย้ำวัตถุประสงค์เบื้องหลังการดำเนินการมากกว่าแค่การเปลี่ยนแปลงทางกลไก
ในช่วงเวลาที่คุณมีความสามารถในการระบุเครือข่ายของ Projection Downstream อย่างประกาศ性地 คุณสามารถสลับเปลี่ยนพวกมันได้แบบร้อน, ควบคุมเวอร์ชันพวกมัน, และท่องเวลาไปตามมิติเวลาของการควบคุมเวอร์ชันโค้ดและมิติเวลาของข้อมูลอย่างอิสระ - ซึ่งสามารถเป็นสิ่งที่เหลือเชื่อได้
การเปรียบเทียบไวยากรณ์ระหว่าง EventQL กับ SQL
ด้าน | EventQL | SQL แบบดั้งเดิม |
---|---|---|
การเริ่มต้น Query | FROM clause | SELECT clause |
การฉายผลลัพธ์ | PROJECT INTO | SELECT |
โมเดลข้อมูล | Event streams | ตารางเชิงสัมพันธ์ |
การใช้งานหลัก | การวิเคราะห์แบบ ad-hoc, การ debug | การ query ทั่วไป |
การกำหนดชนิดข้อมูล | เข้มงวด ต้องแปลงชนิดข้อมูลอย่างชัดเจน | มักแปลงชนิดข้อมูลโดยอัตโนมัติ |
ปฏิกิริยาจากชุมชนและแนวทางทางเลือก
ชุมชนนักพัฒนาได้ตอบสนองด้วยทั้งความอยากรู้อยากเห็นและการวิเคราะห์อย่างรอบคอบ ผู้แสดงความคิดเห็นบางคนได้เปรียบเทียบกับระบบอื่นในพื้นที่นี้ทันที โดยเฉพาะอย่างยิ่ง Temporal ซึ่งเกี่ยวข้องกับสตรีมเหตุการณ์และการเล่นซ้ำที่กำหนดได้เช่นกัน สิ่งนี้จุดประกายการอภิปรายเกี่ยวกับว่า EventSourcingDB เป็นตัวแทนของแนวทางใหม่โดยพื้นฐานหรือเป็นไปตามรูปแบบที่มีอยู่ด้วยตัวเลือกการนำไปใช้ที่แตกต่างกัน
นักพัฒนาคนอื่นๆ ชี้ไปยังเทคโนโลยีทางเลือกที่จัดการกับความท้าทายที่คล้ายกันจากมุมที่แตกต่าง ระบบเช่น Materialize และ Feldera ถูกกล่าวถึงเป็นตัวอย่างของแนวทางทางคณิตศาสตร์ที่มั่นคงสำหรับการสร้าง Materialized View แบบเรียลไทม์โดยใช้ SQL ระบบเหล่านี้สามารถรักษาโครงสร้างลำดับชั้นที่ซับซ้อนของวิวที่ได้มาซึ่งอัปเดตโดยอัตโนมัติเมื่อข้อมูลพื้นฐานเปลี่ยนแปลง คล้ายกับวิธีที่สเปรดชีตคำนวณใหม่เมื่อเซลล์อินพุตถูกแก้ไข เทคโนโลยีหลักที่อยู่เบื้องหลังระบบเหล่านี้ - DBSP (Delta Binary Synchronization Process) และ Differential Dataflow - เป็นตัวแทนของการวิจัยทางวิชาการที่ตอนนี้กำลังพบการประยุกต์ใช้ในทางปฏิบัติ
การประยุกต์ใช้ในทางปฏิบัติและข้อพิจารณาด้านประสิทธิภาพ
EventQL ตำแหน่งตัวเองเป็นโซลูชันสำหรับกรณีใช้เฉพาะทางมากกว่าที่จะเป็นภาษาคิวรีที่ใช้ได้กับทุกสถานการณ์ มันทำงานได้ดีในสถานการณ์ที่ Projection ที่สร้างไว้ล่วงหน้าจะเป็นการยิงปืนนัดเดียว: การดีบักปัญหาในสภาพแวดล้อมการผลิต การสำรวจข้อมูลประวัติศาสตร์สำหรับการวิเคราะห์ครั้งเดียว หรือการตรวจสอบรูปแบบที่ไม่คาดคิดในช่วงการออกแบบระบบเริ่มต้น ภาษานี้รวมคุณสมบัติเช่นประโยค FROM หลายประโยคสำหรับการรวมสตรีม ความสามารถในการจัดกลุ่มและรวมผล รวมถึงคิวรีย่อยสำหรับการกรองที่ซับซ้อน
อย่างไรก็ตาม ทีม EventSourcingDB มีความโปร่งใสเกี่ยวกับข้อจำกัดด้านประสิทธิภาพ ระบบนี้จะสร้างดัชนีข้อมูลเมตาดาต้าเป็นหลัก เช่น ประเภทเหตุการณ์, เรื่อง, และประทับเวลา แทนที่จะเป็นโครงสร้าง JSON Payload ที่ลึก คิวรีที่กรองบนฟิลด์ Payload ตามอำเภอใจอาจทำให้เกิดการสแกนเต็มบันทึกเหตุการณ์ แนวทางที่ตรงไปตรงมาต่อการแลกเปลี่ยนนี้ได้รับการบันทึกในเชิงบวกในการอภิปรายของชุมชน โดยนักพัฒนาชื่นชมคำแนะนำที่ชัดเจนเกี่ยวกับเวลาที่ควรใช้ EventQL เทียบกับเวลาที่ควรสร้าง Projection ที่ปรับให้เหมาะสมสำหรับข้อมูลที่เข้าถึงบ่อย
กรณีการใช้งาน EventQL
-
แนะนำสำหรับ:
- การแก้ไขปัญหาในระบบ production
- การสำรวจข้อมูลแบบครั้งเดียว
- การวิเคราะห์ขอบเขตความสอดคล้องแบบไดนามิก
- การสืบค้นข้อมูลแบบกำหนดเองเป็นครั้งคราว
-
ไม่แนะนำสำหรับ:
- การอ่านข้อมูลที่มีความถี่สูง
- เส้นทางที่มีความสำคัญต่อเวลาแฝง
- การสืบค้นข้อมูลในระบบ production ที่ทำซ้ำๆ
อนาคตของเครื่องมือสอบถามเหตุการณ์
การนำเสนอ EventQL สะท้อนให้เห็นถึงแนวโน้มที่กว้างขึ้นในการออกแบบฐานข้อมูล: การสร้างเครื่องมือเฉพาะทางสำหรับรูปแบบข้อมูลเฉพาะทาง แทนที่จะพยายามบังคับใช้โซลูชันอเนกประสงค์ ตามที่สมาชิกชุมชนหนึ่งสังเกตเห็น มีศักยภาพอย่างมากสำหรับเครื่องมือในอนาคตที่เชื่อมช่องว่างระหว่างการวิเคราะห์แบบสำรวจและ Materialized View ระดับการผลิต ความสามารถในการระบุเครือข่าย Projection อย่างประกาศ性地ซึ่งสามารถควบคุมเวอร์ชัน, สลับเปลี่ยนแบบร้อน, และท่องเวลาได้ เป็นตัวแทนของทิศทางที่น่าตื่นเต้นสำหรับระบบ Event Sourcing
ในขณะที่ EventQL เป็นตัวแทนของโซลูชันที่มุ่งเน้นสำหรับ EventSourcingDB การอภิปรายของชุมชนชี้ให้เห็นว่าวิวัฒนาการของการสอบถามเหตุการณ์เพิ่งเริ่มต้นเท่านั้น เมื่อมีองค์กรต่างๆ นำรูปแบบ Event Sourcing มาใช้มากขึ้น ความต้องการเครื่องมือสอบถามเฉพาะทางก็มีแนวโน้มที่จะเติบโต ซึ่งอาจนำไปสู่ความพยายามในการกำหนดมาตรฐาน หรือการเกิดขึ้นของแนวทางที่แข่งขันกันหลายวิธี ซึ่งปรับแต่งสำหรับกรณีใช้และข้อกำหนดด้านประสิทธิภาพที่แตกต่างกัน
การพัฒนา EventQL เน้นย้ำถึงวุฒิภาวะที่สำคัญในระบบนิเวศ Event Sourcing แทนที่จะปฏิบัติต่อ Event Store เป็นเพียงบันทึกการเพิ่มข้อมูลแบบง่าย นักพัฒนากำลังสร้างเครื่องมือที่ซับซ้อนเพื่อสกัดข้อมูลเชิงลึกที่มีความหมายจากสตรีมเหตุการณ์ ความก้าวหน้าจากการจัดเก็บพื้นฐานไปสู่ความสามารถในการสอบถามอย่างชาญฉลาดนี้ชี้ให้เห็นว่า Event Sourcing กำลังวิวัฒนาการจากรูปแบบสถาปัตยกรรมเฉพาะกลุ่มไปสู่แนวทางกระแสหลักที่มีเครื่องมือเฉพาะทางของตัวเอง