플랫 파일 데이터베이스는 적절한 위치에 있으며 올바른 도메인에서 사용할 수 있습니다.
과거의 메일 서버와 NNTP 서버는 실제로 이러한 것들 (실제로 파일 시스템은 수백만 개의 파일과 디렉터리를 가질 수 있음)을 얼마나 멀리 가져갈 수 있는지에 대한 한계를 밀어 냈습니다.
플랫 파일 DB는 인덱싱과 원자 적 업데이트가 가장 큰 두 가지 약점이지만 도메인이 적합한 경우 문제가되지 않을 수 있습니다.
그러나 예를 들어 적절한 잠금을 사용하면 최소한 Unix에서는 기본 파일 시스템 명령을 사용하여 "원자 적"색인 업데이트를 수행 할 수 있습니다.
단순한 경우 데이터를 통해 인덱싱 프로세스가 실행되어 임시 이름으로 새 인덱스 파일을 만듭니다. 그런 다음, 끝내면 이전 파일을 새 파일로 바꿉니다 (시스템 호출 rename (2) 또는 쉘 mv 명령). Rename과 mv는 Unix 시스템에서의 원 자형 연산입니다 (즉, 작동하거나 그렇지 않습니다). "상태 간"이 누락되지 않습니다.
새 항목을 만들 때와 같습니다.기본적으로 임시 파일에 파일을 완전히 작성한 다음 이름을 바꾸거나 mv로 최종 위치에 배치하십시오. 그렇다면 "DB"에는 "중간"파일이 없습니다. 그렇지 않으면 경쟁 조건 (예 : 아직 쓰고있는 파일을 읽는 프로세스가 있고 쓰기 프로세스가 완료되기 전에 끝나야 할 수도 있습니다 - 경쟁이 심한 경쟁 조건)이있을 수 있습니다.
기본 색인 생성이 디렉토리 이름과 잘 작동하는 경우 제대로 작동합니다. 예를 들어 해싱 스키마를 사용하여 새 파일을 찾기위한 디렉토리와 하위 디렉토리를 만들 수 있습니다.
파일 이름과 디렉토리 구조를 사용하여 파일을 찾는 것은 오늘날 대부분의 파일 시스템이 색인을 생성하기 때문에 매우 빠릅니다.
디렉토리에 백만 개의 파일을 저장하는 경우 조사하려는 튜닝 관련 문제가있을 수 있지만 그 중 대부분은 수십 만 개를 쉽게 처리합니다. 디렉토리를 스캔해야한다면 스캔 할 파일이 많을 것입니다. 디렉토리를 통한 파티셔닝은이를 방지하는 데 도움이됩니다.
하지만 모두 색인 생성 및 검색 기술에 따라 다릅니다.
효과적으로 정적 컨텐츠를 제공하는 선반 웹 서버의 스톡은 대형 평면 파일 데이터베이스이며 모델은 꽤 잘 작동합니다.
마지막으로 무료 Unix 파일 시스템 레벨 도구가 많이 있지만, 모든 파일에 수많은 문제가 있습니다. 파일에서 무언가를 찾으려면 grep 1000000 번을 포기해야 성능이 저하됩니다. 오버 헤드는 단순히 합산됩니다).
모든 파일이 동일한 파일 시스템에있는 경우 하드 링크는 동일한 파일을 다른 위치 (기본적으로 색인 생성)에 넣는 측면에서 옵션을 제공합니다.
예를 들어, "today"디렉토리, "yesterday"디렉토리, "java"디렉토리 및 실제 메시지 디렉토리를 가질 수 있습니다.
그래서 "today"디렉토리의 "java"디렉토리 (게시물에 "java"태그가 붙어 있기 때문에)와 마지막 위치 (/ articles/2008/12)에 링크가 연결될 수 있습니다. /01/my_java_post.txt). 그런 다음 자정에 두 개의 프로세스를 실행합니다. 첫 번째 파일은 "today"디렉토리의 모든 파일을 가져 와서 "오늘"이 아닌지 확인하기 위해 생성 날짜를 확인합니다 (프로세스가 몇 초가 걸리고 새 파일이 잠길 수 있기 때문에) 어제". 다음으로, "어제"디렉토리에 대해서도 똑같은 일을합니다. 단지 오래된 것 인 경우 삭제하면됩니다.
한편 파일은 여전히 "java"및 ".../12/01"디렉토리에 있습니다. 유닉스 파일 시스템과 하드 링크를 사용하고 있기 때문에 "파일"은 한 번만 존재합니다. 이들은 파일에 대한 포인터 일뿐입니다. 그들 중 누구도 "the"파일이 아닙니다. 모두 동일합니다.
각 개별 파일 이동이 원 자성 인 반면 대량은 아닙니다. 예를 들어, "today"스크립트가 실행 중이지만 "yesterday"스크립트가 아직 실행되지 않았기 때문에 "yesterday"디렉토리에 "yesterday"및 "before the day"파일이 포함될 수 있습니다.
트랜잭션 DB에서 모든 작업을 한꺼번에 처리 할 수 있습니다.
하지만 간단하고 정확한 방법입니다. 유닉스는 특히이 관용구와 잘 작동하며, 현대 파일 시스템은이를 잘 지원할 수있다.
"플랫 파일"과 "파일 시스템 기반"데이터베이스의 차이에 대한 이해를 명확히하십시오. 그렇지 않으면 질문에 답변 할 수 없습니다. –
우수 점,이 질문의 경우 "Flat file == file system-based"를 볼 것입니다. 예를 들어 각 블로그 항목과 그에 수반되는 메타 데이터는 단일 파일에 있습니다. 파일 폴더 (blogs \ testblog2 \ 2008 \ 12 \ 01) === 12/01/2008 –