23 คะแนน โดย GN⁺ 2024-12-31 | 7 ความคิดเห็น | แชร์ทาง WhatsApp
  • SQLite คือฐานข้อมูลที่ถูกแจกจ่ายและใช้งานมากที่สุด

    • มีฐานข้อมูล SQLite ที่ถูกใช้งานอยู่มากกว่า 1 ล้านล้านชุด และมีผู้ดูแลรักษาเพียงสามคน
    • ไม่รับการมีส่วนร่วมจากภายนอก
  • SQLite ถูกใช้งานมากกว่าระบบฐานข้อมูลอื่นทั้งหมดรวมกัน

    • มีสำเนาของ SQLite อยู่หลายพันล้านชุด และมีอยู่แทบทุกที่
  • SQLite เป็นหนึ่งในโมดูลซอฟต์แวร์ที่ถูกแจกจ่ายมากที่สุด

  • Hwaci คือบริษัทที่พัฒนา SQLite และยังสนใจด้านดนตรีด้วย

    โฆษณา
  • SQLite เริ่มต้นขึ้นบนเรือรบของสหรัฐฯ

    • D. Richard Hipp (DRH) กำลังพัฒนาซอฟต์แวร์สำหรับเรือพิฆาตของกองทัพเรือชื่อ USS Oscar Austin
    • ปัญหาคือซอฟต์แวร์เดิมจะหยุดทำงานทุกครั้งที่เซิร์ฟเวอร์ล่ม
    • DRH จึงคิดฐานข้อมูลที่ทำงานได้โดยไม่ต้องพึ่งเซิร์ฟเวอร์
  • SQLite ไม่ใช่โอเพนซอร์สในความหมายทางกฎหมาย

    • คำว่าโอเพนซอร์สต้องมีนิยามเฉพาะและต้องใช้ไลเซนส์ที่ได้รับการรับรองจาก OSI
    • แต่ SQLite อยู่ใน public domain ซึ่งมีข้อจำกัดน้อยกว่าไลเซนส์โอเพนซอร์ส
  • ไม่รับการมีส่วนร่วมจากภายนอก

    • มีเพียงผู้ที่ได้รับเชิญเท่านั้นที่สามารถมีส่วนร่วมได้ และผลงานที่ส่งเข้ามาต้องอุทิศให้เป็น public domain
  • โค้ดทดสอบของ SQLite

    โฆษณา
    • SQLite มีโค้ดทดสอบมากกว่า 600 บรรทัดต่อโค้ดจริง 1 บรรทัด
    • การทดสอบครอบคลุมทุก branch ของไลบรารี 100%
  • การทดสอบบางส่วนของ SQLite เป็นแบบ proprietary

    • ชุดทดสอบชื่อ TH3 เป็น proprietary และหากต้องการเข้าถึงต้องเข้าร่วม SQLite Consortium
  • โมเดลธุรกิจของ SQLite

    • สร้างรายได้จากการสนับสนุนแบบเสียเงิน บริการบำรุงรักษา สมาชิก consortium และส่วนขยายเชิงพาณิชย์
  • SQLite มีจรรยาบรรณแทนที่จะเป็น code of conduct

    โฆษณา
  • SQLite เร็วมาก และในบางกรณีใช้งานเร็วกว่าไฟล์ซิสเต็ม 35%

  • SQLite ใช้โมเดลผู้เขียนเพียงรายเดียว

    • ไม่อนุญาตให้มีผู้เขียนหลายรายพร้อมกัน
  • ความแตกต่างจากฐานข้อมูลอื่น

    • โดยค่าเริ่มต้นจะใช้โหมด rollback journal และ foreign key จะถูกปิดไว้
    • ใช้ weak typing และ strong typing เป็นตัวเลือก
  • การที่ SQLite ไม่มี type ที่เคร่งครัดอาจทำให้ใช้งานไม่สะดวก

    • สามารถแทรกข้อมูลได้โดยไม่มีข้อจำกัดด้าน type
    โฆษณา
  • SQLite ให้ความสำคัญกับความเข้ากันได้ย้อนหลังอย่างมาก

    • SQLite 3 ทุกเวอร์ชันสามารถอ่านและเขียนไฟล์ฐานข้อมูลจากเวอร์ชันแรกเริ่มได้
  • DRH ผู้เขียน SQLite มองว่าระบบควบคุมเวอร์ชันที่มีอยู่ไม่เหมาะสม จึงพัฒนา Fossil ขึ้นมา

  • DRH เขียนโค้ด B-Tree บนเครื่องบินโดยอิงอัลกอริทึมจากหนังสือ TAOCP

  • การออกเสียง SQLite ที่แนะนำคือ "Ess-Cue-El-Lite" แต่ไม่มีคู่มือทางการ

