Чи погана практика зберігати інформацію метаданих у назвах файлів? Кращі рішення?


13

Я помітив, де я працюю, люди хочуть зберігати інформацію в іменах файлів та аналізувати імена файлів.

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

Це вважається поганою практикою чи ні?

Які ще прийняті рішення для отримання файлів з файлової системи на основі певного типу метаданих?


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

Відповіді:


14

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

Краще використовувати «головний файл» (іноді його називають маніфестом чи індексом), який містить метадані та шляхи до файлів. Або щось подібне в базі даних, реєстрі чи що. Або розмістити метадані всередині фактичних файлів, на верхньому рівні якоїсь структури даних, що міститься у файлі, наприклад, JSON або XML.

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


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

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

1
@wobbily_col, залежно від системи, яку ви використовуєте, може бути підтримка розширених атрибутів файлів .
Hellion

@AxelKemper Є лише стільки інформації, яку можна вписати в ім’я. Метаданих більше, ніж ім’я та автор.
Тулен Кордова

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

5

По-перше, метадані - це розмита концепція.

Однак, багато випадків метаданих у файлах вже є:

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

Тим не менш, цей короткий список не є аргументом на користь практики.

Альтернативи:

  • обробляти метадані на рівні FS, як, наприклад, стара HFS Apple
  • помістити метадані у сам файл, як Exif для зображень або ID3 для звуків
  • помістити метадані в інший файл або в базу даних, як і більшість медіа-менеджерів.

5
Все - розмита концепція. Навіть «розмитість», «концепція» та «все» - це розмиті поняття.
Tulains Córdova

3

Це здається, що вам потрібна база даних.

Існує багато проблем із безпекою щодо введення даних користувачів у імена файлів. Скажімо, у вас є файл для кожного користувача ("username.txt"). Що відбувається, коли хтось реєструє ім'я користувача "../../../../etc/passwd", залежить від того, як ви фільтруєте введення користувача.

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


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

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

1
@mouviciel Мені невідома жодна операційна система, яка аналізує ім’я користувача з імені домашнього каталогу користувача. Windows та Unix-подібні системи зберігають ім'я каталогу в якійсь базі даних та завантажують його в середовище, коли користувач входить у систему. В обох системах ви можете визначити, що ім'я домашнього каталогу відрізняється від імені користувача ( наприклад, перейменування користувачів або якщо у вас на одному системному розділі встановлено два вікна).
Жуль

2

Ні ... ну .. не обов’язково.

Поки у вас є чітка конвенція та загальні засоби розбору та перевірки (скрипти, бібліотеки тощо), які легко доступні, ви готові йти.

Візьмемо для прикладу системи управління упаковкою та залежностями (Maven, NuGet тощо). Хоча багато хто використовуватиме конкретні файли для метаданих для зберігання більш вдосконаленої інформації, основна інформація часто є частиною самого імені файлу. Спираючись на суворі умови, ім'я файлу може містити найбільш релевантну інформацію про пакет: це постачальник, ім'я, версія, тип. Іноді це все, що вам потрібно ... 4 або 5 коротких відомостей.

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

Якщо нічого там зовсім не те, що вам потрібно, і ваші потреби прості, я б почав з цього.

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

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

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

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


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

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

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

0

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

Багато файлових систем (Mac OS та новіших файлових систем Linux) реалізують "вилки", які часто використовуються для зберігання ресурсів та метаданих. Такий підхід до зберігання метаданих був проблематичним тим, що традиційні методи передачі мережі, способи резервного копіювання та відновлення та методи копіювання файлів були непослідовними, особливо коли файлові системи джерела та місця призначення по-різному розуміли файлові форки.

Ім'я файлу використовується для зберігання метаданих, оскільки: а) воно завжди є; б) метадані завжди були присутні в імені файлу (принаймні, при використанні розширень файлів); ​​в) ім'я файлу зазнає дуже мало перекладу при переміщенні між системами (відмінність регістру, обмеження набору символів, обмеження символів убік).

Отже, ім'я файлу є видимим, портативним та керованим. Це не погано для зберігання деяких метаданих.

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


0

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

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

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

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