ฉันเพิ่งอ่านคำถามเกี่ยวกับSQLite VS MySQLและคำตอบที่ชี้ให้เห็นว่าข้อมูล SQLite ไม่ได้ระดับดีและเว็บไซต์อย่างเป็นทางการจัดเรียงของยืนยันนี้อย่างไร
SQLite สามารถปรับขนาดได้และข้อ จำกัด สูงสุดของมันคืออะไร?
ฉันเพิ่งอ่านคำถามเกี่ยวกับSQLite VS MySQLและคำตอบที่ชี้ให้เห็นว่าข้อมูล SQLite ไม่ได้ระดับดีและเว็บไซต์อย่างเป็นทางการจัดเรียงของยืนยันนี้อย่างไร
SQLite สามารถปรับขนาดได้และข้อ จำกัด สูงสุดของมันคืออะไร?
คำตอบ:
เมื่อวานนี้ฉันเปิดตัวเว็บไซต์เล็ก ๆ*เพื่อติดตามตัวแทนของคุณที่ใช้ฐานข้อมูล SQLite ที่ใช้ร่วมกันสำหรับผู้เยี่ยมชมทั้งหมด แต่น่าเสียดายที่แม้จะมีการโหลดเล็กน้อยที่โฮสต์ของฉันก็ทำงานค่อนข้างช้า นี่เป็นเพราะฐานข้อมูลทั้งหมดถูกล็อคทุกครั้งที่มีคนดูหน้าเว็บเพราะมีการอัพเดท / แทรก ในไม่ช้าฉันก็เปลี่ยนไปใช้ MySQL และในขณะที่ฉันไม่มีเวลามากที่จะทดสอบดูเหมือนว่าสามารถปรับขนาดได้มากกว่า SQLite ฉันจำการโหลดหน้าเว็บช้าและในบางครั้งอาจเกิดข้อผิดพลาดในการล็อกฐานข้อมูลเมื่อพยายามเรียกใช้แบบสอบถามจากเชลล์ใน sqlite ที่กล่าวว่าฉันใช้เว็บไซต์อื่นจาก SQLite ได้ดี ข้อแตกต่างคือไซต์นั้นเป็นแบบสแตติก (เช่นฉันเป็นเพียงคนเดียวที่สามารถเปลี่ยนฐานข้อมูลได้) และทำงานได้ดีสำหรับการอ่านพร้อมกัน นิทานสอนใจ:
แก้ไข : ฉันเพิ่งรู้ว่าฉันอาจไม่ยุติธรรมกับ SQLite - ฉันไม่ได้จัดทำดัชนีคอลัมน์ใด ๆ ในฐานข้อมูล SQLite เมื่อฉันให้บริการจากหน้าเว็บ สิ่งนี้ทำให้ฉันมีอาการช้าลงบางส่วน อย่างไรก็ตามการสังเกตการล็อกฐานข้อมูลย่อมาจากถ้าคุณมีการอัพเดทที่หนักหน่วงประสิทธิภาพของ SQLite จะไม่ตรงกับ MySQL หรือ Postgres
การแก้ไขอื่น:เนื่องจากฉันโพสต์เมื่อเกือบ 3 เดือนที่แล้วฉันมีโอกาสตรวจสอบความสามารถในการปรับขนาดของ SQLite อย่างใกล้ชิดและด้วยเทคนิคบางอย่างมันสามารถปรับขนาดได้ค่อนข้างมาก ดังที่ฉันได้กล่าวถึงในการแก้ไขครั้งแรกดัชนีฐานข้อมูลจะลดเวลาการสืบค้นลงอย่างมาก แต่นี่เป็นการสังเกตทั่วไปเกี่ยวกับฐานข้อมูลมากกว่าที่เป็นเรื่องเกี่ยวกับ SQLite แต่มีเคล็ดลับอื่นที่คุณสามารถใช้เพื่อเพิ่มความเร็วใน SQLite: การทำธุรกรรม เมื่อใดก็ตามที่คุณต้องเขียนหลายฐานข้อมูลให้ใส่ไว้ในธุรกรรม แทนที่จะเขียนไปยัง (และล็อค) ไฟล์ทุกครั้งที่มีการออกแบบสอบถามการเขียนจะเกิดขึ้นเพียงครั้งเดียวเมื่อธุรกรรมเสร็จสมบูรณ์
เว็บไซต์ที่ฉันพูดถึงฉันเปิดตัวในย่อหน้าแรกได้ถูกเปลี่ยนกลับไปเป็น SQLite และมันทำงานได้ค่อนข้างราบรื่นเมื่อฉันปรับรหัสของฉันในบางที่
* ไซต์นี้ไม่สามารถใช้งานได้อีกต่อไป
Sqlite สามารถปรับขนาดได้ในแง่ของผู้ใช้คนเดียวฉันมีฐานข้อมูลหลายกิกะไบต์ที่ทำงานได้ดีมากและฉันก็ไม่ได้มีปัญหาอะไรมากมาย
แต่มันก็เป็นผู้ใช้คนเดียวดังนั้นมันขึ้นอยู่กับว่าคุณกำลังพูดถึงเรื่องสเกลแบบไหน
เพื่อตอบสนองต่อความคิดเห็น โปรดทราบว่าไม่มีสิ่งใดที่ป้องกันการใช้ฐานข้อมูล Sqlite ในสภาพแวดล้อมที่มีผู้ใช้หลายคน แต่ทุกธุรกรรม (มีผลทุกคำสั่ง SQL ที่แก้ไขฐานข้อมูล) จะล็อกไฟล์ซึ่งจะป้องกันผู้ใช้รายอื่นในการเข้าถึงฐานข้อมูลที่ ทั้งหมด
ดังนั้นหากคุณมีการแก้ไขฐานข้อมูลมากมายคุณจะต้องเจอปัญหาการปรับขนาดอย่างรวดเร็ว ในทางกลับกันถ้าคุณมีการเข้าถึงการอ่านจำนวนมากเมื่อเทียบกับการเข้าถึงการเขียนมันอาจไม่เลวร้ายนัก
แต่แน่นอนว่า Sqlite จะทำงานในสภาพแวดล้อมที่มีผู้ใช้หลายคน แต่มันจะทำงานได้ไม่ดี
SQLite ขับเคลื่อนเว็บไซต์ sqlite.org และอื่น ๆ ที่มีปริมาณการใช้งานมาก พวกเขาแนะนำว่าหากคุณมีการเข้าชมน้อยกว่า 100kต่อวัน SQLite จะทำงานได้ดี และนั่นถูกเขียนขึ้นก่อนที่พวกเขาจะส่งมอบคุณสมบัติ
ถ้าคุณต้องการเพิ่มความเร็วของ SQLite ให้ทำสิ่งต่อไปนี้:
คุณอาจต้องการดูวิดีโอของฉันบน YouTube ที่เรียกว่า " ปรับปรุงประสิทธิภาพของ SQLite ด้วยการบันทึกการเขียน Writeahead " ซึ่งแสดงวิธีการใช้การบันทึกล่วงหน้าและแสดงการปรับปรุงความเร็ว 5 เท่าสำหรับการเขียน
Sqlite เป็นฐานข้อมูลเดสก์ท็อปหรือในกระบวนการ SQL Server, MySQL, Oracle, และพี่น้องของพวกเขามีเซิร์ฟเวอร์
ฐานข้อมูลเดสก์ท็อปเป็นไปตามธรรมชาติไม่ใช่ตัวเลือกที่ดีสำหรับแอปพลิเคชันใด ๆที่ต้องการสนับสนุนการเข้าถึงการเขียนข้อมูลไปพร้อม ๆ ซึ่งรวมถึงบางเว็บไซต์ส่วนใหญ่ที่เคยสร้าง หากคุณต้องเข้าสู่ระบบเพื่ออะไรคุณอาจต้องเขียนเข้าถึงฐานข้อมูล
คุณอ่านเอกสาร SQLite นี้แล้วหรือยัง- http://www.sqlite.org/whentouse.html
SQLite จะทำงานได้ดีในฐานะเครื่องมือฐานข้อมูลสำหรับเว็บไซต์ที่มีปริมาณการใช้งานต่ำถึงปานกลาง (กล่าวคือ 99.9% ของเว็บไซต์ทั้งหมด) ปริมาณการเข้าชมเว็บที่ SQLite สามารถจัดการได้นั้นขึ้นอยู่กับจำนวนเว็บไซต์ที่ใช้ฐานข้อมูล โดยทั่วไปไซต์ที่ได้รับยอดฮิตน้อยกว่า 100K / วันควรทำงานได้ดีกับ SQLite จำนวนผู้ชม 100K / วันเป็นการประมาณการแบบอนุรักษ์นิยมไม่ใช่ขอบเขตที่ยาก SQLite ได้รับการพิสูจน์แล้วว่าสามารถทำงานได้กับปริมาณการรับส่งข้อมูลถึง 10 เท่า
ความยืดหยุ่นของ SQLite นั้นขึ้นอยู่กับข้อมูลที่ใช้และรูปแบบของมัน ฉันมีประสบการณ์ที่ยากลำบากกับตารางที่ยาวเป็นพิเศษ (ระเบียน GPS หนึ่งระเบียนต่อวินาที) ประสบการณ์แสดงให้เห็นว่า SQLite จะชะลอตัวลงในขั้นตอนส่วนหนึ่งเนื่องมาจากการปรับสมดุลของต้นไม้ไบนารีที่เติบโตขึ้นเรื่อย ๆ ที่ถือดัชนี (และด้วยดัชนีที่มีการประทับเวลาคุณเพิ่งรู้ว่าต้นไม้จะได้รับการปรับสมดุลจำนวนมาก การค้นหา) ดังนั้นในที่สุดที่ประมาณ 1GB (ballpark มากฉันรู้) แบบสอบถามกลายเป็นซบเซาในกรณีของฉัน ไมล์สะสมของคุณจะแตกต่างกันไป
สิ่งหนึ่งที่ต้องจำแม้จะมีการคุยโวทั้งหมด SQLite ไม่ได้ถูกสร้างขึ้นมาเพื่อการจัดเก็บข้อมูล มีการใช้งานต่าง ๆ ที่ไม่แนะนำสำหรับ SQLite คนดีที่อยู่เบื้องหลัง SQLite บอกด้วยตัวเอง:
อีกวิธีในการดู SQLite คือ: SQLite ไม่ได้ออกแบบมาเพื่อแทนที่ Oracle มันถูกออกแบบมาเพื่อแทนที่ fopen ()
และสิ่งนี้นำไปสู่การโต้แย้งหลัก (ไม่ใช่เชิงปริมาณขอโทษ แต่เชิงคุณภาพ) SQLite นั้นไม่ได้มีไว้สำหรับการใช้งานทั้งหมดในขณะที่ MySQL สามารถครอบคลุมการใช้งานที่หลากหลายได้แม้ว่าจะไม่ใช่ในอุดมคติ ตัวอย่างเช่นคุณอาจมี MySQL ที่เก็บคุกกี้ Firefox (แทนที่จะเป็น SQLite) แต่คุณต้องใช้บริการนั้นตลอดเวลา ในทางกลับกันคุณอาจมีเว็บไซต์ธุรกรรมที่ทำงานบน SQLite (หลาย ๆ คนทำ) แทนที่จะเป็น MySQL แต่คาดว่าจะมีการหยุดทำงานเป็นจำนวนมาก
ATTACH DATABASE
เพื่อสร้างการเชื่อมต่อฐานข้อมูลเสมือนกับทุกตาราง (ฮาร์ด จำกัด เพียง 62 ฐานข้อมูล)
ฉันคิดว่าเว็บเซิร์ฟเวอร์ (ในหมายเลข 1) ที่ให้บริการลูกค้าของผู้ล่าปรากฏบนแบ็กเอนด์ด้วยการเชื่อมต่อกับฐานข้อมูลเดียวใช่ไหม
ดังนั้นจึงไม่มีการเข้าถึงฐานข้อมูลพร้อมกันดังนั้นเราจึงสามารถพูดได้ว่าฐานข้อมูลทำงานใน 'โหมดผู้ใช้คนเดียว' มันไม่มีเหตุผลใดที่ diskuss จะเข้าถึงผู้ใช้หลายคนในสถานการณ์เช่นนี้ดังนั้น SQLite จึงทำงานเช่นเดียวกับฐานข้อมูลเซิร์ฟเวอร์อื่น ๆ
คิดแบบนี้ SQL Lite จะถูกล็อคทุกครั้งที่มีคนใช้งาน (SQLite ไม่ล็อคการอ่าน) ดังนั้นหากคุณแสดงหน้าเว็บหรือแอปพลิเคชันที่มีผู้ใช้หลายคนในเวลาเดียวกันสามารถใช้แอปของคุณพร้อมกับ SQLLite ได้ ดังนั้นมีปัญหาการปรับขนาด หากแอปพลิเคชั่นคนเดียวพูดถึงคลังเพลงที่คุณมีชื่อหลายร้อยรายการ, คะแนน, ข้อมูล, การใช้, การเล่นและเวลาในการเล่น SQL Lite จะปรับสัดส่วนการถือครองได้อย่างสวยงามหากไม่นับล้านระเบียน (ฮาร์ดไดรฟ์เต็มใจ)
MySQL ในทางกลับกันทำงานได้ดีสำหรับแอปเซิร์ฟเวอร์ที่ผู้คนทั่วๆไปจะใช้มันพร้อมกัน มันไม่ล็อคและมันมีขนาดค่อนข้างใหญ่ ดังนั้นสำหรับคลังเพลง MySql ของคุณจะถูกทำลายอย่างที่มีคนเพียงคนเดียวเท่านั้นที่เห็นมันเว้นแต่ว่านี่คือคลังเพลงที่ใช้ร่วมกันซึ่งมีคนนับพันเพิ่มหรืออัปเดต จากนั้น MySQL จะเป็นผู้ใช้
ดังนั้นในทางทฤษฎีแล้ว MySQL ปรับขนาดได้ดีกว่า Sqllite ทำให้มันสามารถจัดการกับผู้ใช้หลายคนได้ แต่เป็นการ overkill สำหรับแอพผู้ใช้คนเดียว
เว็บไซต์ของ SQLite (ส่วนที่คุณอ้างอิง) ระบุว่าสามารถใช้กับสถานการณ์ที่มีผู้ใช้หลายคนได้หลากหลาย
ฉันจะบอกว่ามันสามารถจัดการได้ไม่น้อย จากประสบการณ์ของฉันมันเร็วมากเสมอ แน่นอนว่าคุณต้องทำดัชนีตารางของคุณและเมื่อทำการเขียนโค้ดคุณจำเป็นต้องตรวจสอบให้แน่ใจว่าคุณใช้คิวรีแบบ Parameritized และไม่ชอบ โดยพื้นฐานแล้วคุณจะทำอะไรกับฐานข้อมูลใด ๆ เพื่อปรับปรุงประสิทธิภาพ
มันอาจคุ้มค่าที่จะลองใช้REAL SQL Serverซึ่งเป็นเซิร์ฟเวอร์ฐานข้อมูลที่สร้างขึ้นบน SQLite