7 ความคิดเห็น

 
dalinaum 2024-12-31

SQLite ไม่ใช่ฐานข้อมูลที่เร็วอย่างที่คิด ตอนนี้ MongoDB Realm ซึ่งเลิกซัพพอร์ตไปแล้วกลับเร็วกว่ามาก ดูเหมือนว่าสำหรับผู้คนแล้ว ความเร็วไม่ได้เป็นปัจจัยสำคัญในการเลือกมากขนาดนั้น

 
dalinaum 2025-01-01

มีคนถามว่าทำไม Realm ถึงเร็วและขอหลักฐาน แต่ดูเหมือนว่า MongoDB จะลบบทความนั้นไปตอนยุติการสนับสนุนแล้ว

ดังนั้นในฐานะคนที่เคยทำงานอยู่ที่นั่นช่วงหนึ่ง ผมเลยอยากอธิบายเหตุผลเชิงเทคนิคเท่าที่จำได้ คิดว่าข้อได้เปรียบที่ใหญ่ที่สุดคือ Realm ใช้หน่วยความจำน้อยกว่า SQLite และมีอัตรา cache hit สูงกว่า

โดยพื้นฐานแล้ว Realm จะเลือกขนาดพื้นที่จัดเก็บในหน่วยความจำตามขนาดที่ใช้งานจริง ดังนั้นถึงผู้ใช้จะเลือกชนิดข้อมูลที่มีขนาดใหญ่ ก็มักจะ serialize ให้เป็นขนาดเล็กระดับไม่กี่บิต และจะทำ conversion ก็ต่อเมื่อผู้ใช้เขียนข้อมูลที่ใหญ่กว่านั้นจริง ๆ

Realm จะจัดเก็บข้อมูลชนิดเดียวกันรวมไว้ด้วยกันและวางติดกัน ผู้ใช้มักไม่ได้เข้าถึงข้อมูลทั้งหมดในตาราง แต่เข้าถึงข้อมูลบางส่วนแบบต่อเนื่อง เนื่องจากมีการเข้ารหัสให้มีขนาดเล็กอย่างที่กล่าวไปก่อนหน้านี้ จำนวนข้อมูลที่หาเจอจาก cache ได้ในครั้งเดียวจึงมากขึ้นอย่างมาก

Realm ไม่ได้ hydrate เป็นอ็อบเจ็กต์ POJO แต่ใช้รูปแบบที่ส่งข้อมูลออกมาจาก getter และ setter เมื่อจำเป็น สำหรับกรณีของ Java นั้นมีการปรับแต่งถึงระดับ bytecode เหตุผลที่ชนิดข้อมูลอย่าง Protobuf ถูกใช้ในแอป Facebook ของ Meta ในตอนนั้น ก็เพราะกระบวนการ hydrate นี้เป็นจุดด้อยด้านประสิทธิภาพอย่างมาก และการเข้าถึงเฉพาะข้อมูลที่จำเป็นมีข้อดีมากกว่า

Realm เร็วกว่า SQLite มากในแทบทุกสถานการณ์ แต่ผมคิดว่านี่ไม่ใช่ปัจจัยใหญ่ในตลาด

ถ้าจำไม่ผิด คู่แข่งรายใหญ่ที่สุดของ Realm คือ Parse ที่ Facebook ทำขึ้นมา หลังจากนั้นคู่แข่งก็กลายเป็น Firebase ของ Google ทั้งสองอย่างนี้ไม่ใช่ฐานข้อมูลมือถือแบบ local แต่เป็นบริการที่ให้เก็บข้อมูลไว้บนระบบระยะไกลได้อย่างง่ายดาย ฟังดูอาจสงสัยว่าทำไมสองตัวนี้ถึงเป็นคู่แข่งของ Realm ได้ แต่ดูเหมือนว่าผู้ใช้จริง ๆ แค่ต้องการเก็บข้อมูลไว้ที่ไหนสักแห่ง และความเร็วไม่ได้สำคัญมากนัก

หลังจากนั้น Ericsson ก็เข้ามาลงทุน และขอบเขตของ Realm ก็แคบลง Ericsson มองว่า Realm มีส่วนแบ่งบน iOS อยู่พอสมควรแล้ว จึงไม่เข้าใจว่าจะพัฒนาฟีเจอร์เพิ่มไปทำไม และพวกเขาให้คุณค่ากับ Realm ในฐานะโซลูชันสำหรับการซิงก์ข้อมูลมากกว่า หลังจากนั้น Realm ก็ถูกรวมเข้ากับ MongoDB.

 
aer0700 2024-12-31

เหมือนว่า 80% ของเหตุผลที่เลือกใช้ SQLite น่าจะเป็นเพราะมันจัดการได้ง่ายครับ

 
dalinaum 2025-01-01

