ดังนั้นฉันจึงทำการทดสอบด้วย sqlite สำหรับไฟล์ที่มีขนาดใหญ่มากและมาถึงข้อสรุปบางอย่าง (อย่างน้อยสำหรับแอปพลิเคชันเฉพาะของฉัน)
การทดสอบเกี่ยวข้องกับไฟล์ sqlite ไฟล์เดียวที่มีทั้งตารางเดี่ยวหรือหลายตาราง แต่ละตารางมีประมาณ 8 คอลัมน์, จำนวนเต็มเกือบทั้งหมดและ 4 ดัชนี
แนวคิดคือการแทรกข้อมูลให้เพียงพอจนกระทั่งไฟล์ sqlite มีขนาดประมาณ 50GB
โต๊ะเดี่ยว
ฉันพยายามแทรกหลายแถวลงในไฟล์ sqlite ด้วยตารางเดียว เมื่อไฟล์มีขนาดประมาณ 7GB (ขออภัยฉันไม่สามารถระบุจำนวนแถวได้โดยเฉพาะ) การแทรกใช้เวลานานเกินไป ฉันคาดว่าการทดสอบของฉันจะแทรกข้อมูลทั้งหมดของฉันจะใช้เวลา 24 ชั่วโมงหรือมากกว่านั้น แต่ก็ไม่สมบูรณ์แม้หลังจาก 48 ชั่วโมง
นี่ทำให้ฉันสรุปได้ว่าตาราง sqlite ขนาดใหญ่มากเดียวจะมีปัญหาเกี่ยวกับการแทรกและอาจเป็นการดำเนินการอื่น ๆ ด้วย
ฉันเดาว่านี่ไม่น่าแปลกใจเนื่องจากตารางมีขนาดใหญ่ขึ้นการแทรกและการปรับปรุงดัชนีทั้งหมดใช้เวลานานขึ้น
หลายตาราง
จากนั้นฉันพยายามแยกข้อมูลตามเวลาในหลาย ๆ ตารางหนึ่งตารางต่อวัน ข้อมูลสำหรับ 1 ตารางต้นฉบับถูกแบ่งเป็น ~ 700 ตาราง
การตั้งค่านี้ไม่มีปัญหากับการแทรกมันไม่ใช้เวลานานขึ้นเนื่องจากมีการสร้างตารางใหม่ทุกวัน
ปัญหาสูญญากาศ
ตามที่ระบุโดย i_like_caffeine คำสั่ง VACUUM เป็นปัญหาของไฟล์ sqlite ที่ใหญ่กว่า เมื่อมีการแทรก / ลบมากขึ้นการกระจายตัวของไฟล์บนดิสก์จะแย่ลงดังนั้นเป้าหมายคือ VACUUM เป็นระยะเพื่อปรับไฟล์ให้เหมาะสมและกู้คืนพื้นที่ไฟล์
อย่างไรก็ตามตามที่ระบุไว้ในเอกสารฉบับเต็มสำเนาของฐานข้อมูลถูกสร้างขึ้นมาเพื่อดูดฝุ่นใช้เวลานานมากในการทำให้เสร็จสมบูรณ์ ดังนั้นฐานข้อมูลที่เล็กลงการดำเนินการนี้จะเสร็จเร็วขึ้น
สรุปผลการวิจัย
สำหรับแอปพลิเคชันเฉพาะของฉันฉันอาจแยกข้อมูลออกเป็นไฟล์ db หลายไฟล์ต่อวันเพื่อให้ได้ประสิทธิภาพที่ดีที่สุดทั้งในด้านประสิทธิภาพการดูดฝุ่นและความเร็วในการแทรก / ลบ
สิ่งนี้ทำให้การสืบค้นมีความซับซ้อน แต่สำหรับฉันแล้วมันเป็นการแลกเปลี่ยนที่คุ้มค่าที่จะสามารถจัดทำดัชนีข้อมูลจำนวนมากนี้ได้ ข้อได้เปรียบเพิ่มเติมคือฉันสามารถลบไฟล์ db ทั้งหมดเพื่อทิ้งข้อมูลของวัน (การดำเนินการทั่วไปสำหรับแอปพลิเคชันของฉัน)
ฉันอาจต้องตรวจสอบขนาดตารางต่อไฟล์เช่นกันเพื่อดูว่าความเร็วจะกลายเป็นปัญหาหรือไม่
มันเลวร้ายเกินไปว่ามีไม่ได้ดูเหมือนจะเป็นวิธีที่สูญญากาศที่เพิ่มขึ้นกว่าที่อื่น ๆสูญญากาศอัตโนมัติ ฉันไม่สามารถใช้งานได้เพราะเป้าหมายของฉันสำหรับสูญญากาศคือการจัดเรียงข้อมูลไฟล์ (พื้นที่ไฟล์ไม่ใช่เรื่องใหญ่) ซึ่งการดูดอัตโนมัติไม่ทำ ในความเป็นจริงเอกสารระบุว่ามันอาจทำให้การกระจายตัวแย่ลงดังนั้นฉันจึงต้องหันไปทำไฟล์สุญญากาศเป็นระยะ ๆ