Який найкращий спосіб визначити, коли доцільно використовувати базу даних?


13

Я розпочав свою кар'єру програмування у веб-розробці за допомогою PHP та MySQL. Я досить звик використовувати db для зберігання найбільш динамічних даних, а також деяких даних налаштувань / параметрів. Іноді даних було б дуже багато, тоді як записів в інших випадках у таблицях було б мало. Мені це здалося природним, і наскільки я знаю, це більш-менш прийнятний підхід у веб-розробці. (Будь ласка, виправте мене, якщо я помиляюся ...)

Я зараз заглиблююся в настільні додатки, і моя природна схильність полягає в тому, щоб знову використовувати db для зберігання багато інформації, яка буде генерована за допомогою використання програми. Однак, наскільки я можу сказати, я не бачу програм (які я використовую), які використовують db дуже часто. [EDIT: З тих пір було зазначено, що це було помилковим припущенням, що багато додатків використовують легкі dbs, вбудовані в саму програму.] У чому причина цього? У який момент доцільно використовувати db? Чи є стандарти щодо цього? Також які причини НЕ використовувати db для розробки програми для настільних ПК?


2
"Однак, наскільки я можу сказати, я не бачу програм (які я використовую), які використовують db дуже часто"? На основі чого? Якщо вони використовували SQLite, як ви могли сказати, чи не використовували вони базу даних?
С.Лотт

Тому я сказав, наскільки я можу сказати, оскільки знав, що існує можливість, що я помилявся. Я подумав, що можуть бути деякі програми, які використовують вбудований db ... Чи доволі часто це для програм, що використовують dbs?
Кеннет

@Kenneth: Будь ласка, Google для вбудованих БД як SQLite. Тут багато. Вони широко використовуються. AFAIK, iOS Apple використовує його на всі наполегливості. Будь ласка, Google.
С.Лотт

2
Я багато в Google. Іноді ніщо не замінює досвідчених думок, які не завжди можна знайти в Google.
Кеннет

1
Я думаю, що цих коментарів достатньо для виправлення помилкового припущення. Прошу вибачення за помилку. Я відчуваю, що використовую здорову суміш з гугла і задаю питання. Іноді не існує заміни останньому IMHO. Тепер мій googling буде краще спрямований і продуктивніший.
Кеннет

Відповіді:


4

якщо ваша програма орієнтована на документи, зберігайте речі у файлі документа

якщо ваша програма має справу з більш структурованими даними, занадто багато для одного документа (наприклад, XML-документа), використовуйте базу даних


7

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

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

При веб-розробці сервер, природно, є зворотним кінцем, де база даних є частиною курсу. напр. Користувачі не повинні турбуватися про встановлення бази даних в їх кінці.


Тож ви б рекомендували не використовувати db для автономних додатків, хіба що великі обсяги даних дійсно не гарантують це?
Кеннет

які ваші думки щодо використання легких цифрових точок ... такі ж, як повномасштабні?
Кеннет

1
@Kenneth: Я б сказав "це залежить". Якщо додаток вимагає великого обсягу табличних даних, який дійсно вимагає наявності у належній БД, то аргумент може бути досить сильним, щоб доставити додаток з легким БД. Але якщо це лише дані конфігурації / налаштувань даних, то, ймовірно, це надмірно.
Столи Бобі

5

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

При цьому, системи баз даних досить багато використовуються в настільних додатках. Задовго до Інтернету настільні програми були підключені до СУБД. В першу чергу для додатків, які не базуються на документах. Хоча в ці дні, з кращою доступністю легких двигунів, ви бачите, що лінії трохи розмиті. Наприклад, я використовую db SQLite як документи в кількох своїх додатках.


+1 Якщо у вас немає складних проблем із збереженням, таких як багатокористувацька багатоповерхівка, одночасне блокування оновлень традиційною базою даних може бути надмірною. Якщо дані, про які йдеться, досить статичні (вони можуть зростати або додаватися до них, але не розвиваються та не оновлюються), а суперечка / змагання не є частою або перекрученою (побічні ефекти / досвід користувача для очікування на замок, щоб звільнити не є неприйнятним з огляду на ефективність та складність компромісів), можливо, вам не потрібна база даних.
JustinC

4

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

Я впевнений, що подібні варіанти є і на інших платформах.


1
Дуже схожий приклад з боку Java - Дербі. Я думаю, що є й інші.
jprete

1
Це здається, що це може бути ідеальним рішенням ... Мені дуже подобається використовувати db! lol
Кеннет

Чи є недоліки використання легких ЦБ?
Кеннет

@Kenneth: Вони збільшують вашу установку і можуть збільшити базу коду. Але це набагато менше, ніж установка цілого сервера баз даних на клієнті, що зазвичай робиться лише тоді, коли програма розповсюджується та потребує більш значної бази даних. Berkeley DB є одним з найбільш часто використовуваних.
Орблінг

Інший варіант - SQLite, який набагато легший як в оперативній пам'яті, так і на диску, і не має довільних обмежень. Недарма його використовують усі смартфони та веб-браузери, що не належать до MS.
Хав'єр

2

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

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

Програми GUI також можуть мати складні документи, які можуть оброблятися як складна павутина об'єктів у пам'яті. Нормалізація структури в реляційній схемі БД може додати суттєвої складності проблеми, іноді простіше просто серіалізувати всю справу за один байтовий потік. Багато структур OOP включають деякі засоби саме для цього.

Тим не менш, зробити збережені документи читабельними за допомогою інструментів поза основним додатком - це велика перевага в багатьох випадках, тому або використовуючи читані людими формати (XML, JSON, YAML тощо), або поштовий файл, що об'єднує декілька більш простих фрагментів, стає все більше і більше більш поширені.

З іншого боку, використання вбудованої бібліотеки баз даних (BDB, Tokyo Cabinet, SQLite, MS-SQL * сервер Compact тощо) є ще одним чудовим підходом.


1

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

Наприклад, врахуйте:

#include "superheader.h"

int main()
{
    int row=2, column=2;
    DatabaseType db;
    db.ConnectTo("programDB", "user", "pass");
    db.setTable("messages");
    string hello_world=db.fetch(row, column);
    cout<<hello_world;
    return 0;
}

Добре, що це надто спрощено, але очевидно, що це занадто багато. Немає реального сенсу мати такий рівень управління даними для "Hello World"

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

Існують різні стилі кодування, багато разів багато нічого поганого з базою даних, але більшість з нас просто не збираються йти «так далеко» для основних завдань. Є й інші випадки, коли правильна база даних може принести переваги продуктивності. Постарайтеся особливо зрозуміти відмінності в тому, де будуть знаходитися дані, як довго вони будуть знаходитись і що буде змінювати їх протягом їхнього життя.


1

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

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