เหตุใด SQL จึงไม่แพร่หลายในแอปพลิเคชันเดสก์ท็อปขนาดใหญ่


28

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

ตอนนี้ฉันสงสัยบางอย่างเกี่ยวกับฐานข้อมูลและการใช้งานในแอปพลิเคชันทั่วไป:

  • เหตุใด Windows จึงไม่ใช้ฐานข้อมูล SQL "กลาง" ใด ๆ ตัวอย่างเช่น:
    • ข้อผิดพลาดข้อมูลการรายงานจะถูกเก็บไว้ในกลุ่มของไฟล์
    • Windows Update เก็บทุกอย่างไว้ในรูปแบบไฟล์เดียว
    • แคชไอคอนถูกเก็บไว้ในไฟล์เดียวที่แปลกมากซึ่งดูเหมือนจะไม่สามารถเข้าถึงได้ผ่านทาง SQL ฯลฯ
  • เหตุใดแอปพลิเคชันขนาดใหญ่จำนวนมากจึงหลีกเลี่ยงการใช้ฐานข้อมูล ตัวอย่างเช่น Microsoft Outlook จะไม่ได้รับจากการใช้ฐานข้อมูลจริงแทนที่จะสร้างล้อใหม่โดยมีรูปแบบของตนเองสำหรับไฟล์. pst และจัดเก็บข้อมูลบางอย่างในรีจิสตรี

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

นอกจากนี้จะไม่มีชุดของแอปพลิเคชันเช่น Microsoft Office หรือ Microsoft Expression ได้รับประโยชน์จากการมีฐานข้อมูล SQL แบบรวมทำให้ง่ายต่อการปรับใช้แอปพลิเคชันอัปเดต / อัปเกรดข้อมูลแบ่งปันข้อมูลระหว่างแอปพลิเคชันเหล่านั้น เป็นต้น


4
พูดสำหรับแพลตฟอร์มของคุณเอง ;) แอพ Mac / iPhone จำนวนมากใช้ CoreData ซึ่งโดยทั่วไปจะใช้ฐานข้อมูล SQLite สำหรับจัดเก็บข้อมูล
mipadi

8
ฐานข้อมูลเป็นเพียง "ไฟล์จำนวนมาก" ฉันขอยืนยันว่าตัวอย่างทั้งหมดที่คุณนำเสนอนั้นอยู่ในฐานข้อมูลจริงไม่ใช่ฐานข้อมูลเชิงสัมพันธ์ที่สามารถสืบค้นได้ของ SQL
Allon Guralnek

8
โดยฐานข้อมูลเขาหมายถึงฐานข้อมูลเชิงสัมพันธ์
Olivier Jacot-Descombes

คำตอบ:


20

1) โดยทั่วไปการพูดโอเวอร์เฮดของการรัน RDBMS เต็มรูปแบบนั้นยอดเยี่ยมเกินไปและมันจะเป็นการเพิ่มภาระที่ไม่จำเป็นสำหรับระบบและความซับซ้อน

การติดตั้งครั้งเดียวจะทำให้ชีวิตของคุณง่ายขึ้นในฐานะนักพัฒนา แต่ทำให้ชีวิตของเจ้าของเครื่องแย่ลงเพราะเครื่องของพวกเขามีแนวโน้มที่จะทำงานช้าลงและมีปัญหามากขึ้น ในการเผชิญหน้ากับผู้พัฒนาและผู้ใช้ผู้ใช้ควรชนะเกือบทุกครั้ง

2) ที่เก็บข้อมูลจำนวนมากมีความต้องการเฉพาะซึ่งไม่ตรงกับบางอย่างเช่น SQL Server Express

ตัวอย่างเช่นบันทึกข้อผิดพลาดควรเขียนลงในสิ่งที่ง่ายที่สุดเพื่อเพิ่มโอกาสที่การเขียนจะเกิดขึ้นและข้อมูลจะสามารถใช้ได้ SQL Server จะไม่ง่ายอย่างนั้น

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


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

@ Laurent - หากเขาไม่ทำเช่นนั้นทำไมเขาจึงทำเครื่องหมายว่าเป็นคำตอบที่ยอมรับได้เมื่อเขาสามารถตอบคำตอบ SQL Lite ได้ด้านล่าง
Jon Hopkins

30

หลายโปรแกรมฝังSQLite อ้างจากเว็บไซต์ของพวกเขา:

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

คุณเพียงแค่ใช้หนึ่งใน API ที่มีอยู่สร้างฐานข้อมูลตาราง ฯลฯ และเอ็นจิ้น SQL จะเก็บข้อมูลทุกอย่างในไฟล์ไบนารีที่คุณสามารถวางไว้ที่ใดก็ได้ภายในระบบไฟล์ของผู้ใช้ เหนือสิ่งอื่นใดคือ FLOSS


23

เรือ Windows ด้วยและการใช้เครื่องมือฐานข้อมูลชื่อExtensible เก็บโปรแกรม (ESE)

