SQLite ซึ่งเป็นเอนจินฐานข้อมูลแบบฝังตัวที่ได้รับความนิยม ได้รับความสามารถใหม่ที่ทรงพลังด้วยส่วนขยาย SQLite-JS ที่นำฟังก์ชันการทำงานของ JavaScript มาสู่เลเยอร์ฐานข้อมูลโดยตรง ส่วนขยายนี้ช่วยให้นักพัฒนาสามารถสร้างฟังก์ชันที่กำหนดเอง, ฟังก์ชันรวม, ฟังก์ชันหน้าต่าง และลำดับการเรียงโดยใช้ JavaScript ซึ่งขยายความสามารถของ SQLite อย่างมีนัยสำคัญ
QuickJS ขับเคลื่อนส่วนขยาย
ส่วนขยาย SQLite-JS ใช้ QuickJS เป็นเอนจิน JavaScript ซึ่งเป็นทางเลือกที่มีขนาดเล็กกว่าเอนจินขนาดใหญ่อย่าง V8 ตามที่ผู้แสดงความคิดเห็นรายหนึ่งได้กล่าวไว้ว่า QuickJS เกิดขึ้นเมื่อไม่กี่ปีที่ผ่านมา และเป็นรันไทม์ JavaScript แบบฝังตัวที่เทียบได้กับ Lua ในแง่ของความเบา ในขณะที่ V8 มีขนาดใหญ่กว่าแต่เร็วกว่า การเลือกนี้เหมาะสมสำหรับ SQLite ซึ่งเป็นที่รู้จักในด้านขนาดที่เล็กและการใช้งานแบบฝังตัว
QuickJS ออกมาเมื่อไม่กี่ปีที่แล้ว และมันน่าตื่นเต้นมากในตอนนั้น เป็น JS แบบฝังตัวสไตล์ Lua ซึ่งแตกต่างจาก V8 ที่เป็นสัตว์ร้ายแต่เร็วมากและเทียบได้กับ LuaJIT มากกว่า ซึ่งหมายความว่าคุณสามารถหยุดใช้ Lua สำหรับการเขียนสคริปต์และเริ่มใช้ JS แทน
การเลือก QuickJS แสดงถึงความสมดุลระหว่างการเพิ่มความสามารถในการเขียนสคริปต์ที่ทรงพลังในขณะที่ยังคงรักษาชื่อเสียงของ SQLite ในด้านความเบาและความสามารถในการพกพาข้ามแพลตฟอร์ม
ประโยชน์ด้านประสิทธิภาพของฟังก์ชันในฐานข้อมูล
หนึ่งในข้อได้เปรียบหลักของ SQLite-JS คือการปรับปรุงประสิทธิภาพที่มอบให้โดยการเก็บการประมวลผลข้อมูลไว้ใกล้กับข้อมูลเอง แทนที่จะดึงชุดข้อมูลขนาดใหญ่และประมวลผลในโค้ดแอปพลิเคชัน นักพัฒนาสามารถผลักดันตรรกะโดยตรงเข้าไปในเลเยอร์ฐานข้อมูล
สมาชิกในชุมชนคนหนึ่งได้เน้นย้ำประโยชน์นี้ โดยอธิบายว่าฟังก์ชันฐานข้อมูลมีคุณค่าอย่างยิ่งเมื่อคุณจำเป็นต้องดึงข้อมูลจำนวนมากออกจากฐานข้อมูล ตัวอย่างเช่น การกรองที่อยู่ IPv6 จากบันทึกเซสชันหลายล้านรายการสามารถทำได้อย่างมีประสิทธิภาพภายในฐานข้อมูล แทนที่จะโอนข้อมูลทั้งหมดนั้นไปยังโค้ดแอปพลิเคชัน แม้ว่าการปรับปรุงประสิทธิภาพนี้จะมีความสำคัญเป็นพิเศษเมื่อฐานข้อมูลทำงานบนเครื่องแยกต่างหาก แม้แต่การใช้งาน SQLite ในเครื่องเดียวกันก็สามารถได้รับประโยชน์จากการลดการดึงข้อมูล
การเปรียบเทียบกับระบบส่วนขยายฐานข้อมูลอื่น ๆ
ส่วนขยาย SQLite-JS มีการเปรียบเทียบกับระบบที่คล้ายกันสำหรับแพลตฟอร์มฐานข้อมูลอื่น ๆ ผู้แสดงความคิดเห็นรายหนึ่งเปรียบเทียบกับ PLV8 ซึ่งนำความสามารถของ JavaScript มาสู่ PostgreSQL ความคล้ายคลึงนี้เน้นถึงแนวโน้มที่กว้างขึ้นของการนำภาษาสคริปต์เข้ามาในสภาพแวดล้อมฐานข้อมูลเพื่อเพิ่มขีดความสามารถ
ส่วนขยายนี้ยังแก้ไขข้อจำกัดที่ SQLite มีเมื่อเทียบกับระบบฐานข้อมูลอื่น ๆ ไม่เหมือนกับ PL/SQL ของ Oracle, PL/pgSQL ของ PostgreSQL หรือ T-SQL ของ SQL Server, SQLite แต่เดิมขาดภาษาโฮสต์สำหรับการเขียนโค้ดเชิงกระบวนการที่ทำงานใกล้กับข้อมูล SQLite-JS เติมเต็มช่องว่างนี้โดยการให้ JavaScript เป็นภาษาโฮสต์นั้น
การประยุกต์ใช้งานจริงและกรณีการใช้งาน
ส่วนขยายนี้ช่วยให้สามารถใช้งานจริงหลายอย่างที่ยากจะดำเนินการใน SQLite มาตรฐาน ซึ่งรวมถึงฟังก์ชันจัดการสตริงที่กำหนดเอง, การคำนวณทางสถิติ และอัลกอริทึมการเรียงลำดับเฉพาะทาง ตัวอย่างเช่น นักพัฒนาสามารถสร้างฟังก์ชันเพื่อแยกโดเมนจากที่อยู่อีเมล, คำนวณค่าเบี่ยงเบนมาตรฐาน หรือใช้ลำดับการเรียงแบบธรรมชาติ
ความสามารถในการสร้างฟังก์ชันหน้าต่างมีประโยชน์อย่างยิ่ง ช่วยให้สามารถคำนวณเช่นค่าเฉลี่ยเคลื่อนที่หรืออันดับเปอร์เซ็นไทล์ภายในหน้าต่างข้อมูลที่กำหนด ความสามารถเหล่านี้ทำให้ SQLite ใกล้เคียงกับฟังก์ชันการทำงานที่นำเสนอโดยระบบฐานข้อมูลที่ใหญ่กว่าในขณะที่ยังคงรักษาลักษณะที่เบาของมัน
คุณสมบัติของส่วนขยาย SQLite-JS:
- ฟังก์ชันสเกลาร์: ประมวลผลแถวข้อมูลแต่ละแถวและส่งคืนค่าเดียว
- ฟังก์ชันการรวมข้อมูล: ประมวลผลหลายแถวและส่งคืนผลลัพธ์ที่รวมกัน
- ฟังก์ชันวินโดว์: เข้าถึงชุดข้อมูลทั้งหมดภายในหน้าต่างที่กำหนด
- ลำดับการเรียงข้อมูล: กำหนดลำดับการเรียงที่กำหนดเองสำหรับค่าข้อความ
- การประเมินผล JavaScript: ประเมินโค้ด JavaScript โดยตรงภายใน SQLite
แพลตฟอร์มที่รองรับ:
- Linux (x86 และ ARM)
- macOS (x86 และ ARM)
- Windows (x86)
เครื่องมือ JavaScript:
- QuickJS - รันไทม์ JavaScript แบบฝังตัวที่มีน้ำหนักเบา
ความกังวลเกี่ยวกับความซับซ้อนและความปลอดภัยของประเภท
สมาชิกบางคนในชุมชนแสดงความกังวลเกี่ยวกับการเพิ่มรันไทม์ภาษาเต็มรูปแบบให้กับ SQLite ผู้แสดงความคิดเห็นรายหนึ่งระบุว่าจากมุมมองด้านประสิทธิภาพและการดีบัก พวกเขาจะชอบการเพิ่มฟังก์ชันดั้งเดิมโดยตรงมากกว่าการแนะนำรันไทม์ JavaScript นอกจากนี้ยังมีความกังวลเกี่ยวกับวิธีที่โค้ดที่ไม่ใช่ SQL อาจส่งผลต่อการจัดการธุรกรรมและความสามารถในการคาดการณ์โดยรวมของการดำเนินการฐานข้อมูล
ระบบนิเวศ TypeScript เป็นอีกหนึ่งประเด็นที่มีการหารือ โดยบางคนสงสัยเกี่ยวกับความปลอดภัยของประเภทในฟังก์ชันฐานข้อมูล แม้ว่า TypeScript สามารถคอมไพล์เป็น JavaScript ก่อนโหลดเข้าฐานข้อมูล แต่ลักษณะแบบไดนามิกของการดำเนินการฐานข้อมูลหมายความว่าความปลอดภัยของประเภทแบบเต็มรูปแบบจะเป็นเรื่องท้าทายในการนำไปใช้
SQLite-JS แสดงถึงวิวัฒนาการที่น่าสนใจสำหรับ SQLite นำความยืดหยุ่นของ JavaScript มาสู่เอนจินฐานข้อมูลที่อเนกประสงค์อยู่แล้ว แม้ว่าจะแนะนำความซับซ้อนบางอย่าง แต่ก็เปิดโอกาสใหม่ ๆ สำหรับนักพัฒนาที่ต้องการใช้การประมวลผลข้อมูลที่ซับซ้อนโดยตรงภายในฐานข้อมูล SQLite ของพวกเขา
อ้างอิง: SQLite-JS Extension