Zauważyłem, gdzie pracuję, ludzie chętnie przechowują informacje w nazwach plików i analizują nazwy plików.
Nie wydaje mi się to szczególnie dobrą praktyką. Widzę już sporadyczne problemy ze skryptami globującymi plik i mylącym się, ponieważ inny plik jest dopasowywany jako pierwszy. Dyskutujemy również, jak obejść problemy z separatorami pól.
Czy jest to uważane za złą praktykę, czy nie?
Jakie są inne akceptowane rozwiązania dotyczące pobierania plików z systemu plików na podstawie pewnego rodzaju metadanych?
programming-practices
wobbily_col
źródło
źródło
Odpowiedzi:
Tak, myślę, że to zła praktyka. Podlega on wszelkiego rodzaju problemom - na przykład limitom długości, problemom z kodowaniem i konfliktom wynikającym z powielania danych.
Lepiej jest użyć „pliku głównego” (czasami nazywanego manifestem lub indeksem), który zawiera metadane i ścieżki do plików. Lub coś podobnego w bazie danych, rejestrze lub czymś podobnym. Lub umieścić metadane w rzeczywistych plikach, na najwyższym poziomie struktury danych zawartej w pliku, na przykład JSON lub XML.
Jest to nieco analogiczne do koncepcji umieszczania informacji lub kluczy przestrzeni nazw w magazynach klucz-wartość. Myślę, że jest to w porządku, o ile używasz go tylko do przestrzeni nazw i szybko wyszukujesz - nie ma tam kluczowych składników, które mogłyby dostarczyć parsowalne informacje. Jeśli potrzebujesz tych informacji, skopiuj je do wartości (plik w powyższym przypadku).
źródło
Po pierwsze, metadane to rozmyta koncepcja.
To powiedziawszy, wiele przypadków metadanych w plikach już istnieje:
Niemniej jednak ta krótka lista nie jest argumentem za praktyką.
Alternatywami są:
źródło
Wygląda na to, że potrzebujesz bazy danych.
Istnieje wiele problemów bezpieczeństwa związanych z umieszczaniem danych użytkownika w nazwach plików. Załóżmy, że masz plik dla każdego użytkownika („username.txt”). To, co się stanie, gdy ktoś zarejestruje nazwę użytkownika „../../../../etc/passwd”, zależy od tego, jak filtrujesz dane wejściowe użytkownika.
Frameworki baz danych czasami pomagają w odkażaniu danych wprowadzanych przez użytkowników.
źródło
Nie ... no cóż ... niekoniecznie.
Tak długo, jak masz ścisłą konwencję i powszechnie dostępne środki analizy i sprawdzania poprawności (skrypty, biblioteki itp.), Możesz iść.
Weźmy na przykład systemy zarządzania pakowaniem i zależnościami (Maven, NuGet i podobne). Chociaż wiele osób używa określonych plików metadanych do przechowywania bardziej zaawansowanych informacji, podstawowe informacje są często częścią samej nazwy pliku. Opierając się na ścisłych konwencjach, nazwa pliku może zawierać najistotniejsze informacje o pakiecie: jego dostawca, nazwa, wersja, typ. Czasami to wszystko, czego potrzebujesz ... 4 lub 5 krótkich informacji.
Jeśli metadane są proste, wówczas konwencja nazewnictwa plików ma sens i nie wymaga niczego. Można go wzmocnić za pomocą bardzo prostych narzędzi i skryptów, niepotrzebnej bazy danych, specjalistycznej infrastruktury, tylko kilka skryptów i konwencji nazewnictwa.
Jeśli nic tam nie robi, czego potrzebujesz, a twoje potrzeby są proste, zacznę od tego.
Twoje wymagania przerastają tę konwencję? rozszerz go o odpowiedni plik metadanych. Później potrzebujesz lepszego wyszukiwania? Istnieją już dobre rozwiązania do wyszukiwania plików, które zaprowadzą Cię tam, gdzie potrzebujesz.
Nie chodzi o to, że nie lubię baz danych, wręcz przeciwnie, są one naprawdę potężne i użyteczne, ale wymagają pewnego nakładu pracy, aby zacząć. Muszą być instalowane, archiwizowane, utrzymywane, będziesz potrzebował personelu, który, jeśli nie będzie całkowicie poświęcony, będzie musiał poświęcić część swojego czasu na tę infrastrukturę. Są również bardziej złożone i tajemnicze dla laików, stracą twórcę, który cię skonfigurował, a twój system utknie w czasie, aż znajdziesz zastępcę.
Nigdy nie lekceważ potęgi niskiej technologii z odpowiednim nadzorem, który może zapewnić ci długą drogę.
A zanim wyrosniesz z niskonakładowego rozwiązania, zgromadzisz całe doświadczenie i wymagania, aby wdrożyć idealny system dla swoich potrzeb.
źródło
Najpierw uzgodnijmy, co to jest plik . Plik to spakowane dane o nazwie, które można przesyłać, odbierać, tworzyć i usuwać za pomocą (bardzo zbliżonych) operacji atomowych.
Wiele systemów plików (Mac OS i nowsze systemy plików Linux) implementuje „widelce”, często używane do przechowywania zasobów i metadanych. Takie podejście do przechowywania metadanych było problematyczne, ponieważ tradycyjne metody przesyłania sieciowego, metody tworzenia kopii zapasowych i przywracania oraz metody kopiowania plików były niespójne, szczególnie gdy źródłowy i docelowy system plików różnie rozumiał rozwidlenia plików.
Nazwa pliku służy do przechowywania metadanych, ponieważ a) zawsze tam jest, b) metadane zawsze były obecne w nazwie pliku (przynajmniej przy użyciu rozszerzeń plików), c) nazwa pliku ulega bardzo niewielkiemu tłumaczeniu podczas przenoszenia pomiędzy systemami (rozróżnienie wielkości liter, ograniczenia zestawu znaków, ograniczenia znaków poza).
Nazwa pliku jest więc widoczna, przenośna i łatwa do zarządzania. Nie jest to zła rzecz do przechowywania niektórych metadanych.
Prawdopodobnie najlepszym rozwiązaniem dla ogólnych metadanych plików jest użycie repozytorium treści , w którym repozytorium treści można skonfigurować za pomocą schematu metadanych dla plików. W wielu przypadkach jest to przesada, ale IMHO jest drogą do poważnego zarządzania metadanymi.
źródło
Podejrzewam, że mogłeś zobaczyć gdzieś kod, który robi niechlujne lub kruche rzeczy z nazwami plików, ale to nie znaczy, że „przechowywanie metadanych w nazwach plików” jest ogólnie złe.
Nazwy plików to metadane - są to dane o danych w pliku, niezależnie od samych danych pliku. W rzeczywistości nazwy plików są tak stare, że prawdopodobnie są kanonicznym przykładem metadanych.
Jeśli weźmiesz pod uwagę, że rozszerzenia plików są tylko końcową częścią nazwy pliku, to koncepcja nazwy pliku jako metadanych staje się jeszcze bardziej nieunikniona.
źródło