เว็บไซต์ที่ใช้งานภายใน: มีกรณีที่น่าสนใจสำหรับ SQLite หรือไม่?


23

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

อย่างไรก็ตามไซต์การผลิตสาธารณะที่มีปริมาณการใช้งานสูงส่วนใหญ่ใช้ฐานข้อมูลที่หนักกว่า: mySQL, Oracle หรือ postgresql

คำถาม :

สมมติ:

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

มีกรณีที่น่าสนใจต่อการเกิดพร้อมกันของSQLiteสำหรับเว็บไซต์ที่ทำหน้าที่เป็นเครื่องมือภายในองค์กรที่มีปริมาณการใช้งานปานกลางหรือไม่? ถ้าเป็นเช่นนั้นเงื่อนไขใดที่ทำให้SQLiteมีปัญหาการทำงานพร้อมกัน?

ฉันกำลังมองหาสาเหตุที่เฉพาะเจาะจงที่เป็นที่รู้จักแทนการกลัวนิ้วชี้โดยทั่วไป / ไม่พร้อมเพรียง


sqllite มีคุณสมบัติเช่นการจำลองข้อมูล ฯลฯ ที่อาจเป็นประโยชน์สำหรับการสำรองข้อมูล ฯลฯ อย่างไร ใน SQLlite ฉันได้รับความประทับใจว่าแอปเป็นเจ้าของ db คุณสามารถเรียกใช้สคริปต์ผู้ดูแลระบบและอื่น ๆ ในขณะที่แอปของคุณทำงานหรือไม่
Doug T.

1
เกร็ดเล็กเกร็ดน้อยบางอย่างเกี่ยวกับ SQLite และการเกิดพร้อมกัน (ส่วนใหญ่เป็นบวก): การเข้าถึง sqlite3 พร้อมกัน
Daniel B

1
ในกรณีของเว็บไซต์ภายในเหตุผลที่น่าสนใจสำหรับ SQLite คืออะไร ข้อ จำกัด ใด ๆ ในการติดตั้ง RDBMS?
JeffO

นอกเหนือจากการทำให้สภาพแวดล้อมการพัฒนาง่ายขึ้นบนแล็ปท็อปของนักพัฒนารายบุคคลไม่มีเหตุผล คำถามที่แน่นอนคือไม่ว่าเราจะมีเหตุผลสามารถลดความซับซ้อนของการพัฒนาและการผลิตสภาพแวดล้อม
ไมค์เพนนิงตัน

คำตอบ:


23

ผมขอแนะนำให้อ่านคำตอบอย่างเป็นทางการในคำถามของคุณใช้ให้เหมาะสมกับ SQLite "สถานการณ์ที่ RDBMS อื่นอาจทำงานได้ดีขึ้น" เตือนว่า SQLite ไม่รองรับการเขียนพร้อมกัน:

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

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

ทุกสิ่งที่กล่าวมา SQLite อาจเป็นสิ่งที่ดีสำหรับเว็บไซต์ภายในส่วนใหญ่ โดยทั่วไปแล้วเว็บไซต์ภายในไม่ต้องการระดับการทำงานพร้อมกันและความสามารถในการขยาย


หรือทำเว็บไซต์ภายนอกส่วนใหญ่ เอ็นจิ้นฐานข้อมูลสามารถสลับออกหากมีการใช้ EF อย่างเช่น PostGres อาจเป็นทางเลือกที่ดีกว่าตั้งแต่เริ่มต้น
Robert Harvey

@RobertHarvey EF คืออะไร
Mike Pennington

@MikePennington: Entity Framework ฉันจินตนาการว่ามี ORM อื่น ๆ ที่มีความโปร่งใสของฐานข้อมูลหรืออย่างน้อยก็สามารถแลกเปลี่ยนไดรเวอร์ได้
Robert Harvey

1
การเทียบเท่าแบบ pythonic จะเหมือนกับ SQL Alchemy
Wyatt Barnett

"ฉันมักจะดู SQLite เป็นรูปแบบไฟล์ที่ซับซ้อนมากซึ่งรองรับการสืบค้น SQL" นิยามที่สมบูรณ์แบบ
สัญลักษณ์แทน

4

