ขนาดจริงสูงสุดสำหรับฐานข้อมูล SQLite ที่สมจริงและเป็นจริงคืออะไร?


33

ตามบทความนี้เกี่ยวกับการใช้งานที่เหมาะสมสำหรับ SQLiteมันบอกว่าในขณะที่ SQLite จำกัด ไว้ที่140 terabytesไคลเอ็นต์ / เซิร์ฟเวอร์ RDBMS อาจทำงานได้ดีขึ้น:

ฐานข้อมูล SQLite มีขนาด จำกัด ที่ 140 เทราไบต์ (2 47ไบต์, 128 ไบต์) และแม้ว่ามันจะสามารถจัดการกับฐานข้อมูลขนาดใหญ่ได้ แต่ SQLite จะเก็บฐานข้อมูลทั้งหมดไว้ในดิสก์ไฟล์เดียวและระบบไฟล์จำนวนมากจะ จำกัด ขนาดสูงสุดของไฟล์ไว้ที่บางอย่างที่น้อยกว่านี้ ดังนั้นหากคุณใคร่ครวญฐานข้อมูลของขนาดนี้คุณควรพิจารณาใช้เอ็นจิ้นฐานข้อมูลลูกค้า / เซิร์ฟเวอร์ที่กระจายเนื้อหาในไฟล์ดิสก์หลาย ๆ ไฟล์และอาจข้ามหลายวอลุ่ม

โดยทั่วไปแล้วฉันเห็นด้วยกับสิ่งนี้ แต่ฉันรู้สึกประหลาดใจเมื่อเรียนรู้ว่าขีด จำกัด สูงสุดของ SQLite นั้นสูงมาก! จากประสบการณ์ของฉันฉันได้ใช้ฐานข้อมูล SQL Server จำนวนน้อยขนาด ~ 30-100GB ฉันยังทำงานทางอ้อมกับฐานข้อมูลขนาดใหญ่กว่าโดยใช้ Oracle, Postgres หรือ Cassandra อย่างน้อยสำหรับความรู้ของฉันไม่มีใครเข้าใกล้ 140TB ฉันไม่ใช่ DBA ดังนั้นนี่คือสิ่งที่ฉันจะพิจารณาว่า "ใหญ่" จากประสบการณ์ตรงของฉัน

ฉันได้พิจารณาเฉพาะ SQLite สำหรับสถานการณ์ที่ฐานข้อมูลจะเล็ก มากที่สุดหลายสิบเมกะไบต์

หลังจากอ่านบทความนี้ฉันยังไม่เชื่อที่จะพิจารณา SQLite สำหรับสิ่งที่อาจต้องใช้หลายร้อยกิกะไบต์ แต่ฉันสงสัยว่าฉันประเมินความสามารถต่ำเกินไป ขีด จำกัด ขนาดสูงสุดจริงสำหรับฐานข้อมูล SQLite ที่ใช้จริงคืออะไร


3
ฉันคิดว่าโดยทั่วไปเราจะต้องพิจารณาจำนวนการเชื่อมต่อพร้อมกันเนื่องจากชุดข้อมูลขนาดใหญ่มักจะถูกใช้โดยผู้ใช้หลายคน มีวิธีให้คุณทดสอบสิ่งนี้ในระบบของคุณเองหรือยัง?
JeffO

3
สำหรับบางอย่างเช่นฐานข้อมูลของธุรกรรมที่เก็บถาวรซึ่งไม่จำเป็นต้องเข้าถึงมากนัก SQLite อาจเป็นตัวเลือกที่ดีและจะมีผู้ใช้หนึ่งคนต่อครั้ง (ถ้ามี) และคุณไม่จำเป็นต้องมีทั้งหมด การตั้งค่าเซิร์ฟเวอร์ DB เพื่อสนับสนุน หากคุณมีผู้ใช้หลายคนพร้อมกันคุณอาจพบปัญหาเกี่ยวกับการล็อคการใช้เวลานานก่อนที่คุณจะเข้าสู่ฐานข้อมูลหลายกิกะไบต์
Michael Kohne


2
@Pacerier - ใช่แล้วเพื่อติดตั้งซอฟต์แวร์ จากนั้นคุณจะต้องกำหนดบทบาทของฐานข้อมูลรวมถึงวิธีการรวมเข้ากับระบบสำรองข้อมูลของคุณตรวจสอบให้แน่ใจว่าระบบสำรองข้อมูลทำให้เซิร์ฟเวอร์ฐานข้อมูลอยู่ในสถานะที่เหมาะสมเมื่อเริ่มต้นและสิ้นสุดการสำรองข้อมูล ฯลฯ และอื่น ๆ อีกมากมาย การตั้งค่าเซิร์ฟเวอร์ db มากกว่าเพียงแค่ติดตั้งซอฟต์แวร์ นอกจากนี้ยังมีบริการอีกหนึ่งอย่างที่คุณต้องกังวลเกี่ยวกับจุดยืนความปลอดภัยของเครือข่ายและอีกสิ่งหนึ่งที่คุณต้องติดตามการแก้ไข ถ้าคุณต้องการบริการ db โดยวิธีนี้คุณสามารถใช้งานได้ แต่คุณไม่ต้องการ SQLite มีค่าใช้จ่ายน้อยกว่ามาก
Michael Kohne

