Turso สตาร์ตอัพด้านฐานข้อมูล ผู้ดูแล โครงการ libSQL ที่เป็น fork ของ sqlite เพื่อแก้ปัญหา SQLite ไม่รับแพตช์ภายนอก ประกาศโครงการ Limbo ฐานข้อมูลใหม่เขียนด้วย Rust แต่ยังเข้ากันได้กับ SQLite
โครงการนี้เริ่มจากโครงการทดลองของ Pekka Enberg ทีมงานของ Turso โดยทดลองส่วนตัวอยู่ระยะหนึ่ง แม้ไม่ได้โปรโมทแต่กลับได้รับความสนใจ GitHub Star เกินพันและมีผู้ส่งแพตช์หลายสิบคน
ความยากของการพัฒนาคือ ชุดทดสอบ SQLite นั้นไม่เปิดให้คนภายนอก และต้องเสียค่าไลเซนส์เพื่อใช้งาน ทาง Turso เลือกใช้ Deterministic Simulation Testing (DST) เพื่อจำลองการทำงานและตรวจสอบว่าพฤติกรรมเหมือนกับ SQLite ดั้งเดิม
SQLite ฐานข้อมูลขนาดเล็กแบบทำงานเครื่องเดียวกับแอปพลิเคชั่น ออกเวอร์ชั่น 3.47.0 ปรับแก้บั๊กเล็กน้อยจำนวนมาก แต่เพิ่มฟีเจอร์สำคัญคือคำสั่ง sqlite3_rsync
คำสั่ง rsync
เวอร์ชั่นพิเศษที่เข้าใจ transaction ของฐานข้อมูลเพื่อให้สามารถซิงก์ฐานข้อมูลไปยังเครื่องสำรองได้
คำสั่ง rsync
นั้นอาศัยการเทียบค่าแฮชข้อมูลทีละบล็อค หากพบว่ามีบล็อคใดที่ปลายทางมีอยู่แล้วก็ไม่ต้องส่งข้อมูลไปใหม่ ทำให้การซิงก์ไฟล์ขนาดใหญ่แต่มีความเปลี่ยนแปลงเล็กน้อย (เช่นฐานข้อมูลที่อาจจะเก็บข้อมูลมานาน แต่แต่ละวันกลับมีการเปลี่ยนแปลงไม่มากนัก) ได้เปรียบมาก อัตราการส่งข้อมูลจะลดลงมาก หากไม่มีความเปลี่ยนแปลงเลยจะใช้แบนวิดท์เพียง 0.5% ของข้อมูลเต็มเท่านั้น
Cloudflare เปิดบริการ SQLite-in-DO บริการฐานข้อมูลตัวที่สองของบริษัท ถัดจาก D1 ที่ใช้ SQLite เหมือนกัน แต่รอบนี้สร้างบริการขึ้นจาก Durable Objects (DO) ที่ปกติแล้วใช้เป็นสตอเรจเก็บค่า key/value เท่านั้น
ตัว SQLite จะรันบนเซิร์ฟเวอร์ DO โดยตรง ไลบรารีที่เรียกใช้ก็ออกแบบให้เรียกแบบ synchronous โดย Cloudflare พยายามออปติไมซ์ latency ในการเรียกใช้งานให้ต่ำ
- Read more about Cloudflare เปิดบริการ SQLite-in-DO ฐานข้อมูลสำหรับ Workers
- Log in or register to post comments
D. Richard Hipp ผู้สร้าง SQLite ไปออกรายการ The Stack Overflow Podcast เล่าถึงช่วงเริ่มต้นของโครงการ โดยระบุว่าเขาสร้าง sqlite เพราะไปรับงานแล้วมีปัญหาว่าฐานข้อมูล Informix ไม่รันตอนเครื่องบูต ทำให้แอปมีปัญหาแม้เขาจะไม่ได้เป็นคนรับผิดชอบฐานข้อมูลก็ตาม สุดท้ายจึงตัดสินใจสร้างฐานข้อมูลเพื่อใช้งานในโครงการของตัวเองเพราะคิดว่าไม่น่ายากมาก โดยตอนนั้นเขาไม่เคยเรียนวิชาฐานข้อมูลมาก่อน เพียงแค่ใช้ฐานข้อมูลเวลารับทำงานโปรเจคต่างๆ เท่านั้น
SQLite โครงการฐานข้อมูล SQL ขนาดเล็กออกเวอร์ชั่น 3.45.0 เวอร์ชั่นแรกของปีนี้ โดยมีความเปลี่ยนแปลงสำคัญคือการเปลี่ยนโครงสร้างข้อมูลของฟิลด์แบบ JSON ให้เป็นไบนารี JSONB เพื่อเร่งประสิทธิภาพการทำงาน
การเปลี่ยนแปลงครั้งนี้ทำให้การประมวลผล JSON ทำได้เร็วขึ้นเพราะไม่ต้อง parse ข้อมูลจากข้อความโดยตรงทุกรอบที่ต้องการประมวลผลอีกต่อไป การทำงานยังคงแทบเหมือนเดิม โดยฟังก์ชั่นใน SQL ทั้งหมดที่เคยรองรับ JSON เดิมจะรองรับ JSONB ด้วย และแทบทุกฟังก์ชั่นที่คืนค่าเป็น JSON จะมีฟังก์ชั่นเทียบเคียงกันแต่คืนค่าเป็น JSONB
SQLite นับเป็นระบบฐานข้อมูล SQL ที่ได้รับความนิยมสูงสุดตัวหนึ่งโดยความได้เปรียบคือขนาดเล็ก แต่ข้อจำกัดคือการเขียนข้อมูลลง SQLite นั้นไม่รองรับการเขียนแบบขนาน ทำให้มันไม่เหมาะกับโหลดที่ต้องการเขียนข้อมูลเยอะมากๆ ตอนนี้ทาง SQLite ก็ปล่อยเวอร์ชั่นทดสอบ HC-Tree ที่ประสิทธิภาพดีขึ้นเมื่อมีโปรเซสเข้ามาเขียนข้อมูลพร้อมกันหลายตัว
มาตรฐาน WebSQL เคยได้รับความสนใจช่วงสิบปีที่แล้ว ที่หลายคนอยากให้เบราว์เซอร์มีฐานข้อมูล SQL ใช้งานได้ในตัวโดยไม่ต้องเชื่อมต่อเซิร์ฟเวอร์ แต่มาตรฐานนี้ก็ไม่ได้รับความนิยมนักทำให้เบราว์เซอร์หยุดซัพพอร์ตกันไปโดย Chrome เองก็ประกาศเตรียมถอด WebSQL ตั้งแต่ Chrome 105 เมื่อปีที่แล้วแต่ยังสามารถเปิด policy กลับมาใช้งานได้ ล่าสุดกูเกิลโชว์ให้ดูว่านักพัฒนาที่ต้องการใช้ SQL ในเบราว์เซอร์ตอนนี้สามารถใช้งานได้ด้วยเทคโนโลยี WebAssembly และ OPFS
ทีมงาน Performance Lab ของ Wordpress เริ่มปล่อยปลั๊กอินสำหรับการย้ายฐานข้อมูลจาก MySQL ไปยัง SQLite หลังจากเสนอฟีเจอร์นี้ตั้งแต่เดือนกันยายนที่ผ่านมาและได้รับเสียงสนับสนุนค่อนข้างมาก
การทดสอบฟีเจอร์นี้ต้องติดตั้ง ปลั๊กอิน Performance Lab เวอร์ชั่น 1.8 ขึ้นไป และเปิดใช้งาน SQLite จากในเมนูอีกที เมื่อเปิดใช้งาน ตัวปลั๊กอินจะคอนฟิกระบบให้ไปใช้ SQLite โดยอัตโนมัติ แต่ข้อมูลเช่น โพสต่างๆ หรือรายชื่อผู้ใช้จะไม่ถูกย้ายไปด้วย โดยทีมงานระบุว่าหากฟีเจอร์นี้ได้รวมเข้าไปใน Wordpress จริงก็จะเป็นฟีเจอร์ที่ผู้ใช้ต้องเลือกฐานข้อมูลแต่แรก แต่อาจจะมีปลั๊กอินแยกช่วยย้ายข้อมูลอีกทีหนึ่ง
- Read more about Wordpress ชวนผู้สนใจทดสอบใช้ SQLite เป็นฐานข้อมูล
- 5 comments
- Log in or register to post comments
Cloudflare เพิ่มบริการคลาวด์ตัวใหม่เป็นฐานข้อมูลแบบ SQL ในชื่อ D1 พัฒนาต่อมาจาก SQLite หลังจากก่อนหน้านี้บริการคลาวด์ของ Cloudflare มีเฉพาะฐานข้อมูลแบบ key-value เท่านั้น
สำหรับนักพัฒนา ตัว D1 จะกลายเป็นออปเจกต์ในอาร์กิวเมนต์ของฟังก์ชั่นใน Worker ตัว API สามารถคิวรีได้ทีละ statement หรือจะแพ็กเป็นอาเรย์ทีละหลายๆ statement เพื่อลดเวลาหน่วงที่ต้องติดต่อกับฐานข้อมูลก็ได้ และฐานข้อมูลจะกระจายไปตามเครือข่ายของ Cloudflare ให้เอง ทำให้กสารอ่านข้อมูลเร็วเพราะอยู่ใกล้กับ Worker ที่รันแอปพลิเคชั่น และตัวฐานข้อมูลจะสำรองข้อมูลลงสตอเรจ R2 เป็นช่วงๆ โดยอัตโนมัติ
- Read more about Cloudflare เปิดบริการ D1 ฐานข้อมูล SQL พัฒนาจาก SQLite
- Log in or register to post comments
Cloudflare ทยอยเปิดตัวของใหม่ที่จะเข้ามาทำงานร่วมกับ Cloudflare Workers อย่างต่อเนื่อง ที่ผ่านมามี KV ระบบเก็บข้อมูลแบบ key-value, Durable Objects บริการเก็บสถานะของ Workers และ R2 บริการอ็อบเจ็กสตอเรจแบบไม่คิดค่านำข้อมูลออก
ล่าสุด Cloudflare เปิดตัว D1 ฐานข้อมูลแบบ SQL ตัวแรกของบริษัท เบื้องหลังเป็น SQLite โดย Cloudflare ระบุว่าสามารถสร้างแอพได้แทบจะไร้ขีดจำกัด ตั้งแต่เว็บอีคอมเมิร์ซไปจนถึงระบบ CRM
SQLite ระบบฐานข้อมูลขนาดเล็กสำหรับใช้กับไฟล์ในเครื่องเป็นหลัก ออกเวอร์ชั่น 3.38.0 โดยฟีเจอร์ที่สำคัญที่สุดคือการรองรับ JSON เป็นค่ามาตรฐานแล้ว
ส่วนขยาย JSON1 ใน SQLite เพิ่มเข้ามาในโค้ด ตั้งแต่เวอร์ชั่น 3.9.3 ซึ่งออกมาตั้งแต่ปี 2016 แต่ปิดการใช้งานเป็นค่าเริ่มต้น ผู้ที่ต้องการใช้งานต้องคอมไพล์ SQLite ด้วยตัวเอง ในเวอร์ชั่น 3.38.0 นี้จะเปลี่ยนแนวทางคือผู้ที่ต้องการปิด JSON1 จะต้องเพิ่มออปชั่นขณะคอมไพล์เอง
- Read more about SQLite เปิดใช้งาน JSON เป็นค่ามาตรฐาน
- Log in or register to post comments
โครงการฐานข้อมูลแบบฝังตัวในซอฟต์แวร์ SQLite ออกเวอร์ชั่น 3.37.0 ที่แม้จะเป็นอัพเดตย่อยแต่มีฟีเจอร์สำคัญเพิ่มเข้ามาคือการรองรับตารางแบบ STRICT ที่ทำให้ผู้สร้างตารางกำหนดชนิดข้อมูลได้จริงๆ
พฤติกรรมของ SQLite ก่อนหน้านี้แม้คอลัมน์ในฐานข้อมูลจะกำหนดชนิดข้อมูลเอาไว้ แต่ตัว SQLite จะไม่ได้บังคับจริงๆ หากชนิดข้อมูลที่ใส่เข้ามาไม่ตรงกันก็จะพยายามแปลงข้อมูลให้ เช่น หากคอลัมน์เป็นเลขจำนวนเต็ม (INT) แต่ใส่ข้อความ "123" ก็จะพยายามแปลงเป็นตัวเลข 123 ให้เอง แม้จะสะดวก แต่เมื่อใส่ข้อมูลที่แปลงเป็นตัวเลขไม่ได้ เช่น "xyz" ตัว SQLite ก็จะยอมใส่ข้อมูลเป็นสตริงลงไปในคอลัมน์แม้จะกำหนดชนิดข้อมูลเป็นตัวเลขก็ตาม