10 คะแนน โดย xguru 2024-07-13 | 6 ความคิดเห็น | แชร์ทาง WhatsApp
  • หลังจากได้ลองใช้ SQLite อยู่หลายวัน ก็ได้พบข้อเสียที่น่าประหลาดใจอยู่หลายอย่าง
  • ไม่รองรับ ALTER COLUMN คำแนะนำอย่างเป็นทางการสำหรับการแก้ไขคอลัมน์คือ "สร้างตารางใหม่"
  • ไม่รองรับ DROP CONSTRAINT คำแนะนำอย่างเป็นทางการสำหรับการลบข้อจำกัดคือ "สร้างตารางใหม่"
  • SQLite ไม่มีชนิดข้อมูลที่ระดับคอลัมน์ ชนิดข้อมูลมีอยู่แค่กับค่าข้อมูลเท่านั้น (มีเพียง 5 ชนิด) ดังนั้นอะไรก็สามารถใส่ลงไปที่ไหนก็ได้
  • หากร้องขอคอลัมน์ที่เป็นชนิดข้อมูลที่ไม่รองรับหรือไม่มีอยู่ มันจะทำงานผิดแบบเงียบ ๆ โดยไม่มีคำเตือนหรือข้อผิดพลาด การสร้างสคีมาอย่าง CREATE TABLE my_table (id bigserial, messages jsonb[]) ดูเหมือนจะใช้ได้ ทำให้ในวันแรกผมเข้าใจผิดว่า SQLite รองรับ serial และ array
  • สามารถใช้ CREATE TABLE my_table (...) STRICT เพื่อบังคับให้ยอมรับได้เฉพาะ 5 ชนิดที่รองรับคือ integer, real, text, blob, any
  • ช่วงหลังมีความสนใจมากขึ้นเกี่ยวกับการรองรับ jsonb แบบใหม่ของ SQLite แต่ต่างจาก Postgres ตรงที่ jsonb ไม่ได้เป็นชนิดข้อมูลจริง ๆ มันเป็นรูปแบบที่ใช้รับเข้าและส่งออกในฟังก์ชัน jsonb* แบบ built-in เมื่อเก็บถาวรจริง ๆ แล้วจะเป็น blob ซึ่งเป็นหนึ่งใน 5 ชนิดพื้นฐาน
  • ชนิดข้อมูลสำคัญมาก ๆ อื่น ๆ อย่าง timestamptz ก็ไม่มีเช่นกัน ถ้าต้องการวันที่/เวลา ก็ต้องเก็บเป็น Unix timestamp แบบ integer หรือสตริงรูปแบบ ISO8601 และมีฟังก์ชัน built-in หลายตัวสำหรับจัดการงานเหล่านี้
  • SQLite มีความสามารถด้านสตรีมมิงที่น่าประทับใจซึ่งผมอยากลองใช้ แต่ประสบการณ์ DX ช่วงแรกนั้นบอกได้เลยว่าค่อนข้างขรุขระ
  • บางครั้งก็สงสัยว่าเราถูกยึดติดกับ narrative บางอย่างมากเกินไปหรือเปล่า เช่น Postgres คือฐานข้อมูลที่ดีที่สุดในโลกจริงไหม? ประสบการณ์ครั้งนี้ยิ่งทำให้ผมมั่นใจมากขึ้น ใช่, Postgres ดีที่สุด

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

 
tested 2024-07-16

ให้ความรู้สึกเหมือนต้องการ SQLHeavy มากกว่า SQLite นะ

 
princox 2024-07-15

มีฐานข้อมูลแบบนั้นบ้าง แบบนี้บ้างนะครับ ผมรู้สึกว่า SQLite ก็มีแนวทางการดำเนินไปตามปรัชญาของมันเอง

 
regentag 2024-07-13

ทำไมถึงพยายามจะใช้ SQLite ให้เหมือน Postgres กันนะ?

มันให้ความรู้สึกเหมือนคนที่เพิ่งลองใช้ Linux ครั้งแรกแล้วบอกว่า “Hancom Office ก็ใช้ได้ไม่ดี เกมที่ฉันเล่นก็รันไม่ได้ ยังไงระบบปฏิบัติการก็ต้องเป็น Windows สิ!”

 
savvykang 2024-07-13

กระแสพูดถึง sqlite บน Hacker News มันจะเวอร์เกินไปหน่อยหรือเปล่า? ตั้งแต่ปี 2022 เป็นต้นมา มีโพสต์บน Hacker News จำนวนมากที่อ้างว่า sqlite สามารถมาแทนที่ RDBMS ที่รันแยกต่างหากได้

1: https://news.ycombinator.com/item?id=31318708
2. https://news.ycombinator.com/item?id=31152490
3. https://news.ycombinator.com/item?id=34812527
4. https://news.ycombinator.com/item?id=36208568

อื่น ๆ: https://hn.algolia.com/?dateEnd=1720854657&dateRange=custom&da…

 
eajrezz 2024-07-13

ผมคิดว่าในกรณีที่รู้สึกว่าการใช้ผลิตภัณฑ์ฐานข้อมูลอย่าง Postgres หรือ MySQL นั้นเกินความจำเป็น SQLite ก็อาจเป็นทางเลือกที่น่าสนใจได้มากพอ

ยกตัวอย่างเช่น สำหรับบริการขนาดเล็ก ค่าใช้จ่ายของ managed DB อาจกลายเป็นกรณีที่ต้นทุนสูงเกินตัว และถ้าจะดูแลระบบเองก็ยังเป็นภาระอยู่ดี

ในทางกลับกัน SQLite ว่ากันว่าสามารถรองรับประสิทธิภาพได้เพียงพอในระดับหนึ่ง และโดยเฉพาะถ้าใช้เครื่องมืออย่าง Litestream ก็แทบไม่มีภาระในการดูแลระบบเลย จึงดูเหมือนว่าจะมีข้อดีอยู่มากครับ

 
savvykang 2024-07-14

ยังไม่ต้องไปถึงฟีเจอร์การทำ replication เลย แค่ sqlite ก็สำรองข้อมูลง่ายอยู่แล้ว และขอแค่จัดการให้บริการเดมอนอยู่ในสถานะที่เหมาะสมก็พอ เลยถือว่าดีมาก แต่ถ้าจะเอาไปผูกกับ JPA ต้องทำโน่นทำนี่หลายอย่าง เลยรู้สึกว่าใช้ไม่ได้กับโปรเจกต์ที่ต้องส่งมอบงานต่อให้คนอื่นครับ ถ้ามีความตั้งใจจะจัดการ data schema ให้เข้มงวดกว่านี้เหมือนในต้นฉบับ มันก็ไม่ค่อยเหมาะกับการใช้งานแบบนั้นด้วย

ผมพิมพ์คอมเมนต์ก่อนหน้าไว้แต่ยังไม่จบ แค่อยากจะบอกว่ากระแสลือเกี่ยวกับ sqlite ทำให้เกิดภาพลวงตาราวกับว่า sqlite เป็นสารพัดนึกครับ