база даних проти плоских файлів


78

Компанія, в якій я працюю, намагається переключити продукт, який використовує плоский формат файлу, у формат бази даних. Ми обробляємо досить великі файли даних (тобто: 25 Гб / файл), і вони оновлюються дуже швидко. Нам потрібно запускати запити, які довільно отримують доступ до даних, а також суміжним способом. Я намагаюся переконати їх у перевагах використання бази даних, але деякі мої колеги, схоже, не хочуть цього. Тож мені було цікаво, чи можете ви, хлопці, допомогти мені з якихось причин або з посиланнями на повідомлення про те, чому ми повинні використовувати бази даних, або, принаймні, пояснити, чому плоскі файли краще (якщо вони є).


13
Слід згадати, про яку структуру даних ви тут говорите. Якщо кожен із цих 25 ГБ файлів перетвориться на 25 рядків по 1 ГБ кожен, то, мабуть, вам краще з вашими плоскими файлами.
Джош Девіс,

1
Мені насправді цікавіше, чому ваші колеги не хочуть використовувати реляційну базу даних як вашу сховище даних? Geezus
Jeff

1
все залежить від різноманітних змінних. Неможливо сказати, що одне краще іншого.
DA.

3
@JD: безпека роботи, мабуть, не знаю, чому
гіперборій

@Josh Davis: просто структура, розділена табуляцією, яка містить різну інформацію, необхідну для нашого бізнесу
гіперборій

Відповіді:


99
  1. Бази даних можуть обробляти завдання запитів, тому вам не доведеться переходити за файлами вручну. Бази даних можуть обробляти дуже складні запити.
  2. Бази даних можуть обробляти завдання індексації, тому якщо такі завдання, як отримання запису з id = x, можуть бути ДУЖЕ швидкими
  3. Бази даних можуть обробляти багатопроцесорний / багатопотоковий доступ.
  4. Бази даних можуть обробляти доступ з мережі
  5. Бази даних можуть стежити за цілісністю даних
  6. Бази даних можуть легко оновлювати дані (див. 1))
  7. Бази даних надійні
  8. Бази даних можуть обробляти транзакції та одночасний доступ
  9. Бази даних + ORM дозволяють вам обробляти дані дуже зручно для програмістів.

41

Це відповідь, яку я вже дав деякий час тому:

Це повністю залежить від потреб додатка для конкретного домену. Багато разів прямий доступ до текстових файлів / двійкових файлів може бути надзвичайно швидким, ефективним, а також надавати вам усі можливості доступу до файлів у файловій системі вашої ОС.

Крім того, ваша мова програмування, швидше за все, вже має вбудований модуль (або його легко зробити) для конкретного аналізу.

Якщо вам потрібно багато додатків (INSERTS?) І послідовних / мало доступу мало / відсутні паралелі, файли - це шлях.

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

Багато чого можна досягти за допомогою SQLite3 , який є надзвичайно легким (до 300 кб), сумісним з ACID, написаним на C / C ++ і надзвичайно повсюдним (якщо він ще не включений у вашу мову програмування - наприклад, Python-, є, безсумнівно, один). Це може бути корисним навіть для файлів у форматі db розміром до 140 терабайт або 128 тебібайт ( посилання на розмір бази даних ), можливо більше.

Якщо ваші вимоги там, де більші, навіть обговорення не буде, перейдіть на повноцінну СУБД.

Як ви говорите в коментарі, що "система" - це просто купа сценаріїв, тоді вам слід поглянути на pgbash .


9

Не будуйте його, якщо можете купити.

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


Насправді, весь додаток - це лише пара дивних скриптів bash ... вся система - це одна людина, яка показує рухомі файли. Сумно, я знаю ...
гіперборей

3
Класно, але останнього я перевірив, що найкращі бази даних безкоштовні.
грак

6
На жаль, зворотне однаково вірно. Краще сказати: "Купуйте хороші рішення, які відповідають вашим потребам, якщо вони існують, інакше будуйте їх"
DA.

6

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

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

Вони мають більше можливостей; бази даних можуть дозволити багатьом користувачам одночасно читати / писати.

Після налаштування вони набагато менш складні для роботи.


3

Бази даних на всьому шляху.

Однак, якщо у вас все ще є необхідність зберігати файли, не маєте можливості використовувати нові СУБД (такі як Oracle, SQLServer тощо), ніж вивчати XML.

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

Я настійно рекомендую БД, але якщо ви не можете піти цим шляхом, XML - це нормально.


3
Але Oracle і SQL Server коштують грошей, навіщо платити за щось, коли краще краще? MySQL на всьому шляху.
грак

4
Якщо вони мають CSV-файл розміром 25 Гб, це може легко подвоїтись (якщо не більше) за допомогою тегів XML для рядків і стовпців. Просто сказати, що значне роздуття - це міркування при переході від плоских файлів до XML.
Binary Worrier 01.03.10

5
@Scott Root: Мені особисто не подобається XML, оскільки я вважаю його важким методом передачі даних.
гіперборей

2
Замість Oracle або SQL Server ви також можете використовувати PostgreSQL. Дуже потужні, XML і CSV також можливі як вхідні дані. Звичайний XML буде дуже повільним, занадто великим.
Френк Хейкенс 01.03.10

1
@Rook Цікаве спостереження - що MySQL кращий за Oracle та SQL Server. Ви, очевидно, ніколи не працювали з програмним забезпеченням на рівні Enterprise.
NullUserException

3

Що можна сказати про нереляційну (NoSQL) базу даних, таку як Amazon SimpleDB, кабінет Tokio тощо? Я чув, що Google, Facebook, LinkedIn використовують їх для зберігання своїх величезних наборів даних.

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


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

3

Про типи файлів не йдеться. Якщо це медіафайли, продовжуйте використовувати плоскі файли. Ймовірно, вам просто потрібна БД для тегів і якийсь спосіб пов’язати „зовнішні BLOB” із записами в БД. Але якщо вам потрібен повнотекстовий пошук, немає іншого шляху, окрім переходу на повну БД.

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


2

Спеціальні можливості запитів SQL для мене є достатньою причиною. Завдяки хорошій схемі та індексації в таблицях це швидко та ефективно, і матиме хороші показники.


2

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

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


2

Різниця між базами даних та площими файлами наведена нижче:

  • База даних забезпечує більшу гнучкість, тоді як плоский файл забезпечує меншу гнучкість.

  • Система баз даних забезпечує узгодженість даних, тоді як плоский файл не може забезпечити узгодженість даних.

  • База даних надійніше захищена від плоских файлів.
  • База даних підтримує DML та DDL, тоді як плоскі файли не можуть їх підтримувати.

  • Менше резервування даних у базі даних, тоді як більше резервування даних у плоских файлах.

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