Я заметил, где я работаю, люди стремятся хранить информацию в именах файлов и анализировать имена файлов.
Мне это не кажется особенно хорошей практикой. Я уже вижу случайные проблемы со сценариями, которые глобализируют файл, и получают неправильный, потому что другой файл совпадает первым. Мы также обсуждаем, как обойти проблемы с разделителями для полей.
Это считается плохой практикой или нет?
Каковы другие приемлемые решения для извлечения файлов из файловой системы на основе метаданных определенного типа?
programming-practices
wobbily_col
источник
источник
Ответы:
Да, я думаю, что это плохая практика. Он подвержен всевозможным проблемам - например, ограничения длины, проблемы кодирования и конфликты из-за дублирования данных.
Лучше использовать «главный файл» (иногда называемый манифестом или индексом), который содержит метаданные и пути к файлам. Или что-то подобное в базе данных, зарегистрироваться или еще много чего. Или поместить метаданные внутри фактических файлов, на верхнем уровне некоторой структуры данных, содержащейся в файле, например, в JSON или XML.
Это несколько похоже на концепцию размещения информации или ключей пространства имен в хранилищах значений ключей. Я думаю, что это нормально, если вы используете его только для пространства имен и быстрого поиска - ключевые компоненты не предназначены для предоставления анализируемой информации. Если вам нужна эта информация, скопируйте ее в значение (файл в приведенном выше случае).
источник
Во-первых, метаданные - это размытое понятие.
Тем не менее, многие случаи метаданных в файлах уже существуют:
Тем не менее, этот короткий список не является аргументом в пользу практики.
Альтернативы:
источник
Похоже, вам нужна база данных.
Существует много проблем безопасности с размещением пользовательских данных в именах файлов. Допустим, у вас есть файл для каждого пользователя («username.txt»). Что происходит, когда кто-то регистрирует имя пользователя "../../../../etc/passwd", зависит от того, как вы фильтруете пользовательский ввод.
Фреймворки баз данных иногда помогут вам очистить вводимые пользователем данные.
источник
Нет ... ну .. не обязательно.
Если у вас есть строгое соглашение и общие средства синтаксического анализа и проверки (скрипты, библиотеки и т. Д.), Вы готовы к работе.
Возьмем, к примеру, системы управления пакетами и зависимостями (Maven, NuGet и тому подобное). Хотя многие будут использовать специальные файлы для метаданных для хранения более сложной информации, основная информация часто является частью самого имени файла. Опираясь на строгие соглашения, имя файла может содержать наиболее важную информацию о пакете: его поставщик, его имя, его версия, его тип. Иногда это все, что вам нужно ... 4 или 5 коротких кусочков информации.
Если метаданные просты, то соглашение об именовании файлов имеет смысл, не требуя ничего для внедрения. Его можно усилить с помощью очень простых инструментов и сценариев, не требующих базы данных, никакой специализированной инфраструктуры, всего лишь несколько сценариев и соглашение об именах.
Если ничто там не делает то, что вам нужно, и ваши потребности просты, я бы начал с этого.
ваши требования перерастают эту конвенцию? расширить его с помощью правильного файла метаданных. Вам позже нужно лучше поискать это? Уже есть хорошие решения для поиска файлов, которые доставят вас туда, куда вам нужно.
Дело не в том, что мне не нравятся базы данных, наоборот, они действительно мощные и полезные, но для их запуска требуется некоторое количество ресурсов. Их нужно устанавливать, резервировать, обслуживать, вам понадобится персонал, которому, если он не будет полностью выделен, придется посвятить часть своего времени этой инфраструктуре. Они также более сложны и загадочны для неспециалистов, теряют разработчика, который вас настраивал, и ваша система будет зависать вовремя, пока вы не найдете замену.
Никогда не стоит недооценивать силу низких технологий с надлежащим контролем, который может помочь вам в этом.
И к тому времени, когда вы перерастете свое низкотехнологичное решение, вы соберете весь опыт и требования для внедрения идеальной системы для ваших нужд.
источник
Во- первых, давайте договоримся , что файл находится . Файл представляет собой упакованные данные с именем, которое можно передавать, получать, создавать и удалять с помощью (очень близких к) атомарных операций.
Многие файловые системы (Mac OS и более поздние файловые системы Linux) используют «вилки», часто используемые для хранения ресурсов и метаданных. Такой подход к хранению метаданных был проблематичным в том смысле, что традиционные методы передачи по сети, методы резервного копирования и восстановления и методы копирования файлов были несовместимы, особенно когда исходная и целевая файловые системы по-разному понимали файловые вилки.
Имя файла используется для хранения метаданных, потому что а) оно всегда там, б) метаданные всегда присутствовали в имени файла (по крайней мере, при использовании расширений файлов) и в) имя файла претерпевает очень мало перевода при перемещении между системами (различия в регистре, ограничения набора символов, помимо ограничений символов).
Таким образом, имя файла является видимым, переносимым и управляемым. Это неплохая вещь для хранения метаданных.
Вероятно, лучшим решением для обращения к общим метаданным файла является использование хранилища контента , где хранилище контента может быть сконфигурировано со схемой метаданных, которая будет использоваться для файлов. Во многих случаях это излишне, но, IMHO, это путь для серьезного управления метаданными.
источник
Мое предположение заключается в том, что вы могли где-то видеть код, который делает небрежные или ломкие вещи с именами файлов, но это не означает, что «хранение метаданных в именах файлов» в целом плохо.
Имена файлов являются метаданными - это данные о данных в файле, не зависящие от самих данных файла. На самом деле, имена файлов настолько стары, что, вероятно, они являются каноническим примером метаданных.
Если вы считаете, что расширения файлов являются лишь конечной частью имени файла, то концепция «имя файла как метаданные» становится еще более неизбежной.
источник