ผมคิดว่านี่ก็เป็นหนึ่งในเหตุผลสำคัญเช่นกัน Realm ให้รูปแบบการใช้งานที่อิงกับ thread-local มีการอัปเดตอัตโนมัติ และบอกว่าหากคิวรีใหม่จากเธรดอื่นก็สามารถส่งต่อข้อมูลเดียวกันได้ด้วยต้นทุนที่ต่ำมาก อีกทั้งยังแนะนำว่าไม่ควรส่งข้อมูลข้ามไปยังเธรดอื่น แต่เรื่องพวกนี้อธิบายให้เข้าใจได้ง่ายไม่ใช่เรื่องง่ายนัก

 
sanggi 2024-12-31

ดูเหมือนว่า sqlite จะถูกใช้งานในที่ที่หลากหลายมากจริง ๆ!

 
GN⁺ 2024-12-31
ความคิดเห็นบน Hacker News
  • มีความเห็นว่า OSI ไม่ใช่มาตรฐานของโอเพนซอร์สเสมอไป คำนิยามโอเพนซอร์สของ OSI มีประโยชน์ แต่ก็มีคำวิจารณ์และข้อถกเถียง การบอกว่า SQLite ไม่ใช่โอเพนซอร์สในทางกฎหมายเป็นข้ออ้างที่ไม่ถูกต้อง

    • การยึดติดกับการรับรองของ OSI ไม่ใช่เรื่องพึงประสงค์ รายการไลเซนส์ที่ OSI รับรองสะท้อนเพียงประวัติศาสตร์เชิงปฏิบัติและการเมือง
    • มีข้อถกเถียงว่า SQLite เป็นโอเพนซอร์สหรือไม่ การอุทิศให้เป็นสาธารณสมบัติไม่ใช่ไลเซนส์ จึงไม่ตรงตาม OSD แต่กลับเปิดกว้างยิ่งกว่า
  • บล็อกนี้ดูเหมือนพยายามเรียกยอดเข้าชมและการมีส่วนร่วมด้วยการนำประเด็นเก่า ๆ ที่ถูกใช้ซ้ำเกี่ยวกับหัวข้อยอดนิยมมาเล่าใหม่

    • โพสต์ก่อนหน้าของบล็อกขาดความลึกเชิงเทคนิคและมีเนื้อหาเกินจริงอยู่มาก
  • SQLite มีหลักจริยธรรม (CoE) ไม่ใช่แนวปฏิบัติด้านพฤติกรรม (CoC) โดย CoC มักถูกใช้เป็นเครื่องมือควบคุมพฤติกรรมของผู้มีส่วนร่วมภายนอก ส่วน CoE คือการประกาศพฤติกรรมที่นักพัฒนา SQLite ตั้งใจจะแสดงต่อผู้อื่น

  • มีความสับสนเรื่องการออกเสียง SQLite แม้จะบอกว่าออกเสียงว่า "Ess-Cue-El-Lite" แต่ก็มีคนออกเสียงว่า "S-Q-L-ite" เช่นกัน

  • SQLite รองรับ strict tables แบบเลือกใช้ได้ สามารถบังคับชนิดข้อมูลด้วย CREATE TABLE name (stuff TEXT) STRICT

  • SQLite ไม่ได้เป็นแค่ฐานข้อมูล SQL แต่ยังใช้เป็นฐานข้อมูล NoSQL ได้ด้วย วิธีเก็บข้อมูลโดยใช้คอลัมน์ JSON มีประโยชน์มาก

  • มีคนเล่าประสบการณ์ทำโปรเจกต์ร่วมกับ Richard Hipp โดยเขามีรายได้ที่มั่นคงจากสัญญาการสนับสนุน

  • ในหนึ่งรีลีสของ SQLite ประสิทธิภาพดีขึ้น 50% จากการทำ micro-optimization จำนวนมาก

  • มีการใช้ SQLite สำหรับทำต้นแบบอย่างรวดเร็วและเก็บ log dump แต่เมื่ออยากได้ multi-writer ก็จะเริ่มลำบาก นี่เป็นหนึ่งในเหตุผลหลักที่ทำให้ต้องเลิกใช้ SQLite

  • SQLite ใช้โมเดลผู้เขียนเพียงคนเดียว ส่วน Redis ก็ใช้โมเดล single-thread เช่นกัน

  • หนึ่งในเรื่องน่าสนใจของ SQLite คือเมื่อผู้ใช้เริ่มโทรหานักพัฒนากลางดึก พวกเขาจึงต้องเปลี่ยนคำนำหน้าเริ่มต้นจาก sqlite_ เป็น etilqs_