메타 데이터 정보를 파일 이름으로 저장하는 것은 나쁜 습관입니까? 더 나은 솔루션?


13

나는 사람들이 작업하는 곳에서 파일 이름으로 정보를 저장하고 파일 이름을 구문 분석하는 데 관심이 있음을 알았습니다.

나에게 이것은 특히 좋은 연습이 아닌 것 같습니다. 스크립트에서 파일을 가져 오는 경우가 가끔 발생하고 다른 파일이 먼저 일치하기 때문에 잘못된 파일이 표시되는 경우가 종종 있습니다. 또한 필드의 구분 기호 문제를 해결하는 방법에 대해서도 논의하고 있습니다.

나쁜 습관으로 간주됩니까?

일부 유형의 메타 데이터를 기반으로 파일 시스템에서 파일을 검색하는 데 허용되는 다른 솔루션은 무엇입니까?


파일 이름에 정확히 무엇이 저장되어 있는지에 달려 있습니다. 몇 가지 예를 들어 주시겠습니까?
T. Sar

답변:


14

예, 나쁜 습관이라고 생각합니다. 길이 제한, 인코딩 문제 및 중복 데이터로 인한 충돌과 같은 모든 종류의 문제가 발생합니다.

메타 데이터와 파일 경로가 포함 된 "마스터 파일"(매니페스트 또는 인덱스라고도 함)을 사용하는 것이 좋습니다. 또는 데이터베이스, 등록 또는 기타에서 비슷한 것. 또는 메타 데이터를 실제 파일 내에 넣거나 JSON 또는 XML과 같이 파일에 포함 된 일부 데이터 구조의 최상위 수준에 배치합니다.

이것은 키 값 저장소에 정보 또는 이름을 지정하는 키를 넣는 개념과 다소 유사합니다. 네임 스페이스에만 사용하고 빠른 조회를 수행하는 한 이것이 괜찮다고 생각합니다. 핵심 구성 요소는 파싱 가능한 정보를 제공하지 않습니다. 해당 정보가 필요한 경우 해당 정보를 값으로 복제하십시오 (위의 경우 파일).


3
직감이 높아지고 있습니다. 그럼에도 불구하고 파일 이름에 정보를 넣는 것이 합리적 일 수 있습니다. 규칙 기반 방식으로 라우팅되거나 처리되어야하는 메일 첨부 파일을 생각하십시오. 많은 병렬 프로세스가 마스터 파일을 변경해야하는 경우 병목 현상이 발생할 수 있습니다.
Axel Kemper

데이터베이스 개발자로서 필자는 매니페스트 파일 대신 데이터베이스를 사용하려고 생각합니다 (여기에서 다른 방법을 요청하는 이유 중 하나). 그것은 동시 액세스 문제를 해결할 것이지만 더 복잡한 솔루션입니다.
wobbily_col

1
@wobbily_col은 사용하는 시스템에 따라 사용 가능한 확장 파일 속성 이 지원 될 수 있습니다.
Hellion

@AxelKemper 이름에 맞는 정보는 너무 많습니다. 이름과 저자보다 더 많은 메타 데이터가 있습니다.
Tulains Córdova

말할 것도없이 파일명은 시스템 외부의 누군가가 변경하여 예상되는 형식을 손상시킬 수 있습니다. 적절한 파일 권한이 적용 되더라도 취하기 쉬운 솔루션이됩니다.
Berin Loritsch 2016 년

5

첫째, 메타 데이터 는 모호한 개념입니다.

즉, 파일에 많은 메타 데이터 사례가 이미 존재합니다.

  • 라이브러리의 버전 번호
  • 이미지의 날짜와 시간 또는 적어도 시퀀스 인덱스
  • 어떤 응용 프로그램이 파일을 열어야하는지 트리거하는 파일 유형
  • 홈 디렉토리 이름 (세션 사용자 이름이어야 함)

그럼에도 불구하고, 그 짧은 목록은 실무에 유리한 주장이 아닙니다.

