문제

성능과 효율성 측면에서 작은 파일을 많이 사용하는 것이 더 낫습니까(많다는 것은 수백만 개를 의미합니다) 아니면 두어 개(10 정도)의 큰 파일(수 기가바이트)을 사용하는 것이 더 낫습니까?제가 데이터베이스를 구축하고 있다고 가정해 보겠습니다(완전히 사실은 아니지만 중요한 것은 데이터베이스에 많이 액세스한다는 것입니다).

나는 주로 읽기 성능에 관심이 있습니다.내 파일 시스템은 현재 Linux(중요한 경우 Ubuntu Server Edition)의 ext3이지만 여전히 전환할 수 있는 위치에 있으므로 다른 파일 시스템 간의 비교는 훌륭할 것입니다.기술적인 이유로 실제 DBMS를 사용할 수 없으므로(따라서 질문) "그냥 MySQL을 사용하십시오"는 좋은 대답이 아닙니다.

미리 감사드리며, 더 구체적으로 설명해야 할 사항이 있으면 알려주시기 바랍니다.


편집하다: 나는 상대적으로 작은 데이터 조각을 많이 저장할 예정이므로 작은 파일을 많이 사용하는 것이 더 쉬울 것입니다.따라서 몇 개의 큰 파일을 사용한다면 한 번에 몇 KB만 검색할 수 있을 것입니다.나는 또한 인덱스를 사용할 것이기 때문에 그것은 실제로 문제가 되지 않습니다.또한 일부 데이터는 다른 데이터 조각을 가리킵니다(작은 파일이 많은 경우 파일을 가리키고, 대용량 파일의 경우 파일 내의 데이터 위치를 가리킵니다).

도움이 되었습니까?

해결책

여기에는 많은 가정이 있지만 모든 의도와 목적을 위해 검색해 보세요. 큰 파일은 훨씬 더 빠릅니다 여러 개의 작은 파일을 검색하는 것보다.

당신이 그렇다고 가정 해 봅시다 텍스트 문자열을 찾고 있습니다. 텍스트 파일에 포함되어 있습니다.검색 중 1TB 파일 될거야 훨씬 더 빨리 여는 것보다 1,000,000MB 파일 그리고 그것들을 검색합니다.

파일 열기 작업에 시간이 걸립니다.대용량 파일은 한 번만 열어야 합니다.

그리고, 고려해보면 디스크 성능, 단일 파일이 될 가능성이 훨씬 더 높습니다. 연속적으로 저장됨 큰 일련의 파일보다.

...다시 말하지만, 이는 특정 애플리케이션에 대해 더 자세히 알지 못한 채 일반화한 것입니다.

즐기다,

로버트 C.카르타이노

다른 팁

때에 따라 다르지.정말.다양한 파일 시스템은 다양한 방식으로 최적화되지만 일반적으로 작은 파일은 효율적으로 압축됩니다.대용량 파일의 장점은 많은 항목을 열고 닫을 필요가 없다는 것입니다.열기 및 닫기는 시간이 걸리는 작업입니다.큰 파일이 있는 경우 일반적으로 한 번만 열고 닫고 탐색 작업을 사용합니다.

많은 파일 솔루션을 선택한다면 다음과 같은 구조를 제안합니다.

b/a/bar
b/a/baz
f/o/foo

디렉토리의 파일 수에 제한이 있기 때문입니다.

여기서 TMO의 주요 문제는 인덱싱에 관한 것입니다.좋은 색인 없이 대용량 파일에서 정보를 검색하려면 전체 파일을 검색하여 길 수 있는 올바른 정보를 검색해야 합니다.강력한 인덱싱 메커니즘을 구축할 수 있다고 생각한다면 대용량 파일을 선택하는 것이 좋습니다.

나는 이 작업을 좀 더 잘할 수 있는 ext3에 위임하고 싶습니다.

편집하다 :

이에 따라 고려해야 할 사항 ext3에 대한 Wikipedia 기사 시간이 지남에 따라 조각화가 발생한다는 것입니다.따라서 파일 시스템의 상당 부분을 차지하는 수많은 작은 파일이 있는 경우 시간이 지남에 따라 성능이 저하됩니다.

이 기사는 또한 디렉터리 제한당 32,000개 파일에 대한 주장을 검증합니다(wikipedia 기사가 무엇이든 검증할 수 있다고 가정).

나는 Ext3가 디렉토리당 약 32000개의 파일/하위 디렉토리로 제한되어 있다고 생각합니다.수백만 개의 파일 경로를 사용하려면 해당 파일을 여러 디렉터리에 분산시켜야 합니다.성능에 어떤 영향을 미칠지 모르겠습니다.

나는 여러 개의 큰 파일을 선호합니다.사실, 논리적으로 분리된 단위가 아닌 이상 왜 여러 개를 가지고 있습니까?아직도 쪼개기 위한 목적으로 쪼개고 있다면 그렇게 하지 말라고 말씀드립니다.Ext3는 매우 큰 파일을 잘 처리할 수 있습니다.

저는 Linux에서 XFS 파일 시스템에 최대 약 500만 개의 파일을 저장하는 시스템을 사용하고 있으며 성능 문제가 전혀 없습니다.우리는 파일을 데이터 저장에만 사용하고 전체 스캔은 하지 않습니다. 검색용 데이터베이스가 있고 테이블의 필드 중 하나에는 검색에 사용하는 GUID가 포함되어 있습니다.파일 이름이 guid인 위와 같이 정확히 두 가지 수준의 디렉터리를 사용하지만, 파일 수가 더 많아지면 더 많은 디렉터리를 사용할 수도 있습니다.우리는 저장/반환만 필요하고 검색할 필요가 없는 데이터베이스에 몇 테라바이트를 추가로 저장하는 것을 피하기 위해 이 접근 방식을 선택했으며 이는 우리에게 잘 작동했습니다.우리 파일의 범위는 1k에서 약 500k까지입니다.

우리는 또한 ext3에서 시스템을 실행했으며 제대로 작동했지만 약 백만 개의 파일을 초과했는지는 확실하지 않습니다.디렉토리당 최대 파일 제한으로 인해 3개의 디렉토리 시스템으로 전환해야 할 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top