เพิ่มการรองรับ SQLite WASM เพื่อใช้ DBMS ในเว็บเบราว์เซอร์

SQLite

เป็นระบบการจัดการฐานข้อมูลเชิงสัมพันธ์ที่สอดคล้องกับ ACID ซึ่งมีอยู่ในไลบรารีขนาดเล็กที่เขียนด้วย C

ลอส นักพัฒนา SQLite กำลังพัฒนาโครงการที่จะนำไปใช้ ความสามารถในการรวบรวมห้องสมุดเป็น รหัส WebAssembly ระดับกลาง ซึ่งสามารถเรียกใช้ในเว็บเบราว์เซอร์และเหมาะสำหรับการจัดระเบียบงานกับฐานข้อมูลจากเว็บแอปพลิเคชันในภาษาจาวาสคริปต์

วัตถุประสงค์ ของโครงการ คือการจัดเตรียมลิงก์ JavaScript ที่ใช้งานได้ ที่เหมือนกันในการทำงานกับ SQLite API นักพัฒนาเว็บได้รับอินเทอร์เฟซเชิงวัตถุระดับสูงสำหรับการทำงานกับข้อมูลในรูปแบบของ sql.js หรือ Node.js ห่อ C API ระดับต่ำและ API ตามกลไก Web Worker ที่อนุญาตให้สร้างแบบอะซิงโครนัส controllers ที่ทำงานบนเธรดที่แยกจากกัน

ในการซ่อนความซับซ้อนของเธรดบน API ของ Web Worker ตัวแปรของ อินเทอร์เฟซการเขียนโปรแกรมตามกลไก สัญญา.

ข้อมูลที่เว็บแอปพลิเคชันจัดเก็บในเวอร์ชัน WASM ของ SQLite สามารถอยู่ในเซสชันปัจจุบัน (สูญหายหลังจากโหลดหน้าซ้ำ) หรือคงอยู่ในฝั่งไคลเอ็นต์ (คงอยู่ตลอดเซสชัน)

สำหรับการจัดเก็บถาวร แบ็กเอนด์ได้เตรียมที่จะใส่ข้อมูลบนระบบไฟล์ในเครื่อง โดยใช้ OPFS (Origin-Private FileSystem ซึ่งเป็นส่วนขยายของ File System Access API ซึ่งปัจจุบันมีให้ใช้งานในเบราว์เซอร์ที่ใช้ WebKit และ Chromium เท่านั้น) และที่เก็บข้อมูลในเครื่องของเบราว์เซอร์ตาม window.localStorage และ window.sessionStorage API

เมื่อใช้ localStorage/sessionStorage ข้อมูลจะถูกจับคู่กับที่เก็บคีย์/ค่าที่เหมาะสม ในขณะที่เมื่อใช้ OPFS มีสองตัวเลือก: จำลอง FS เสมือนโดยใช้ WASMFS และการใช้งาน sqlite3_vfs แยกกันซึ่งมีชั้น VFS ที่ใช้ SQLite ใน OPFS .

คอมไพเลอร์ Emscripten ใช้เพื่อสร้าง SQLite ในการแสดง WASM. ผลลัพธ์คือไฟล์ sqlite3.js และ sqlite3.wasm ที่คุณสามารถรวมไว้ในโปรเจ็กต์ JavaScript ของคุณ (ตัวอย่าง HTML และ JavaScript)

ของวัตถุประสงค์เฉพาะ ของโครงการนี้กล่าวถึง:

