Чи має сенс використання сервера баз даних, якщо програма працює лише локально?


41

Я бачив деякі програми, які в основному є прикладним програмним забезпеченням, які працюють локально в системі (тому вони не мають багато зв'язку з мережею). Ці програми, схоже, залежать від серверів баз даних для зберігання своїх даних.

Приклад програми - Amarok (популярний музичний плеєр в Linux). Я не знаю, чи вони все ще роблять це, але я пам’ятаю, що був час, коли встановлення Amarok означало, що вам доведеться встановити MySQL-сервер і постійно працювати у фоновому режимі.

Яка перевага використання сервера для локального зберігання порівняно з використанням меншого вбудованого рішення SQL, як sqlite? Я кажу про прикладне програмне забезпечення взагалі, не обов’язково amarok (це був лише приклад). Чи існують ситуації, коли використання сервера баз даних має сенс порівняно із вбудованою базою даних?


4
Наявність бази даних може бути дуже важливою. Наявність бази даних у процесі чи окремої бази даних є вибором / деталізацією реалізації.
9000

2
Я розумію, що. Питання детальніше про те, чому б ви вибрали окрему базу даних процесів (наприклад, сервер mysql) над внутрішньою базою даних (як SQLite) для місцевих програм.
9a3eedi

Відповіді:


29

SQLite пропонує досить хороший час, коли його використовувати чи ні проти альтернатив:

https://www.sqlite.org/whentouse.html

Цей підсумковий рядок надзвичайно добре фіксує сценарій використання SQLite:

SQLite не конкурує з базами даних клієнт / сервер. SQLite конкурує з fopen ().

Стаття в цій частині розширюється в довжину. У ньому також є розділ під назвою "Ситуації, коли клієнт / сервер RDBMS може працювати краще". Коротше кажучи, це:

  • Клієнтські / серверні програми : декілька користувачів через мережу.
  • Веб-сайти з великою гучністю : пишіть інтенсивно або читайте досить інтенсивно, щоб вимагати чіткості.
  • Дуже великі набори даних : більше, ніж можна розумно зберігати на одному диску.
  • Висока паралельність : зокрема одночасне записування.

@ 9a3eedi: насправді серед цих чотирьох пунктів немає жодного, який описує сценарій із повним сервером баз даних у поєднанні з локальним сховищем (особливо перші два є прямо протилежними до цього) - тож ви не заперечуєте просвітити нас, чому ви вибрали це відповідь, хоча це не відповідає вашому первинному питанню? До речі, я відповів на цю відповідь саме з цієї причини.
Doc Brown

@DocBrown: Конкретні випадки, коли вам слід використовувати клієнт / сервер RDBMS, є [див. Відповідь]; для всього іншого SQLite працює чудово. Я не впевнений, що там незрозуміло, тому сміливо редагуйте відповідь, якщо вважаєте, що це потрібно.
Дені де Бернарді,

Оригінальне запитання стосувалося конкретних випадків, коли база даних AC / s має сенс, якщо програма робить лише локальні речі (цитуйте з назви) або використовуючи сервер для локального зберігання (цитуйте текст тексту). Чотири вищевказані сценарії або є прямо протилежними до цього (перші два), або дуже маловірогідними, або рідкісними як "локальні" сценарії (два інші). Тож те, що ви написали, не є помилковим, але воно не підходить до питання.
Док Браун

@DocBrown - і коротка відповідь така: це не має сенсу, якщо ви не маєте справу з великими наборами даних або потребуєте одночасних записів. (Або з очевидних причин, якщо вам потрібно щось, що не пропонує SQLite.) Знову ж, не соромтесь відредагувати відповідь, якщо ця точка для вас незрозуміла.
Дені де Бернарді,

Ну, якщо ви дійсно вважаєте, що цей список є повним (і так даєте приховане твердження, що для локального сценарію використання сервера БД C / S не має сенсу), то я не погоджуюся, і не думаю, що я можу вдосконалити Ваша відповідь, додавши деякі пояснення.
Doc Brown

28

Навіть для єдиної системи з одним користувачем "справжній" сервер баз даних має сенс:

  1. Тут використовується знайома мова ( SQL ). SQLite використовує SQL, але деякі вбудовані бази даних (наприклад, об'єктна база даних , NoSQL ) не використовують SQL. Вони мають більш високу криву навчання, оскільки вони рідше.
  2. Він забезпечує референтну цілісність, обмеження, тригери тощо, які такі продукти, як SQLite, можуть не надавати або принаймні надавати не в повному обсязі.
  3. Орієнтуючись на справжню багатокористувацьку мережеву базу даних, сумісну з ACID , програма має можливість працювати в одному сценарії одного користувача / однієї робочої станції або як багатокористувацька програма, що розміщується, використовуючи ту саму базу коду .
  4. Користувач має можливість перевіряти дані в режимі офлайн за допомогою стандартних інструментів (наприклад, SQL Developer, MySQL Workbench, SQL Server Management Studio), завантажувати або створювати резервні копії даних за допомогою цих інструментів тощо. Хоча це можна зробити з багатьма вбудованими базами даних різних типи, люди, можливо, більш знайомі з цими інструментами зі світу баз даних C / S.

Основним недоліком є ​​необхідність встановлення та обслуговування програмного забезпечення сервера баз даних, що є трохи складним для нетехнічних користувачів (і навіть багатьох технічних користувачів). Операційні системи, такі як Linux, спрощують це: у мене в системі Linux працюють PostgreSQL та MySQL. Я встановив додатки, які підключаються до них, майже не взаємодіючи з мого боку.


9
Насправді існує одна система баз даних (а саме Sybase SQL Anywhere) з повною підтримкою SQL, референтною цілісністю, ACID, збереженими процедурами, яка не вимагає налаштування сервера або установки як служби при запуску в локальній конфігурації (хоча це може бути налаштування для багатокористувацького середовища). Я не знаю жодної іншої системи баз даних із цими властивостями, якщо хтось її знає, мені було б цікаво.
Doc Brown

3
@DocBrown IIRC MS SQLServer Compact дає вам це, оскільки він виглядає як dll, хоча LocalDB, мабуть, кращий вибір - він не потребує встановлення як сервісу, хоча вимагає прав адміністратора.
gbjbaanb

5
Щоб додати до дискусії про валідність - окрім SQLite, що цікаво вже згадується у відповіді, ряд не-SQL баз даних та подібних до бази даних систем, наприклад, OrientDB, Solr та інші, мають спеціальну підтримку вбудовування .
mikołak

14
SQLite забезпечує референтну цілісність (хоча її потрібно ввімкнути) та основні обмеження. Це також значно швидше, ніж більшість серверів при правильному використанні. Основним недоліком порівняно з сервером є те, що він одноразовий.
Ян Худек

2
@DocBrown: Вбудована база даних Firebird забезпечує повну підтримку SQL, включаючи референтну цілісність, гарантії ACID, збережені програми та тригери. Він не використовувався для підтримки декількох одночасних з'єднань із вбудованою базою даних, і я не впевнений, чи існує все таке обмеження чи ні, але весь набір функцій SQL є.
Мейсон Уілер

21

Я думаю, що це стосується інерції.

Amarok базується на XMMS, який починається з 1997 року. Щоб мати хороші можливості бази даних, вам довелося використовувати сервер, оскільки він був набагато потужнішим, ніж файлові рішення, які аж ніяк не мали хороших можливостей бази даних.

Майбутня та набираюча популярність гарних локальних баз даних, таких як SQLlite, є нещодавно нещодавним.


Як я пам’ятаю, AmaroK 1 (який, можливо, базувався на XMMS) не залежав від сервера бази даних. Саме Amarok 2, який був випущений разом з KDE4, ввів залежність, і тоді мені було дуже дивно, що вони вимагатимуть встановити MySQL і тримати його у фоновому режимі
9a3eedi

10

Найважливіша дискримінаційна особливість - це одночасність .

Якщо у вас є лише одна програма, яка працює в одному екземплярі для користувача, зазвичай вбудоване рішення (незалежно від sqlite чи деякого об'єкта).

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


5

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

Якщо ви вважаєте, що ваш додаток може перетворитись на додаток клієнт / сервер, ви можете почати використовувати RDBMS з самого початку, а не надсилати його згодом.

Я поняття не маю, чи може цей приклад скористатися цим чи ні.


2

Якщо ви не працюєте з вбудованою системою з низькою пам’яттю та процесором, я не думаю, що запуск сервера на задньому плані не приносить вам ніякої шкоди.

Запуск сервера бази даних локально. База даних призначена для доступу та маніпулювання даними. Доступ до мережі - це плюс, який може бути або не потрібен. Є деякі інженерні та наукові інструменти, які роблять це.

Скажіть, ви використовуєте дані в локальній програмі. Чому б вам не використовувати базу даних? на відміну від чого?


Якби я розгорнув додаток для звичайних користувачів (скажімо, музичний плеєр, як AmaroK), я би подумав, що їх встановлення MySQL-сервера та його запуск у фоновому режимі - це занадто велика системна вимога, і користувачі будуть щось не подобається. Але я думаю, це залежить від програми. Це на відміну від використання чогось типу SQLite.
9a3eedi

2

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

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

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

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

Для випадку Amarok, напевно, це був вибір на той час СУБД з відкритим кодом, перш ніж вони вибирали шлях вбудованих баз даних.

Якщо у вас є певне визначення системи, вам буде легше визначити мінуси та плюси.

В / р, Умут

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.