1
@ leeand00 - หรือคุณสามารถเช่าพื้นที่เป็นเวลาหนึ่งเดือน
JeffO

คำตอบ:


26

ขีด จำกัด ที่เหมือนจริง (ขนาดของฐานข้อมูล Sqlite บางตัว) จะเหมือนกับขีด จำกัด ที่สมจริงสำหรับไฟล์ข้อมูล และข้อ จำกัด นั้นขึ้นอยู่กับคอมพิวเตอร์และระบบของคุณเป็นจำนวนมาก บนเดสก์ท็อป Linux ปัจจุบันของฉันฉันไม่สามารถซื้อไฟล์ที่มีขนาดใหญ่กว่า 350Gbyte (เพราะกฎทั่วไปฉันหลีกเลี่ยงการมีไฟล์เดียวกินมากกว่าครึ่งพาร์ติชันดิสก์) BTW ข้อ จำกัด เชิงปฏิบัตินั้นยังส่งผลต่อ SQL RDBMS อื่น ๆ เช่น PostGreSQL หรือ MariaDB (แต่ส่วนใหญ่จะเก็บข้อมูลไว้ในไฟล์หลาย ๆไฟล์ซึ่งคุณอาจเก็บไว้ในระบบไฟล์ที่แตกต่างกันและบางส่วนสามารถจัดการข้อมูลกระจายบนเครื่องระยะไกล .. .)

หลังจากอ่านบทความนี้ฉันยังไม่เชื่อที่จะพิจารณา SQLite สำหรับสิ่งที่อาจต้องใช้หลายร้อยกิกะไบต์

คุณถูกและผิด

คุณพูดถูกเพราะในคอมพิวเตอร์ทุกวันนี้ (แล็ปท็อปและเดสก์ท็อปไม่ใช่ซูเปอร์คอมพิวเตอร์หรือเซิร์ฟเวอร์ดาต้าเซ็นเตอร์) หนึ่งร้อยกิกะไบต์ยังคงมีพื้นที่ดิสก์ที่ค่อนข้างใหญ่ ดังนั้นในทางปฏิบัติหากคุณนึกถึงฐานข้อมูลขนาดใหญ่คุณจะนึกภาพเซิร์ฟเวอร์ SQL จริง ๆ (โดยเฉพาะ PostGreSQL) โดยเฉพาะอย่างยิ่งเพราะคุณอาจต้องการการเข้าถึงจากระยะไกลการเข้าถึงพร้อมกันอย่างมีประสิทธิภาพและกระจายข้อมูลและตาราง

คุณ (โดยทั่วไปฉันไม่เคยลอง) ผิดเพราะ SQLite อาจมีความสามารถ (และบางครั้งทดสอบ) เพื่อจัดการกับฐานข้อมูลหลายร้อยกิกะไบต์สมมติว่าคุณมีระบบไฟล์ที่สามารถจัดการกับไฟล์ขนาดใหญ่ (และอาจเป็นสอง อย่างน้อยพวกเขา)

แน่นอนฉันจะ (บางครั้ง) พิจารณา SQLite สำหรับฐานข้อมูลหลายสิบกิกะไบต์ (และฉันได้ลองอีกครั้งเช่น.sqliteไฟล์ขนาดใหญ่IIRC ของ 40Gbytes) ในเครื่องปัจจุบัน (ไม่ใช่ซุปเปอร์คอมพิวเตอร์) ฉันลังเลที่มีฐานข้อมูล SQLite หลายร้อยกิกะไบต์เนื่องจากไฟล์ดังกล่าวค่อนข้างใหญ่ตามแนวปฏิบัติของวันนี้

IIRC ผู้ขายฮาร์ดแวร์บางรายที่ขายเครื่องจักรระบบแฟ้มพิเศษพูดกับฉันสักครั้งหนึ่งว่ามีแอปพลิเคชัน terabyte sqlite (แต่ฉันอาจผิด)

แน่นอนประสิทธิภาพของ SQLite ขึ้นอยู่กับ (เช่นฐานข้อมูล SQL ทั้งหมด) จำนวนมากและความกว้างของตาราง, ดัชนี, แบบสอบถาม SQL ที่เกี่ยวข้อง และคุณไม่ต้องการมีการเข้าถึงพร้อมกัน (โดยกระบวนการที่แตกต่างกัน) และคุณควรใช้ทรานแซคชัน (ตามประสบการณ์แม้ในฐานข้อมูล SQLITE ขนาดเล็กเพียงไม่กี่เมกะไบต์คุณต้องการห่อคำขอแทรกพันของคุณด้วยBEGIN TRANSACTION& END TRANSACTIONการไม่ทำเช่นนั้นทำให้ SQLlite ช้าลงด้วยปัจจัยใหญ่ - มากกว่า 10x-)

และจากประสบการณ์ส่วนตัวด้วยการกำหนดค่าและองค์กรที่เหมาะสม SQLite สามารถจัดการฐานข้อมูลที่ใหญ่กว่า RAM ที่มีอยู่ (ดังนั้น 30Gbytes ไม่ใช่ปัญหา) - แต่คุณอาจต้องการให้ดัชนีพอดีกับ RAM!

หากคุณเกิดรหัสบางอย่างสำหรับ "ซูเปอร์คอมพิวเตอร์" หรือเวิร์กสเตชันราคาแพง (เช่น 512Gbytes ของ RAM และ 8Tbytes ของดิสก์และ 512Gbyte ของ SSD) แน่นอนคุณสามารถมีฐานข้อมูลเทราไบต์ของเทราไบต์ แต่คุณจะต้องทำอย่างนั้นก็ต่อเมื่อกระบวนการหนึ่ง (หรือน้อยมาก) กำลังเข้าถึงฐานข้อมูลนั้น หากคุณมีกระบวนการมากมายที่เข้าถึงฐานข้อมูลเดียวกันพร้อมกันให้ติดตั้ง SQL RDBMS จริง (ดีกว่า MariaDB หรือ PostGreSQL)

โปรดทราบว่าในขณะที่รูปแบบ (ไบนารี) ของ.sqliteไฟล์ฐานข้อมูลถูกบันทึกว่าเป็น "พกพา" ฉันชอบที่จะสำรองฐานข้อมูลในรูปแบบข้อความ SQL (โดยใช้sqlite3 mydb.sqlite .dump > mydb.sql) จากนั้นฉันยังต้องการพื้นที่ดิสก์เพิ่มเติมสำหรับการถ่ายโอนข้อความ (และลดขีด จำกัด ที่เหมือนจริง)

โดยปกติ Sqlite ไม่ใช่คอขวด แต่ดิสก์อาจจะ

PS เหตุผลเดียวกันอาจจะนำไปใช้ในการจัดทำดัชนีไฟล์ขนาดใหญ่โดยใช้GDBM

PPS ในสาขาexpjsของฉัน(sept.2016) ของซอฟต์แวร์ MELT ของฉัน (GPLv3 ฟรีบน github) ฉันยังคงใช้งานแอพพลิเคชั่นทั้งหมดใน JSON ภายในฐานข้อมูล Sqlite ใหม่ ฉันใช้การทดลองเล็ก ๆ กับวัตถุหลายล้านชิ้น (ค่อนข้าง "ใหญ่") โดยที่ไม่น่าประหลาดใจ YMMV


7
คุณสามารถหยุดเขียนหลังจากย่อหน้าที่สี่ แต่ +1 อยู่ดี
Robert Harvey

3
บางที แต่ฉันรู้สึกประหลาดใจมากที่สังเกตว่าแม้ในฐานข้อมูล sqlite ที่สดใหม่เพียงไม่กี่เมกะไบต์ธุรกรรมก็มีความสำคัญในทางปฏิบัติ (ด้วยการเข้าถึงเพียงกระบวนการเดียวเดียวจริง ๆ แล้วเขียนไฟล์ใหม่)
Basile Starynkevitch

3
นั่นเป็นความจริงอย่างแน่นอนสำหรับการเขียน ในทางปฏิบัติมันเป็นเรื่องยากที่จะจินตนาการฐานข้อมูล SQLite ที่มีขนาดเหมือน OP อธิบาย Postgresql อาจเป็นตัวเลือกที่ดีกว่าไม่ใช่สำหรับความสามารถในขนาด แต่สำหรับการใช้งานพร้อมกันในระดับอุตสาหกรรมซึ่ง SQLite ไม่มี
Robert Harvey

5
มีสถานการณ์ที่ถูกต้องมากมายซึ่งคุณสามารถมีฐานข้อมูล SQLite ที่มีขนาดไฟล์ใหญ่ จากนักพัฒนา SQLite ตัวเองคิดว่ามันน้อยกว่าการทดแทนสำหรับ MySql และอื่น ๆ เพื่อทดแทนสำหรับ fopen การเขียนซอฟต์แวร์ CAD สามมิติและการใช้ฐานข้อมูล SQLite เพื่อจัดเก็บข้อมูลเกี่ยวกับวัตถุนั้นอาจสมเหตุสมผลอย่างสมบูรณ์
whatsisname

2
@Pacerier: ไฟล์ภาพยนตร์และ binary blobs ที่คล้ายกันโดยทั่วไปจะไม่ถูกจัดเก็บในฐานข้อมูล พวกเขาจะถูกเก็บไว้ในระบบไฟล์และลิงค์ไปยังพวกเขาจะถูกเก็บไว้ในฐานข้อมูล
Robert Harvey
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.