ให้จัดเตรียม wrapper ที่สมบูรณ์ของคุณสมบัติสำหรับ sqlite3 C API ยกเว้นที่ระบุไว้ในส่วนที่ไม่ใช่เป้าหมาย เท่าที่คุณสมบัติที่เท่าเทียมกันของ WASM กับ C อนุญาต อันที่จริง ระบุ API ต่อไปนี้เป็นอย่างน้อย

  • ผูก sqlite3 API ระดับต่ำที่ใกล้เคียงกับเนทีฟมากที่สุดในแง่ของการใช้งาน
  • OO API ระดับที่สูงกว่า เหมือนกับการใช้งานสไตล์ sql.js และ node.js
  • API ตามผู้ปฏิบัติงานที่สื่อสารกับ API ข้างต้นผ่านข้อความของผู้ปฏิบัติงาน สิ่งนี้ออกแบบมาเพื่อใช้กับเธรดหลัก โดยมี API ระดับล่างติดตั้งอยู่บนเธรดของผู้ปฏิบัติงาน และสื่อสารกับพวกเขาผ่านข้อความของผู้ปฏิบัติงาน
  • ตัวแปรตามสัญญาของ Worker API ที่ซ่อนแง่มุมการสื่อสารระหว่างเธรดของผู้ใช้อย่างสมบูรณ์
  • ในขอบเขตที่เป็นไปได้ สนับสนุนการจัดเก็บข้อมูลถาวรฝั่งไคลเอ็นต์โดยใช้ JS API ที่มีอยู่ ในขณะที่เขียนบทความนี้ ซึ่งรวมถึงซอร์สไฟล์ส่วนตัวของระบบ (OPFS) และที่เก็บข้อมูล (จำกัดมาก) ผ่านแบ็กเอนด์ window.localStorage และ .window.sessionStorage

ส่วน วัตถุประสงค์ที่ไม่เฉพาะเจาะจง:

  • เนื่องจาก WASM เป็นเทคโนโลยีที่เน้นเว็บเป็นหลัก และ UTF-8 เป็นราชาแห่งการเข้ารหัสในขอบเขตนั้น จึงไม่มีแผนรองรับ sqlite3 API ที่เกี่ยวข้องกับ UTF16 ในปัจจุบัน
  • แม้ว่าการรองรับรันไทม์ WASM นอกเบราว์เซอร์นั้นแพร่หลาย แต่ปัจจุบันโปรเจ็กต์นี้ (ปลายปี 2022) เน้นที่เป้าหมายเบราว์เซอร์เท่านั้น แม้ว่ารายละเอียดการใช้งานที่เกี่ยวข้องกับเว็บจะมีความสำคัญเหนือกว่า และส่วนประกอบ JavaScript ของ API มุ่งเน้นไปที่ไคลเอ็นต์เบราว์เซอร์โดยเฉพาะ โมดูล WASM ระดับล่าง "ควร" ทำงานในสภาพแวดล้อมที่ไม่ใช่ WASM บนเว็บ
  • ความเข้ากันได้กับแพลตฟอร์มเก่าหรือเฉพาะ WASM ออกแบบมาสำหรับเว็บสมัยใหม่และต้องการแพลตฟอร์มที่ทันสมัย ในทำนองเดียวกัน ตัวเลือกไลบรารี sqlite3 ที่เลิกใช้แล้วจะถูกลบออกจากอินเทอร์เฟซ WASM ทั้งหมด

เพิ่มโค้ดสำหรับการสนับสนุน WebAssembly ลงในที่เก็บหลักของโปรเจ็กต์แล้ว ไม่เหมือนกับ WebSQL API ซึ่งใช้ SQLite เพราะ WASM SQLite นั้นแยกออกจากเบราว์เซอร์โดยสิ้นเชิงและไม่ส่งผลต่อความปลอดภัย (Google ตัดสินใจเลิกรองรับ WebSQL ใน Chrome หลังจากมีช่องโหว่หลายจุดใน SQLite ที่สามารถโจมตีผ่าน WebSQL เพื่อโจมตี Navigator ).

ในที่สุดถ้าคุณเป็น สนใจเรียนรู้เพิ่มเติมคุณสามารถตรวจสอบรายละเอียด ในลิงค์ต่อไปนี้.


แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. รับผิดชอบข้อมูล: AB Internet Networks 2008 SL
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา