อธิบายไฟล์ SQLite: โครงสร้าง, กรณีการใช้งาน และขีดจำกัดสำคัญ

ไฟล์ SQLite คือไฟล์ดิสก์เดี่ยวไฟล์เดียวที่เก็บฐานข้อมูลเชิงสัมพันธ์ทั้งหมดเอาไว้ด้วยกัน ทั้งตาราง ดัชนี และสกีมา เอกสารประกอบของ SQLite เองเรียกสิ่งนี้ว่า "ไฟล์ฐานข้อมูลหลัก" และระบุว่า "สถานะที่สมบูรณ์ของฐานข้อมูล SQLite มักจะถูกบรรจุอยู่" ในไฟล์นั้น คำว่า มักจะ มีบทบาทสำคัญอย่างยิ่งในประโยคดังกล่าว
หากคุณเคยได้รับไฟล์ .db, .sqlite หรือ .sqlite3 และสงสัยว่าคุณได้รับข้อมูลทั้งหมดครบถ้วนหรือไม่ นี่คือรูปแบบไฟล์ที่คุณควรทำความเข้าใจอย่างถูกต้อง
ไฟล์ SQLite คืออะไรกันแน่
SQLite อธิบายตัวเองว่าเป็น "ไลบรารีในกระบวนการทำงาน (in-process library) ที่ใช้เครื่องมือฐานข้อมูล SQL แบบทำธุรกรรม มีความเบ็ดเสร็จในตัว ไม่ต้องพึ่งพาเซิร์ฟเวอร์ และไม่ต้องตั้งค่าใดๆ" หน้าเดียวกันนี้ยังระบุอีกว่า SQLite "ไม่มีกระบวนการเซิร์ฟเวอร์แยกต่างหาก" แอปพลิเคชันจะเชื่อมโยงกับไลบรารีและอ่านไฟล์โดยตรง
ซึ่งส่งผลตามมาสองประการ ประการแรก ฐานข้อมูลจะเดินทางในฐานะอาร์ติแฟกต์ชิ้นเดียว ซึ่งเป็นเหตุผลว่าทำไมแอปพลิเคชันจำนวนมากจึงส่งมอบข้อมูลด้วยวิธีนี้ ประการที่สอง รูปแบบไฟล์จะต้องมีความเสถียรอย่างยิ่ง เนื่องจากไฟล์เหล่านี้มีอายุยืนยาวกว่าซอฟต์แวร์ที่เขียนมันขึ้นมา SQLite ระบุว่า "รูปแบบไฟล์ที่เสถียรและทนทาน" เป็นหนึ่งในคุณสมบัติเด่น นอกจากนี้ยังระบุด้วยว่าโค้ดดังกล่าวเป็นสาธารณสมบัติ (public domain) "ใช้งานได้ฟรีเพื่อวัตถุประสงค์ใดๆ ไม่ว่าจะในเชิงพาณิชย์หรือส่วนตัว"
ขนาดและขอบเขตการใช้งานของมันเป็นสิ่งที่เรามักจะประเมินต่ำเกินไป หน้าเกี่ยวกับเราของ SQLite เองระบุว่ามัน "เป็นฐานข้อมูลที่มีการติดตั้งใช้งานแพร่หลายที่สุดในโลก โดยมีแอปพลิเคชันใช้งานมากเกินกว่าที่เราจะนับได้"
มีอะไรอยู่ข้างในไฟล์
ส่วนหัวขนาด 100 ไบต์
ไบต์แรกๆ จะระบุรูปแบบไฟล์ ที่ออฟเซ็ต 0 ไฟล์จะมีสตริงส่วนหัวขนาด 16 ไบต์: SQLite format 3\000 ลายเซ็นดังกล่าวคือวิธีที่เครื่องมือต่างๆ ใช้จดจำไฟล์ ไม่ว่าไฟล์นั้นจะมีนามสกุลอะไรก็ตาม
ฟิลด์ถัดไปมีความสำคัญมากกว่าที่เห็น ที่ออฟเซ็ต 16 จะมีจำนวนเต็มขนาด 2 ไบต์ที่เก็บ "ขนาดหน้าฐานข้อมูลเป็นไบต์" เอกสารระบุว่า "ต้องเป็นเลขยกกำลังสองระหว่าง 512 ถึง 32768 หรือค่า 1 ซึ่งแสดงถึงขนาดหน้า 65536" ฟิลด์แบบหลายไบต์ทั้งหมดในส่วนหัวจะถูกจัดเก็บโดยเริ่มจากไบต์ที่มีนัยสำคัญที่สุดก่อน (most significant byte first)
อีกสองไบต์ถัดมาอยู่ที่ออฟเซ็ต 18 และ 19: เวอร์ชันการเขียนและเวอร์ชันการอ่านของรูปแบบไฟล์ เอกสารระบุว่าค่าคือ "1 สำหรับระบบเก่า; 2 สำหรับ WAL"
หน้า ไม่ใช่แถว
ภายใต้ส่วนหัว ไฟล์จะเป็นกองของหน้าที่มีขนาดคงที่ ข้อกำหนดระบุไว้อย่างชัดเจนว่า "ไฟล์ฐานข้อมูลหลักประกอบด้วยหน้าหนึ่งหน้าขึ้นไป ขนาดของหน้าจะเป็นเลขยกกำลังสองระหว่าง 512 ถึง 65536 ทุกหน้าภายในฐานข้อมูลเดียวกันจะมีขนาดเท่ากัน"
หน้าต่างๆ จะถูกจัดลำดับหมายเลขเริ่มจาก 1 และหมายเลขหน้าสูงสุดคือ 4,294,967,294 ตารางและดัชนีจะอาศัยอยู่ภายในหน้าเหล่านั้นในรูปแบบโครงสร้าง B-tree ซึ่งเป็นเหตุผลว่าทำไมโปรแกรมแก้ไขข้อความ (text editor) จึงแสดงข้อมูลให้คุณเห็นได้น้อยมาก
ไฟล์ไซด์คาร์ที่ไม่มีใครพูดถึง
นี่คือส่วนที่ทำให้หลายคนตกม้าตาย เอกสารระบุว่าสถานะที่สมบูรณ์ "มักจะ" อยู่ในไฟล์เดียว จากนั้นจึงระบุข้อยกเว้น ในระหว่างการทำธุรกรรม SQLite จะ "เก็บข้อมูลเพิ่มเติมไว้ในไฟล์ที่สองที่เรียกว่า 'rollback journal'" ในโหมด WAL ไฟล์ที่สองนั้นจะเป็นบันทึกการเขียนล่วงหน้า (write-ahead log)
ดังนั้น การคัดลอกไฟล์ในขณะที่แอปพลิเคชันกำลังเขียนข้อมูลอยู่อาจทำให้ข้อมูลที่คอมมิต (commit) แล้วขาดหายไป เนื่องจากข้อมูลนั้นยังคงอยู่ในไฟล์ไซด์คาร์ หากเพื่อนร่วมงานส่งไฟล์ .db มาให้คุณเพียงอย่างเดียว และตัวเลขดูเหมือนจะเก่าไปหน่อย นี่คือสิ่งแรกที่คุณควรตรวจสอบ
วิธีเปิดไฟล์ SQLite
มีสามวิธีหลักๆ และวิธีที่เหมาะสมจะขึ้นอยู่กับสิ่งที่คุณตั้งใจจะทำต่อไป
อ่านด้วยโปรแกรมดูไฟล์ (viewer) โปรแกรมดู SQLite บนเดสก์ท็อปและเบราว์เซอร์จะเปิดไฟล์ แสดงรายการตาราง และให้คุณคลิกดูแถวต่างๆ ได้ นี่เป็นวิธีที่เร็วที่สุดในการตอบคำถามว่า "มีอะไรอยู่ในนี้บ้าง" และมักจะเพียงพอสำหรับการดูข้อมูลในเบื้องต้น
สืบค้นด้วยบรรทัดคำสั่ง (command line) หรือไลบรารี เชลล์ sqlite3 และการเชื่อมโยงไลบรารีมาตรฐานใน Python, Node และภาษาอื่นๆ ส่วนใหญ่สามารถอ่านรูปแบบไฟล์นี้ได้โดยตรง นี่คือวิธีที่เหมาะสมเมื่อคุณทราบสกีมาอยู่แล้วและต้องการตัวเลขที่เฉพาะเจาะจง
ส่งออกตารางและนำไปวิเคราะห์ที่อื่น ดัมป์ตารางออกเป็น CSV แล้วนำไปใช้ในเครื่องมือใดก็ตามที่ทีมของคุณใช้อยู่แล้ว คุณจะสูญเสียความสัมพันธ์ระหว่างตาราง ซึ่งเป็นสิ่งเดียวที่รูปแบบไฟล์นี้ช่วยปกป้องไว้ หากเป็นไปได้ ให้ส่งออกผลลัพธ์ที่เชื่อมโยงกัน (join) แล้ว แทนที่จะส่งออกตารางดิบ
ทำไมเครื่องมือจึงอาจแจ้งว่าไฟล์นี้ไม่ใช่ฐานข้อมูล
ข้อกำหนดได้อธิบายเรื่องนี้ไว้ ทุกไฟล์ที่ถูกต้องจะเริ่มต้นด้วยสตริงส่วนหัวขนาด 16 ไบต์ คือ SQLite format 3\000 หากโปรแกรมอ่านเปิดไฟล์แล้วไม่พบลายเซ็นดังกล่าวที่ออฟเซ็ต 0 แสดงว่าไฟล์ที่ได้รับไม่ใช่ฐานข้อมูล SQLite
สาเหตุทั่วไปสามประการครอบคลุมกรณีส่วนใหญ่ ได้แก่ การโอนย้ายไฟล์ไม่สมบูรณ์ ทำให้มีส่วนหัวแต่ส่วนที่เหลือถูกตัดขาด ไฟล์ถูกเข้ารหัสหรือถูกห่อหุ้มโดยแอปพลิเคชัน ทำให้ไบต์แรกเป็นอย่างอื่น หรือนามสกุลไฟล์ทำให้เข้าใจผิด และสิ่งที่คุณได้รับจริงๆ คือไฟล์ส่งออกธรรมดาที่ถูกเปลี่ยนชื่อโดยใครบางคนที่หวังดี
ไฟล์ SQLite สามารถมีขนาดใหญ่ได้แค่ไหน
ใหญ่กว่าที่คำถามมักจะสื่อถึง หน้าข้อจำกัดของ SQLite ระบุว่าขนาดสูงสุดของไฟล์ฐานข้อมูลคือ 4,294,967,294 หน้า ที่ขนาดหน้าสูงสุด 65,536 ไบต์ นั่นหมายถึงขนาดฐานข้อมูลสูงสุดประมาณ 281 เทราไบต์
หน้านี้มีความซื่อสัตย์อย่างน่าประทับใจเกี่ยวกับตัวเลขดังกล่าว โดยระบุว่าขีดจำกัดสูงสุดนี้ "ยังไม่ได้รับการทดสอบ เนื่องจากนักพัฒนาไม่มีสิทธิ์เข้าถึงฮาร์ดแวร์ที่มีความสามารถเพียงพอที่จะเข้าถึงขีดจำกัดนี้ได้"
จำนวนแถวก็ถูกจำกัดด้วยกำแพงเดียวกัน ขีดจำกัดสูงสุดตามทฤษฎีคือ 2^64 แถวในหนึ่งตาราง เอกสารระบุว่าขีดจำกัดนี้ "ไม่สามารถไปถึงได้ เนื่องจากจะถึงขนาดฐานข้อมูลสูงสุดที่ 281 เทราไบต์ก่อน"
สำหรับการทำงานจริง สิ่งสำคัญที่ควรจำไว้คือสิ่งที่ตรงกันข้ามกับขีดจำกัด หากมีใครส่งไฟล์ .db ให้คุณและเตือนว่ามันมีขนาดใหญ่ รูปแบบไฟล์แทบจะไม่ใช่สิ่งที่จะขัดขวางคุณเลย ขนาดหน้าฐานข้อมูลที่เลือกตอนสร้างไฟล์ และการที่ไฟล์นั้นมีดัชนีหรือไม่ จะส่งผลต่อประสบการณ์การใช้งานมากกว่าเพดานสูงสุดที่ระบุไว้ในเอกสารอย่างมาก
คุณจะพบไฟล์ SQLite ได้ที่ไหนบ้าง
- การส่งออกข้อมูลของแอปพลิเคชัน แอปพลิเคชันบนเดสก์ท็อปและมือถือมักจะจัดเก็บประวัติการใช้งาน การตั้งค่า และบันทึกข้อความไว้ในไฟล์ SQLite ที่คุณสามารถคัดลอกออกมาได้
- การส่งมอบข้อมูลเพื่อการวิเคราะห์ วิศวกรมักจะส่งสแนปชอตข้อมูลเป็นไฟล์เดียว แทนที่จะอนุญาตให้เข้าถึงฐานข้อมูลโดยตรง
- อุปกรณ์และระบบโทรมาตร (telemetry) ระบบสมองกลฝังตัวจะเขียนข้อมูลลงในเครื่องโดยตรงเนื่องจากไม่มีเซิร์ฟเวอร์ให้เชื่อมต่อ
- คลังข้อมูลเก่า (archives) ความเสถียรในระยะยาวของรูปแบบไฟล์นี้ทำให้มันเป็นตัวเลือกยอดนิยมสำหรับชุดข้อมูลที่ต้องคงสภาพให้อ่านได้เป็นเวลาหลายปี
- ระบบภายในของเบราว์เซอร์และเครื่องมือต่างๆ เครื่องมือในเครื่องจำนวนมากจะเก็บสถานะด้วยวิธีนี้ ซึ่งเป็นเหตุผลว่าทำไมเราจึงมักพบนามสกุลไฟล์นี้ในตั๋วสนับสนุนปัญหา (support tickets)
ไฟล์ WAL และไฟล์ journal มีไว้เพื่ออะไร
คุณอาจเคยคัดลอกไฟล์ .db และพบไฟล์ -wal หรือ -journal อยู่ข้างๆ ไฟล์เหล่านั้นคือไฟล์ไซด์คาร์ที่ข้อกำหนดได้อธิบายไว้ และการลบไฟล์เหล่านั้นคือสาเหตุที่ทำให้ผู้คนสูญเสียข้อมูล
Rollback journal เป็นกลไกแบบเก่า ก่อนที่จะเปลี่ยนหน้าข้อมูล SQLite จะเขียนเวอร์ชันดั้งเดิมของหน้านั้นลงใน journal หากการเขียนถูกขัดจังหวะ เวอร์ชันดั้งเดิมจะสามารถนำกลับมาใส่ใหม่ได้ ซึ่งเป็นสิ่งที่ช่วยให้ธุรกรรมอยู่รอดจากการขัดข้อง (crash) ได้
Write-ahead log จะสลับกระบวนการดังกล่าว โดยการเปลี่ยนแปลงจะถูกบันทึกลงใน log ก่อน แล้วจึงอัปเดตไฟล์หลักในภายหลัง ส่วนหัวจะระบุว่าฐานข้อมูลอยู่ในโหมดใด เวอร์ชันการเขียนของรูปแบบไฟล์ที่ออฟเซ็ต 18 คือ "1 สำหรับระบบเก่า; 2 สำหรับ WAL"
กฎในทางปฏิบัติเป็นผลโดยตรงจากประโยคเกี่ยวกับสถานะที่สมบูรณ์ สมมติว่าฐานข้อมูลอยู่ในโหมด WAL และมีคนส่งเฉพาะไฟล์หลักให้คุณ การเปลี่ยนแปลงที่คอมมิตล่าสุดอาจยังคงอยู่ใน log ที่คุณไม่ได้รับ
ดังนั้นเมื่อคุณได้รับไฟล์ฐานข้อมูล ให้ถามคำถามสองข้อ แอปพลิเคชันถูกปิดอย่างสมบูรณ์เมื่อทำการคัดลอกหรือไม่ และมีสิ่งอื่นใดแนบมาด้วยหรือไม่ คำตอบสำหรับทั้งสองข้อมักจะเป็น ใช่ และครั้งเดียวที่ไม่ใช่ คือครั้งที่ตัวเลขไม่ตรงกับระบบที่ใช้งานจริง (production) อย่างเงียบๆ
ไฟล์ SQLite vs CSV vs Parquet
| ไฟล์ SQLite | CSV | Parquet | |
|---|---|---|---|
| รูปทรง | หลายตาราง ในหนึ่งไฟล์ | หนึ่งตาราง ในหนึ่งไฟล์ | หนึ่งตาราง ในหนึ่งไฟล์หรือโฟลเดอร์ |
| ประเภทข้อมูล | จัดเก็บพร้อมกับข้อมูล | คาดเดาโดยโปรแกรมอ่าน | จัดเก็บพร้อมกับข้อมูล |
| ความสัมพันธ์ | คงอยู่ ผ่านคีย์และดัชนี | สูญหาย | สูญหาย |
| มนุษย์สามารถอ่านได้ | ไม่ | ใช่ | ไม่ |
| เขียนขึ้นเพื่อใช้สืบค้น | ใช่ ด้วย SQL | ไม่ | ใช่ โดยเครื่องมือวิเคราะห์ |
| ข้อผิดพลาดที่พบบ่อย | ไฟล์ไซด์คาร์ journal หรือ WAL ขาดหายไป | การคาดเดาประเภทข้อมูลและตัวคั่น | การสนับสนุนของชุดเครื่องมือ (toolchain) |
หากคุณทำงานกับรูปแบบไฟล์เหล่านี้เป็นประจำ บทความอธิบายของเราเกี่ยวกับ ไฟล์ Parquet และ ไฟล์ TSV จะครอบคลุมเนื้อหาในลักษณะเดียวกันสำหรับทั้งสองรูปแบบนั้น
ทำไมทีมต่างๆ จึงเลือกใช้รูปแบบไฟล์นี้
ไม่ต้องรันระบบใดๆ เนื่องจาก SQLite "ไม่มีกระบวนการเซิร์ฟเวอร์แยกต่างหาก" การส่งมอบงานจึงเป็นเพียงการคัดลอกไฟล์ แทนที่จะต้องเปิดตั๋วขอจัดสรรทรัพยากรระบบ (provisioning ticket)
ประเภทข้อมูลไม่สูญหายระหว่างทาง คอลัมน์วันที่ก็ยังคงเป็นวันที่เมื่อถึงปลายทาง ใครก็ตามที่เคยเห็นโปรแกรมอ่าน CSV เปลี่ยนรหัสประจำตัว (identifier) ให้กลายเป็นสัญลักษณ์ทางวิทยาศาสตร์ (scientific notation) จะเข้าใจถึงคุณค่าของสิ่งนี้เป็นอย่างดี
ความสัมพันธ์ก็ยังคงอยู่เช่นกัน ตารางที่เกี่ยวข้องกันหลายตารางจะอยู่ร่วมกันในอาร์ติแฟกต์เดียว ดังนั้นการเชื่อมโยงตาราง (join) ที่ทำให้ข้อมูลมีความหมายจึงยังคงใช้งานได้
ความทนทานถูกออกแบบมาในตัว SQLite ระบุว่าธุรกรรม "แม้หลังจากไฟฟ้าดับ" เป็นหนึ่งในคุณสมบัติหลัก ซึ่งเป็นเหตุผลว่าทำไมซอฟต์แวร์ฝังตัวจำนวนมากจึงพึ่งพามัน
ข้อจำกัดที่ควรทราบ
หนึ่งไฟล์ เขียนได้ทีละคน เครื่องมือนี้ถูกฝังอยู่ในตัวแทนที่จะให้บริการผ่านเซิร์ฟเวอร์ ดังนั้นโมเดลการทำงานพร้อมกัน (concurrency model) จึงแตกต่างจากฐานข้อมูลแบบไคลเอนต์-เซิร์ฟเวอร์ นั่นคือทางเลือกในการออกแบบ ไม่ใช่ข้อบกพร่อง แต่มันเป็นตัวกำหนดว่าไฟล์นี้เหมาะสำหรับงานประเภทใด
ขนาดหน้าจะถูกกำหนดตายตัวเมื่อสร้าง ทุกหน้าในฐานข้อมูลจะมีขนาดเท่ากัน และขนาดนั้นจะถูกบันทึกไว้ในส่วนหัว คุณเลือกมันเพียงครั้งเดียว
กฎของไฟล์ไซด์คาร์อีกครั้ง ขั้นตอนการคัดลอก สำรองข้อมูล หรืออัปโหลดใดๆ ที่ดึงไปเฉพาะไฟล์หลัก อาจทำให้พลาดข้อมูลใดก็ตามที่อยู่ใน journal หรือ write-ahead log ได้
ความทึบแสง (Opacity) ไฟล์ SQLite ไม่สามารถเปิดดูผ่านๆ ได้เหมือนกับ CSV การอ่านไฟล์จำเป็นต้องใช้เครื่องมือ ซึ่งเป็นอุปสรรคสำคัญที่ทำให้การวิเคราะห์หลายอย่างต้องหยุดชะงัก
วิธีหาคำตอบจากไฟล์ SQLite
วิธีแบบดั้งเดิมคือการติดตั้งโปรแกรมไคลเอนต์ เปิดไฟล์ เรียนรู้สกีมา และเริ่มเขียน SQL ซึ่งเป็นวิธีที่ดีเมื่อคุณรู้จักตารางเหล่านั้นอยู่แล้ว แต่มันจะช้ามากหากคุณเพิ่งได้รับไฟล์มาเมื่อเช้านี้และต้องเข้าประชุมในช่วงบ่าย
วิธีที่สั้นกว่าคือการถามคำถามโดยตรง Powerdrill Bloom ช่วยให้คุณทำงานกับข้อมูลของคุณด้วยภาษาธรรมชาติ และส่งคืนคำตอบพร้อมแนบแหล่งที่มา หน้าแรกของเว็บไซต์สัญญาว่า "ทุกตัวเลขจะถูกส่งกลับมาพร้อมกับหน้า แถว และตัวเลขที่อยู่เบื้องหลัง" จากจุดนั้น พื้นที่ทำงานเดียวกันสามารถสร้างแผนภูมิ ชีต หรือสไลด์นำเสนอแบบสั้นได้
หน้าเว็บที่เกี่ยวข้องสองหน้าเป็นสิ่งที่ควรทราบหากนี่คือเวิร์กโฟลว์ปกติของคุณ Chat with Database จะครอบคลุมวิธีการสนทนาเพื่อเข้าถึงข้อมูลที่มีโครงสร้าง และ Text to SQL จะครอบคลุมกรณีที่คุณต้องการตัวคิวรีเอง หากการส่งมอบงานของคุณมาในรูปแบบไฟล์ส่งออกแบนๆ (flat export) แทน หน้า CSV AI assistant จะครอบคลุมเส้นทางนั้น
อีกหนึ่งสิ่งที่ส่วนหัวบอกคุณ
เนื่องจากขนาดหน้าจะอยู่ที่ออฟเซ็ตที่กำหนดไว้ตายตัว คุณจึงสามารถเรียนรู้สิ่งที่มีประโยชน์เกี่ยวกับไฟล์ได้ก่อนที่จะเปิดใช้งานอย่างถูกต้อง ฐานข้อมูลที่สร้างขึ้นด้วยขนาดหน้า 4,096 ไบต์ จะทำงานแตกต่างจากฐานข้อมูลที่สร้างขึ้นด้วยขนาดหน้า 65,536 ไบต์ ทางเลือกนั้นถูกกำหนดไว้เพียงครั้งเดียวเมื่อตอนสร้างไฟล์
มันไม่ใช่ตัวเลขที่คุณจะเปลี่ยนเล่นๆ ในภายหลังได้ มันจัดอยู่ในกลุ่มเดียวกับการตัดสินใจเรื่องสกีมา มากกว่าที่จะเป็นเพียงแค่การตั้งค่าทั่วไป
บทสรุป
ไฟล์ SQLite คือฐานข้อมูลทั้งหมดในอาร์ติแฟกต์ชิ้นเดียว มันมีลายเซ็นขนาด 16 ไบต์ ขนาดหน้าข้อมูลที่บันทึกไว้ที่ออฟเซ็ต 16 และกองของหน้าขนาดคงที่ซึ่งเก็บตารางและดัชนีของคุณ มันเดินทางได้สะดวก รักษาประเภทข้อมูลไว้ได้ และคงสภาพให้อ่านได้เป็นเวลาหลายปี
โปรดจำข้อควรระวังข้อหนึ่งที่ข้อกำหนดระบุไว้อย่างรอบคอบ สถานะที่สมบูรณ์มักจะอยู่ในไฟล์นั้น ในระหว่างการทำธุรกรรม ส่วนหนึ่งของมันจะอยู่ใน rollback journal หรือ write-ahead log ที่อยู่เคียงข้างกัน ตรวจสอบไฟล์ไซด์คาร์ก่อนที่คุณจะเชื่อถือไฟล์ที่คัดลอกมา
เมื่อคุณมีไฟล์และต้องการคำตอบมากกว่าสกีมา ลองใช้ Powerdrill Bloom และถามคำถามของคุณกับข้อมูลโดยตรงได้เลย
คำถามที่พบบ่อย
ความแตกต่างระหว่าง .db, .sqlite และ .sqlite3 คืออะไร
ไม่มีความแตกต่างในเชิงโครงสร้าง ทั้งสามเป็นนามสกุลไฟล์ทั่วไปสำหรับรูปแบบเดียวกัน และตัวระบุที่แท้จริงคือสตริงส่วนหัวขนาด 16 ไบต์ SQLite format 3\000 ที่จุดเริ่มต้นของไฟล์
ฉันจะทราบได้อย่างไรว่าไฟล์ SQLite ใช้ขนาดหน้าเท่าใด
มันถูกบันทึกไว้ในส่วนหัว จำนวนเต็มขนาด 2 ไบต์ที่ออฟเซ็ต 16 จะเก็บขนาดหน้าเป็นไบต์ ซึ่งต้องเป็นเลขยกกำลังสองระหว่าง 512 ถึง 32768 หรือค่า 1 ซึ่งแสดงถึง 65536
ไฟล์ SQLite คือฐานข้อมูลที่สมบูรณ์หรือไม่
โดยปกติแล้วใช่ แต่ไม่เสมอไป เอกสารระบุว่าในระหว่างการทำธุรกรรม SQLite จะเก็บข้อมูลเพิ่มเติมไว้ใน rollback journal ส่วนในโหมด WAL ข้อมูลนั้นจะไปอยู่ที่ write-ahead log แทน
ฉันสามารถเปิดไฟล์ SQLite ใน Excel ได้หรือไม่
ไม่สามารถเปิดได้โดยตรง เนื่องจากไฟล์จัดเก็บหน้าข้อมูลแบบ B-tree แทนที่จะเป็นแถวของข้อความ วิธีการทั่วไปคือการส่งออกตารางเป็น CSV ก่อน หรือใช้เครื่องมือที่อ่านรูปแบบฐานข้อมูลและส่งคืนผลลัพธ์
SQLite สามารถใช้งานในเชิงพาณิชย์ได้ฟรีหรือไม่
ใช่ SQLite ระบุว่าโค้ดของตนเป็นสาธารณสมบัติ และ "ใช้งานได้ฟรีเพื่อวัตถุประสงค์ใดๆ ไม่ว่าจะในเชิงพาณิชย์หรือส่วนตัว"