ESEใช้งานโดย Active Directory, Exchange Server, Windows Mail และ Desktop Search ท่ามกลางบริการและแอพพลิเคชั่นอื่น ๆ ของ Windows

สำหรับการพัฒนามีโอเพนซอร์สของ ESE wrappers อยู่:

ด้วยการจัดส่ง ESE กับ Windows ทุกรุ่นคุณไม่ต้องกังวลเรื่องการปรับใช้ฐานข้อมูล สถาปัตยกรรม ESE เติมบทบาทที่คล้ายกันกับฐานข้อมูลที่ฝังตัวเช่น SQLite


อาจเป็นเพราะความล้มเหลวในการโปรโมตคุณลักษณะนี้ !! เป็นไปได้อย่างไรที่ฉันได้พัฒนาเทคโนโลยีของ Microsoft มาเกือบ 90 ปีแล้วและฉันไม่เคยได้ยินเรื่องนี้มาก่อน? การขาด front-end ที่ดีอาจเป็นอีกสาเหตุหนึ่ง จากวิกิพีเดีย: "เป็นเวลาหลายปีที่มีการใช้ API ส่วนตัวโดย Microsoft เท่านั้น แต่ได้กลายเป็น API ที่เผยแพร่ซึ่งทุกคนสามารถใช้ได้" นอกจากนี้: "JET Blue API ถูกตีพิมพ์ในปี 2005 เพื่ออำนวยความสะดวกในการใช้งานโดยจำนวนแอปพลิเคชันและบริการที่เพิ่มขึ้นทั้งในและนอก Windows"
ไมค์รองรับโมนิก้า

8

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


นั่นคือประเด็น: ทำไมไม่เพียงใช้ Microsoft SQL Server (Express หรือใบอนุญาตพิเศษสำหรับเซิร์ฟเวอร์ในพื้นที่เดียวของ SQL ที่ติดตั้งไว้แล้วในทุกแพลตฟอร์ม Windows) แทนที่จะเป็นฐานข้อมูลแบบฝังตัว (ไม่ใช่ SQL?) หรือรูปแบบไบนารีนอกโลกเช่น Microsoft Outlook ?
Arseni Mourzenko

เพราะอย่างที่เขาพูด SQL นั้นไม่เหมาะสำหรับทุกสิ่ง ที่เก็บข้อมูลเฉพาะแอปพลิเคชันจำนวนมากเขาจะปรับให้เหมาะสมสำหรับงานเดียวและผลลัพธ์จะเร็วกว่า SQL ที่มีขนาดเล็กกว่า
Jon Hopkins

3
@MainMa: ตอนนี้คุณเพิ่งเพิ่มการพึ่งพาเพิ่มเติม: ผู้ใช้จะต้องติดตั้งและใช้งาน SQL Server นี่ไม่ใช่เรื่องเล็กน้อย หากมีการติดตั้ง localhost SQL Server พิเศษไว้ในคอมพิวเตอร์ Windows ทุกเครื่องอาจแตกต่างกัน แต่ก็ไม่ได้เกิดขึ้น
David Thornley

SQLServer Compact นั้นง่ายต่อการติดตั้ง: เพียงแค่คัดลอกไฟล์จำนวนหนึ่ง
MarkJ

7

เหตุใด Windows จึงไม่ใช้ฐานข้อมูล SQL "กลาง" ใด ๆ

อันที่จริงแนวคิดนี้ได้รับการพัฒนาที่ Microsoft มาระยะหนึ่งแล้ว มันถูกเรียกว่าWinFS มันเป็นเทคโนโลยีที่น่าสนใจและมีให้สำหรับสมาชิก MSDN บางวันฉันจะติดตั้งบน VM และเล่นกับมัน


2
ฉันยังจำได้ว่า WinFS เป็น "สิ่งที่ยิ่งใหญ่ต่อไป" สำหรับ Windows (ในเวลานั้น) Longhorn ย้อนกลับไปเมื่อฉันยังรู้วิธีใช้พีซี :-)
เดนิสเดอเบอร์นาดี

6

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

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

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

โปรแกรมเมอร์ส่วนใหญ่จะพิจารณาจาก:

  • ฉันรู้ว่าแอปควรทำอะไรนี่คือทั้งหมดที่ควรทำ

  • แอพของฉันเป็นสิทธิ์เพียงอย่างเดียวที่จะเข้าถึงและ / หรือจัดการข้อมูลเหล่านี้

  • โครงสร้างไฟล์ที่เรียบง่ายของการออกแบบของฉันจะทำงาน

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


1
+1 คุณพูดถูก: ไม่มีการเชื่อมต่อหลายแอปสำหรับเดสก์ท็อป (ในกรณีส่วนใหญ่) ซึ่งจะลดประโยชน์ของฐานข้อมูล SQL
Arseni Mourzenko
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.