SQLite บนเซิร์ฟเวอร์ที่ใช้งานจริง? [ปิด]


9

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

ใครบ้างมีตัวเลขหรือบทความเกี่ยวกับเรื่องนี้?


2
คำเตือน: คำถามและคำตอบบางคำนั้นมีความเข้าใจผิดความเข้าใจผิดและข้อมูลที่ล้าสมัย!
Chris S

เราได้ประเมิน SQLite เป็นโซลูชันแคชในการผลิต: uri.agassi.co.il/2014/10/using-sqlite-for-production.html
Uri Agassi

คำตอบ:


4

น่าเสียดายที่ฉันไม่ได้มีตัวเลขใด ๆ สำหรับคุณเกี่ยวกับความสามารถในการโหลด แต่มีความคิดเห็นเล็กน้อยเกี่ยวกับปัจจัยการ จำกัด ประสิทธิภาพ:

  • ความเร็วของ SQLite จะได้รับผลกระทบจากความเร็วของดิสก์ที่เปิดอยู่และมีการแทรก / อัปเดตจำนวนมากหรือไม่ (เช่นการเข้าถึงเพื่อเขียน) ล็อกการเขียนถูก จำกัด โดยความเร็วการหมุนของดิสก์

  • การทำธุรกรรมจะเริ่มต้นตามค่าเริ่มต้น แต่คุณจะได้รับประสิทธิภาพที่ดีขึ้นหากคุณเริ่มและยอมรับการทำธุรกรรม ฉันมีใบมีดจำนวนมากอย่างรวดเร็วเมื่อจัดการธุรกรรมโดยทางโปรแกรม

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

  • มันใช้ทรัพยากรน้อยกว่าเซิร์ฟเวอร์ฐานข้อมูลดังนั้นสิ่งนี้อาจส่งผลกระทบต่อประสิทธิภาพของไซต์เนื่องจากการปล่อยทรัพยากรเพิ่มเติมสำหรับเว็บเซิร์ฟเวอร์และรหัสแอปพลิเคชัน

  • หากคุณต้องการจำนวนของการเขียนพร้อมกันเป็นไปได้จากนั้นเซิร์ฟเวอร์ฐานข้อมูล (เช่น MySQL, Postgres) อาจให้บริการคุณได้ดีขึ้น

ในฐานะที่เป็นdevrimระบุรัฐเว็บไซต์ SQLite รอบ 100k ผู้ใช้ / วันควรจะปรับ ระบบ Trac ต้องการการเขียนดังนั้นประสิทธิภาพอาจช้าลงในกรณีนั้น


ขอบคุณสำหรับการตอบกลับดังนั้นโดยทั่วไปคุณสามารถเขียนไปที่ฐานข้อมูล 1 ครั้งเท่านั้นหรือไม่ แต่คุณยังสามารถมีคน mutliple อ่านจากฐานข้อมูลโดยไม่ต้องล็อค? ถ้าเป็นเช่นนั้นฉันเพิ่งได้รับแนวคิดเล็กน้อยสำหรับระบบแคช
Dr Hydralisk

หมายเลข "100K" ที่ถูกโยนทิ้งไปนั้นไม่มีประโยชน์ เอกสารที่อ่าน "โดยทั่วไปเว็บไซต์ใด ๆ ที่มีจำนวนการเข้าชมน้อยกว่า 100K / วันควรทำงานได้ดีกับ SQLite" โดยทั่วไป "hit" ถูกกำหนดเป็นคำขอ HTTP ซึ่งรวมถึงคำขอสำหรับทุก. js, .css และรูปภาพที่เป็นที่นิยม สิ่งนี้เกี่ยวข้องกับประสิทธิภาพของฐานข้อมูลอย่างไร สมมติว่าผู้แต่งหมายถึง "การดูหน้าเว็บ" ก็ยังไม่มีประโยชน์ จำนวนข้อความค้นหาต่อการดูหน้าเว็บกี่ครั้ง อัตราส่วนการอ่านเพื่อเขียน? ฐานข้อมูลฮาร์ดแวร์ชนิดใดที่ทำงานอยู่? ไม่ใช่ความคิดที่ดีที่จะใช้ SQLite สำหรับเว็บไซต์เมื่อมีเครื่องมือที่ดีกว่าอย่างน้อยหนึ่งโหลสำหรับงาน
jamieb

@Dr Hydralisk ใช่อ่านสามารถเกิดขึ้นได้ในแบบคู่ขนาน .. เช่นเดียวกับไฟล์
CEZ

@jamieb จุดที่เกี่ยวกับ "hits" นั้นยุติธรรม ไม่มีใครได้กล่าวถึงทรัพยากรฮาร์ดแวร์หรือเซิร์ฟเวอร์ใดบ้างที่มีอยู่ดังนั้นจึงอาจเป็นเซิร์ฟเวอร์เสมือนขนาดเล็กสำหรับทุกสิ่งที่เรารู้ การเกี่ยวข้องกับฐานข้อมูล SQLite ในระบบแคชหรือตารางแบบอ่านอย่างเดียวส่วนใหญ่จะให้ประโยชน์ด้านประสิทธิภาพโดยเฉพาะอย่างยิ่งเมื่อเซิร์ฟเวอร์ฐานข้อมูลเป็นรีโมต แคชหน่วยความจำ + แคช SQLite ของการสืบค้นฐานข้อมูลจะเอาชนะการสืบค้นจากฐานข้อมูลเพียงอย่างเดียว
Cez