대안은 다음과 같습니다.

  • 예를 들어 Apple old HFS와 같은 FS 수준에서 메타 데이터 처리
  • 이미지의 경우 Exif, 사운드의 경우 ID3과 같이 메타 데이터를 파일 자체에 넣습니다.
  • 대부분의 미디어 관리자처럼 다른 파일이나 데이터베이스에 메타 데이터를 넣습니다.

5
모든 것이 흐릿한 개념입니다. "흐리게", "개념"및 "모든 것"조차도 모호한 개념입니다.
Tulains Córdova

3

데이터베이스가 필요한 것 같습니다.

파일 이름에 사용자 데이터를 넣는 데 많은 보안 문제가 있습니다. 각 사용자 ( "username.txt")의 파일이 있다고 가정 해 봅시다. 누군가 사용자 이름 "../../../../etc/passwd"를 등록하는 작업은 사용자 입력을 필터링하는 방법에 따라 다릅니다.

데이터베이스 프레임 워크는 때때로 사용자 입력을 삭제하는 데 도움이됩니다.


실제로 많은 운영 체제는 사용자 이름을 홈 디렉토리 라고하는 디렉토리 이름에 저장합니다 .
mouviciel

그것은 누군가의 소프트웨어가 스택의 맨 아래에 있어야하기 때문입니다. 모든 사람이 그 수준에서 일해야한다는 의미는 아닙니다. 프로그래머가 데이터베이스를 50 년 이상 사용해 왔기 때문에 데이터베이스의 장점을 논하지는 않겠습니다.
Eric Wimberley '10

1
@mouviciel 나는 사용자의 홈 디렉토리 이름에서 사용자 이름을 구문 분석하는 운영 체제를 모른다. Windows 및 Unix 계열 시스템은 모두 디렉토리의 이름을 일종의 데이터베이스에 저장하고 사용자가 로그인 할 때 환경에로드합니다. 두 시스템 모두에서 홈 디렉토리 이름이 사용자 이름과 다를 수 있습니다 ( 예를 들어, 사용자 이름 변경 또는 동일한 시스템 파티션에 두 개의 창 설치가있는 경우).
Jules

2

아뇨 ... 글쎄요.

엄격한 규칙과 일반적인 구문 분석 및 유효성 검사 수단 (스크립트, 라이브러리 등)을 즉시 사용할 수 있다면 계속 사용하는 것이 좋습니다.

패키징 및 종속성 관리 시스템 (Maven, NuGet 등)을 예로 들어 보겠습니다. 많은 사람들이 메타 데이터에 특정 파일을 사용하여 고급 정보를 저장하지만 기본 정보는 종종 파일 이름 자체의 일부입니다. 엄격한 규칙에 따라 파일 이름에는 패키지에 대한 가장 적절한 정보가 포함될 수 있습니다. 공급 업체, 이름, 버전, 유형입니다. 때때로 그것은 당신이 필요한 전부입니다 ... 4 개 또는 5 개의 짧은 정보 조각.

메타 데이터가 단순하면 파일 이름 지정 규칙이 없어도됩니다. 매우 간단한 도구와 스크립트, 데이터베이스가 필요하지 않으며, 특수한 인프라가 없어도 몇 개의 스크립트와 명명 규칙으로 강화할 수 있습니다.

거기에 아무것도 당신이 필요로하는 일을하고 당신의 요구가 단순하지 않다면 나는 이것으로 시작할 것입니다.

귀하의 요구 사항이이 컨벤션을 능가합니까? 적절한 메타 데이터 파일로 확장하십시오. 나중에 더 나은 검색이 필요합니까? 필요한 곳으로 이동할 수있는 파일을 검색하기위한 좋은 솔루션이 이미 있습니다.

데이터베이스를 싫어하는 것이 아닙니다. 반대로 데이터베이스가 실제로 강력하고 유용하지만 약간의 오버 헤드가 필요합니다. 이들은 설치, 백업, 유지 보수가 필요하며, 전담되지 않은 경우이 인프라에 시간을 할애해야하는 직원이 필요합니다. 그들은 또한 평신도들에게 더 복잡하고 비밀스럽고, 당신을 설정 한 개발자를 풀고 교체를 찾을 때까지 시스템이 제 시간에 정체됩니다.

