EventQL: ภาษาคิวรีที่สร้างขึ้นเฉพาะสำหรับ Event Sourcing ก่อให้เกิดการอภิปรายในหมู่นักพัฒนา

ทีมชุมชน BigGo
EventQL: ภาษาคิวรีที่สร้างขึ้นเฉพาะสำหรับ Event Sourcing ก่อให้เกิดการอภิปรายในหมู่นักพัฒนา

ในโลกของการพัฒนาซอฟต์แวร์ 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 กำลังวิวัฒนาการจากรูปแบบสถาปัตยกรรมเฉพาะกลุ่มไปสู่แนวทางกระแสหลักที่มีเครื่องมือเฉพาะทางของตัวเอง

อ้างอิง: Designing EventQL, an Event Query Language