3

ฉันมีบางจุดที่จะเพิ่มคำตอบที่ดีเหล่านี้

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

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


1

Sqlite นั้นยอดเยี่ยมสำหรับการฝังในแอพพลิเคชั่นและนั่นคือสิ่งที่มันถูกออกแบบมาสำหรับ แต่มันไม่แน่นอน "เร็วอย่างเห็นได้ชัด" ฉันใช้สำหรับแอพพลิเคชั่นของตัวเองหลายตัวเพื่อความสะดวกในการมีเพียงสองไฟล์เท่านั้นที่สามารถคัดลอกไปยังเครื่องอื่นเพื่อให้แอปพลิเคชันทำงานได้อย่างสมบูรณ์ การทดสอบกับ MySQL โดยใช้โครงสร้างเดียวกันดัชนี ฯลฯ แสดงให้เห็นว่า Sqlite ช้าลงอย่างมากแม้แต่สำหรับฐานข้อมูลขนาดเล็ก ฉันคาดหวังความแตกต่างของประสิทธิภาพจะเพิ่มขึ้นตามขนาดฐานข้อมูลที่เพิ่มขึ้นถึงแม้ว่าฉันจะไม่สามารถพูดได้อย่างแน่นอนเพราะฉันใช้กับฐานข้อมูลที่น้อยกว่า 100MB เท่านั้น


PRAGMA สามารถปรับเพื่อเพิ่มประสิทธิภาพโดยเสียค่าใช้จ่ายในบางครั้งอาจทำให้ฐานข้อมูลเสียหาย (ไม่ทำให้ข้อมูลสูญหาย) จากประสบการณ์ของฉันฉันสามารถให้ SQLite ใส่เม็ดมีดประมาณ 250-300rps บนเครื่อง WindowsXP เครื่องเก่า
djangofan

-1 เพราะฉันไม่เห็นด้วย ฉันสร้างและสอบถามฐานข้อมูล SQLite ที่มีขนาดหลาย GB และฉันจะไม่ได้รับข้อความค้นหาจำนวนเท่ากันต่อวินาทีโดยใช้ MySQL ตัวอย่างเช่น (ในฮาร์ดแวร์ชนิดเดียวกัน) SQLite สามารถทำคำสั่ง 120k เขียนต่อวินาทีถ้าคุณรู้วิธีการอย่างถูกต้องนวดมัน
Alix Axel

0

ฉันคิดว่า sqlite นั้นเร็วกว่าไฟล์ text / xml เท่านั้น (คุณอาจประหลาดใจถ้าคุณลองมัน) และมันไม่รองรับการทำงานพร้อมกันหากคุณต้องการสร้างเว็บไซต์สำหรับอินทราเน็ตที่ซึ่งผู้คนลงทะเบียนเวลาทำงานของพวกเขาหรือใช้การจองตั๋ว trac มันอาจให้บริการได้ดี นอกเหนือจากนั้นควรหลีกเลี่ยงและแทนที่ด้วย mysql หรือ couchdb

เว็บไซต์ sqlite กล่าวว่าผู้ใช้ 100k คนต่อวันน่าจะดี แต่ฉันสงสัยอย่างมากเพราะโครงการ trac ง่าย ๆ ติดขัดมากกับการใช้สำนักงาน 10 ppl


0

Sqlite ไม่ใช่แอปพลิเคชัน DB ฐานข้อมูลลูกค้า / เซิร์ฟเวอร์แบบดั้งเดิม มันเป็นห้องสมุดที่ฝังตัวอยู่ภายในแอปพลิเคชันอื่น มันถูกออกแบบมาสำหรับแอปพลิเคชันเดสก์ท็อปผู้ใช้เดี่ยว คุณไม่ต้องการที่จะลองใช้มันเพราะการแทนที่ MySQL / PostgreSQL / MS-SQL แบบสแตนด์อโลนในสภาพแวดล้อมแบบผู้ใช้หลายคนเพราะฐานข้อมูลทั้งหมดถูกล็อคเมื่อเขียน คุณจะต้องจัดการกับปัญหาการช่วงชิงแม้กระทั่งโหลดที่เบาซึ่งจะทำลายประสิทธิภาพ


ใน WAL เฉพาะผู้เขียนพร้อมกันเท่านั้นที่ถูกบล็อก บวกกับเอนจิ้น MySQL เริ่มต้น (MyISAM) ยังล็อคตารางเต็มเมื่อใดก็ตามที่มีแบบสอบถามเขียน
Alix Axel

1
@AlixAxel คำตอบนี้เขียนขึ้นหกเดือนก่อนที่จะมี WAL
jamieb
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.