Чому 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.
Аллон Гуралнек

8
Під базою даних він означає реляційну базу даних.
Олів'є Якот-Дескомб

Відповіді:


20

1) Взагалі кажучи, накладні витрати на запуск повноцінного RDBMS занадто великі, і це додало б зайвого навантаження на систему та складність.

Якщо встановити інший, це полегшує ваше життя розробнику, але робить життя власника машини гіршим, оскільки їхня машина, швидше за все, працюватиме повільніше та матиме більше проблем. У конфронтаціях розробника проти користувача користувач повинен майже завжди вигравати.

2) У багатьох сховищах даних є конкретні потреби, які не задовольняються чимось на зразок SQL Server Express.

Наприклад, журнали помилок повинні записуватися до найпростішої можливої ​​речі, щоб максимально збільшити ймовірність того, що запис станеться і дані будуть доступними. SQL Server ніколи не буде таким простим.

Для більш складних застосувань аргумент має тенденцію до оптимізації для дуже конкретних випадків користувача - плоскі файли можуть блискавити.


5
Я не думаю, що він мав на увазі тип бази даних, де потрібно встановити цілий сервер. SQLite працює без сервера і широко поширений у відкритих програмах.
Лоран

@Laurent - якщо він цього не зробив, то чому він позначив його як прийняту відповідь, коли міг прийняти відповідь SQL Lite нижче?
Джон Хопкінс

30

Багато програм вбудовують SQLite . Цитуючи їх веб-сайт:

SQLite - бібліотека програмного забезпечення, що реалізує автономну, безсерверну, нульову конфігурацію, транзакційний двигун бази даних SQL. SQLite - це найбільш розповсюджений двигун бази даних SQL у світі. Вихідний код для SQLite знаходиться у відкритому доступі. "

Ви просто використовуєте один із доступних API, створюєте базу даних, таблиці тощо, і SQL-движок зберігатиме все у двійковому файлі, який ви можете розмістити в будь-якому місці файлової системи користувача. Найкраще, що це FLOSS.


23

Windows поставляється з і використовує двигун бази даних під назвою Extensible Storage Engine (ESE) .

ESE використовується Active Directory, Exchange Server, Windows Mail та Desktop Search серед багатьох інших служб і програм Windows.

Для розробки відкриті коди ESE обгортки існують:

Завдяки доставці ESE з усіма сучасними версіями Windows у вас немає проблем із розгортанням бази даних. Архітектурно ESE виконує подібну роль із вбудованими базами даних, такими як SQLite.


Можливо через невдачу просувати цю функцію !! ?? Яким чином може бути те, що я розвивався майже виключно з технологіями Microsoft з 90-х, і я ніколи про це не чув? Відсутність хорошого фронтального проекту може бути ще однією причиною. З Вікіпедії: "Протягом багатьох років це був приватний API, використовуваний лише Microsoft, але з тих пір став опублікованим API, яким може користуватися кожен". Також: "API JET Blue був опублікований у 2005 році для полегшення використання постійно зростаючої кількості додатків і служб як у Windows, так і за її межами."
Майк підтримує Моніку

8

Реляційні бази даних не є найбільш ефективною структурою даних для кожного домену. Багато настільних додатків використовують вбудовані бази даних, ви просто не можете легко сказати, що вони роблять це, якщо ви бачите лише пару файлів даних.


У цьому справа: чому б не просто використовувати Microsoft SQL Server (Express? Або спеціальну ліцензію на один локальний сервер SQL Server, попередньо встановлений на кожній платформі Windows?), А не вбудовані (не SQL?) Бази даних або власний позаземний бінарний формат, як це робить Microsoft Outlook ?
Арсеній Муренко

Тому що, як він сказав, SQL не є оптимальним для всього. У багатьох сховищах даних, що стосуються додатків, він буде оптимізований для однієї задачі, і в результаті він буде швидшим, ніж SQL з меншою площею.
Джон Хопкінс

3
@MainMa: Ви тільки що додали додаткову залежність: користувач повинен встановити і запустити SQL Server. Це не банально. Якщо на всіх комп’ютерах Windows було встановлено спеціальний локальний сервер SQL Server, це може бути інакше, але це не відбувається.
Девід Торнлі

SQLServer Compact простий в установці: просто скопіюйте пару файлів.
MarkJ

7

Чому сама Windows не використовує жодної "центральної" бази даних SQL?

Власне, ця ідея розробляється в Microsoft вже певний час. Він називається WinFS . Це інтригуюча технологія, і вона доступна абонентам MSDN. Через кілька днів я збираюся встановити його на VM і пограти з ним.


2
Я все ще пам’ятаю, що WinFS була «наступною великою справою» для Windows (на той час) Longhorn, ще тоді, коли я ще знав, як користуватися ПК. :-)
Дені де Бернарді

6

Бази даних пропонують гнучкість, і, як і будь-яка функція, майже напевно це коштує. Якщо плоский файл працюватиме, ви можете припустити, що нікому не потрібно буде запитувати дані непередбачуваними способами, як у спеціальному звіті.

Бази даних також добре справляються з використанням декількох з'єднань / входів. Знову ж таки, якщо це не вимога для настільного додатка, навіщо додати додаткову складність? Скільки інших програм або користувачів намагаються записати у файл Outlook на комп’ютері, окрім користувальницького інтерфейсу / власне встановлення самого Outlook?

Було б простіше, якби всі дані знаходились у реляційній базі даних з точки зору "Я хочу мати можливість запитувати всі дані будь-яким способом, який я вважаю за потрібне з такою єдиною мовою, як SQL", але це рідко є пріоритетним для багатьох програм.

Більшість програмістів переглянуть це з:

  • Я знаю, що передбачає робити додаток, це все, що він повинен робити

  • мій додаток - це єдиний документ, який коли-небудь матиме доступ та / або маніпулює цими даними

  • проста структура файлу мого власного дизайну буде працювати

  • хоча б для однієї програми я хотів би не покладатися на код інших людей і мати повний контроль.


1
+1. Ви маєте рацію: не існує декількох підключень для настільних додатків (у більшості випадків), що зменшує перевагу бази даних SQL.
Арсеній Мурценко
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.