Як визначитися між форматами зберігання даних та якими є приклади використання для деяких із них?


10

У нас є різні способи зберігання програмних даних (збереження файлів в іграх, базах даних співробітників, конфігурації програми тощо):

  • Простий текст (подумайте .iniі .conf)
  • XML
  • Бази даних (MySQL, SQLite ...)
  • .zip і подібне, що містить кілька файлів (з різними форматами)
  • Бінарні файли (думати .docі т.д., наприклад, створений інструментом серіалізації)

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

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

message.txt (containing the message)
attachments (folder containing attachments)
  audio.wav
  picture.jpg

wrt binary, врахуйте буфер протоколу Google. Можливість лінивої десеріалізації є приголомшливою, і ви завжди маєте можливість витягнути її та зберегти у форматі тексту (на декількох мовах C ++ / Java / Python).
Матьє М.

Відповіді:


6

Я використовую наступне:

Простий текст

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

XML

Для конфігурації та транспортування даних; наприклад, експорт, формат через XSLT тощо. Хороший як формат переносного файлу (наприклад, SVG). Відмінні засоби маніпуляції та фільтри.

Бази даних

Основне зберігання даних з додатка / webapp. Використовуйте це весь час як вибір на зберігання. Це надійно, надійно, і ви отримуєте багато вбудованого (транзакції, референтна цілісність, каскадне видалення / оновлення, індекси, швидкість). Найкраще використовувати з шаром або ORM (IMO).

Архів одного файлу (наприклад, .zip)

Підходить для компактного зберігання пов'язаних кількох бінарних потоків, наприклад, зображень ROM для емулятора. Найкраще для речей, які не часто або ніколи не потрібно оновлювати. Це важка вага, повільна і важка маніпуляція;

Двійкові

Тільки там, де база даних не доступна для зберігання даних додатків. Найпростіше за допомогою серіалізації (C ++). Сильно налаштований двійковий формат випереджає всі інші за швидкістю та розміром.


4

Срібної кулі немає. З мого досвіду:

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

XML : Введіть безпеку, перевірку даних, низький об'єм, і в деяких випадках я їх використовую, оскільки .NET має потужну вбудовану підтримку серіалізації XML-об'єктів

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

.zip - формат стиснення, не знаєте, як це вписується в стійкість ..?

Бінарний : я використовую двійковий лише тоді, коли мені потрібно створити тимчасовий потік пам'яті. Бінарне не додає значення способу здатності до запитів порівняно з БД або XML, де мої дані організовані за схемою.

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


3

Я використовую їх наступним чином:

Простий текст

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

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

XML

Я погоджуюся з @Ingo тут - на відміну від простого тексту XML важче обробляти за допомогою сценаріїв, а кошмар редагувати від руки imo.

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

Реляційна база даних

Чудовий вибір, коли у вас є багато даних (які б зробили звичайний текст і громіздкий XML), що ви, можливо, захочете дозволити третім сторонам редагувати вручну - через команди SQL і навіть графічний інтерфейс.

Ще одна перевага полягає в тому, що ваш код, який керує вмістом, дуже читабельний. @ Річард-Гаррісон у своїй чудовій відповіді надав хороший перелік інших переваг.

NoSQL База даних

Одна перевага перед RDBMS - це масштабованість через розподіл, що, мабуть, не дуже стосується вашого питання. Переваги, які, ймовірно, більш актуальні, - це простота зберігання ключових значень і гнучкість безсхемості (це слово?). Коли ви виявите, що ви порушуєте реляційну парадигму: просто зберігайте краплі в базі даних, отримуючи доступ до них за ключем та обробляючи їх за допомогою коду, тоді розгляньте цей варіант. Деякі варіанти (наприклад, CouchDB) дуже портативні, мають невеликий слід і можуть також масштабуватись, тому вони пропонують хорошу нереляційну альтернативу MySQL та SQLite.

Двійкові

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

Хочу зазначити, що я ще не стикався з випадком, коли в якийсь момент не потрібен простий доступ до даних програми з причин, які не розглядалися під час початкового проектування. Сьогодні я особисто задіюю параметр бази даних для будь-якого іншого, крім файлів, які мають стандартні формати та потребують кодування / декодування іншим програмним забезпеченням (наприклад, аудіо, відео).

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

Стислий архів

Насправді не альтернатива вищесказаному, а скоріше зайвий захід.

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

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


2

Я б використовував їх так:

  • Звичайний текст : Програма має невеликий розмір просто структурованих даних (пари значень імен, наприклад). Дані не змінюються одночасно кількома користувачами.
  • XML : Невеликий розмір структурованих даних, які не змінюються одночасно або часто.
  • База даних : потрібні великі структуровані дані або паралельний доступ. Потреба в запитах та пошуку - обов’язкова в додатку.
  • Бінарні дані: я б використовував це лише для потокового передавання об'єктів.
  • zipping - це стиснення, яке може бути додане як інший процес для будь-якого з перерахованих вище, крім баз даних на серверах.

1

Я чув, що XML поєднує в собі найгірші риси тексту (важко / повільно обробляти) та двійкові (нечитабельні).


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