적절한 감독을 통해 로우 테크의 힘을 과소 평가하지 마십시오 .

그리고 낮은 기술 솔루션을 능가 할 때까지 모든 요구 사항을 충족하여 완벽한 시스템을 구현해야합니다.


관성의 힘을 과소 평가하지 마십시오. 최첨단 솔루션을보다 강력한 솔루션으로 바꾸려면 처음에는 그렇게하지 않는 것보다 훨씬 많은 노력이 필요합니다.
Berin Loritsch 2016 년

1
@BerinLoritsch 같은 주장은 모든 기술, 저 기술 또는 하이테크에 적용됩니다 ... 더 많은 시스템 상호 종속성을 필요로하는 하이테크가 실제로이 상황을 최악이 아니라 쉽지 않다고 주장 할 수 있습니다. 즉, 간단한 첨단 기술 솔루션이 완전 첨단 기술 솔루션보다 더 복잡 해지는 임계 값이 있습니다.
Newtopian

1
그렇습니다. 현재 프로젝트에서 몇 가지 예제를 풀고 있습니다. 결론은 파일 시스템보다 더 긴밀한 인터페이스가 필요하다는 것입니다. 불행히도, 내가 상속받은 대부분의 최첨단 시스템에는 적절한 생각이나 디자인이 적용되지 않습니다. 한 손으로 계산할 수있는 예외 수입니다.
Berin Loritsch 2016 년

0

먼저 파일 무엇인지 동의합시다 . 파일은 원자 조작으로 (가장 가까운) 전송, 수신, 작성 및 삭제 될 수 있는 이름 의 패키지 데이터 입니다 .

많은 파일 시스템 (Mac OS 및 최신 Linux 파일 시스템)은 종종 리소스와 메타 데이터를 저장하는 데 사용되는 "포크"를 구현합니다. 메타 데이터 저장에 대한 이러한 접근 방식은 특히 소스 및 대상 파일 시스템이 파일 포크를 다르게 이해하는 경우 기존의 네트워크 전송 방법, 백업 및 복원 방법 및 파일 복사 방법이 일치하지 않는다는 점에서 문제가되었습니다.

파일 이름은 a) 항상 존재하고 b) 메타 데이터는 항상 파일 이름에 존재하고 (최소한 파일 확장자를 사용하는 경우) c) 이동시 파일 이름이 거의 변환되지 않기 때문에 메타 데이터를 보유하는 데 사용됩니다. 시스템 간 (대소 문자 구분, 문자 집합 제한, 문자 제한 제외)

따라서 파일 이름을보고, 이식 가능하고 관리 할 수 ​​있습니다. 일부 메타 데이터를 저장하는 것은 좋지 않습니다.

아마 일반 파일 메타 데이터를 처리하는 가장 좋은 솔루션은 컨텐츠 저장소 를 사용하는 것 입니다 . 여기서 컨텐츠 저장소는 파일에 사용될 메타 데이터 스키마로 구성 될 수 있습니다. 많은 경우에 이것은 과잉이지만 IMHO는 심각한 메타 데이터 관리를위한 길입니다.


0

이것에 대한 나의 취지는 당신이 어딘가에 파일 이름을 가진 조잡하거나 부서지기 쉬운 코드를 보았을 수도 있지만, "파일 이름에 메타 데이터 저장"이 일반적으로 나쁘다는 것을 의미하지는 않습니다.

파일 이름 메타 데이터입니다. 파일 데이터 자체와 관계없이 파일의 데이터에 대한 데이터입니다. 실제로 파일 이름이 너무 오래되어 메타 데이터의 표준 예일 수 있습니다.

파일 확장자가 파일 이름의 끝 부분이라고 생각하면 메타 데이터로의 파일 이름 개념은 더욱 피할 수 없게됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.