ใส่หมวกผู้อำนวยการฝ่ายไอทีของฉันฉันเห็นไม่กี่ gos ที่นี่:

  • ความเสี่ยงของข้อมูลเสียหาย บางทีการรับรู้มากกว่าจริง แต่สิ้นวันนี้เป็นไฟล์ประเภท DB ที่ไม่ทำธุรกรรมซึ่งไม่มีอะไรมากหากมีการขอความช่วยเหลือไปยังการเขียนที่ไม่ดีนอกเหนือจากการถามว่าคุณมีการสำรองข้อมูลล่าสุดหรือไม่ การพูดของที่ . .
  • ฉันจะสำรองสิ่งนี้ได้อย่างไร ในลักษณะที่ฉันรู้ว่าฉันได้รับสำเนาที่ดี ดีกว่าโดยไม่ต้องออฟไลน์แอพ
  • ฉันจะเข้าถึงฐานข้อมูลได้อย่างปลอดภัยได้อย่างไร? ความเข้าใจทั่วไปของฉันคือ SQL lite ไม่มีการเข้าถึงระบบไฟล์ใด ๆ เลยซึ่งเป็นการเริ่มต้นที่ดี แต่ไม่ใช่ความเป็นจริงทั้งหมด โดยเฉพาะอย่างยิ่งสำหรับเว็บแอปที่คุณอาจต้องการการอนุญาตที่สำเร็จการศึกษามากกว่า DBA หรือไม่มีอะไรเลย

จากมุมมองของนักพัฒนาฉันคิดว่ามันเป็นสิ่งสำคัญที่จะรู้ว่าทำไม SqlLite จึงเป็นค่าเริ่มต้น - เป็นเพราะมันง่ายและสาธิตได้ดี หากคุณกำลัง "ขาย" แพลตฟอร์มให้กับนักพัฒนาใหม่ความสามารถในการสร้างเว็บแอพที่ใช้งานได้ด้วยความยุ่งยากน้อยที่สุดเป็นกุญแจสำคัญ และต้องยืนขึ้นและกำหนดค่าเซิร์ฟเวอร์ฐานข้อมูลอย่างถูกต้องจะเป็นบล็อกที่สะดุดมากที่จะหลีกเลี่ยง


1
ดีสำรองข้อมูลสามารถทำได้ผ่านทางAPI การสำรองข้อมูล SQLite ฉันจะยอมรับว่า SQLite อาจไม่ปลอดภัยเท่าค่าเริ่มต้นเนื่องจากแตกต่างจากระบบที่มุ่งเน้นบริการไคลเอนต์ SQLite จะพูดคุยกับไฟล์ฐานข้อมูลโดยตรง ที่กล่าวว่า SQLite จะใช้เจอร์นัลเพื่อป้องกันความล้มเหลวของระบบและควรเชื่อถือได้หากโฮสต์ระบบปฏิบัติการรองรับการล็อก SQLite พื้นฐานที่ถูกต้อง (เครือข่าย I / O ดิสก์ไม่ได้) เว็บไซต์ทางการแสดงรายการสถานการณ์ต่าง ๆซึ่งจะนำไปสู่ฐานข้อมูล SQLite ที่เสียหาย
Brian

SQLite มีการทำธุรกรรม ใช้API การสำรองข้อมูลหรือปรับ สคริปต์การสำรองข้อมูลของ MediaWikiเพื่อทำการสำรองข้อมูลออนไลน์ ความเข้าใจทั่วไปเกี่ยวกับรูปแบบความปลอดภัยของ SQLite นั้นถูกต้อง คำแนะนำในการรักษาความปลอดภัยอย่างเป็นทางการคือ 'ใช้สามัญสำนึก': คิดเกี่ยวกับวิธีการที่คนสามารถเข้าถึงไฟล์ฐานข้อมูลของคุณและการออกแบบโปรแกรมประยุกต์บนเว็บของคุณตาม
เลนซามูเอลแมคลีนผู้อาวุโส

@Brian - ฉันยากที่จะคิดว่าฐานข้อมูลอื่นที่มีทั้งหน้าทุ่มเทเพื่อ "วิธีฐานข้อมูลนี้เสียหาย" ฉันจะเพิ่มว่าฉันพบว่าโครงการ sql lite น่าทึ่ง - พวกเขาน่าจะมีหน้านั้นเพราะพวกเขาเป็นประเภทถั่วและยังมีบางอย่างเช่นรหัสทดสอบ 10 บรรทัดสำหรับรหัสการผลิตทุกบรรทัดและต้องการให้แน่ใจและทั่วถึง
ไวแอตต์บาร์เน็ตต์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.