2017-12-21 12 views
-1

아주 작은 파일이 수백만 개가 들어있는 응용 프로그램을 다루고 있습니다. 전송하기가 매우 어렵습니다.Golang의 Bigfiles

그래서 큰 파일을 만들 수있는 bigfiles 또는 다른 가상 파일 시스템을 생각하고 색인 된 모든 데이터를 포함하고있었습니다.

골란에서 어떻게 이런 일이 일어날까요? 추천 할만한 책자가 있습니까?

답변

1

권장 해결 방법은 게시되지 않은 요구 사항 (예 : 파일을 수정해야합니까? 그들을 제거 할 능력이 필요합니까? 분산 저장 장치가 필요합니까?

변경할 의도가없는 새 파일 만 추가하려면 github.com/icza/kvcache (공개 : 저는 저자입니다)을 사용할 수 있습니다. kvcache은 2 개의 파일에만 모든 항목을 저장하고 (색인 용과 데이터 용으로 1 개씩) 색인을 메모리에 보관하므로 조회가 가능한 빨리 수행되며 파일을 전송하는 것은 2 개의 파일 만 복사하는 것과 같습니다.

MongoDB는 파일 시스템과 유사한 API를 제공하며 파일의 메타 데이터를 저장하고 검색 할 수 있습니다. mgo 라이브러리는 GridFS에 액세스하고 사용하는 것을 지원합니다. mgo.GridFSmgo.GridFile 유형을 참조하십시오.

클라우드에 파일을 저장할 수도 있고 수많은 서비스와 Go 클라이언트 라이브러리가 있으며 기본 검색 기능을 제공합니다. 또한

에 Serverfault에이 질문 + 답변 확인하십시오 : (가정 제로 압축)

Storing a million images in the filesystem

+1

프로젝트의 문서에 따르면 거의 "표준"[BoltDB] (https://github.com/boltdb/bolt)가 1TB 데이터 세트를 처리하는 것처럼 보입니다. 또한 전투 테스트를 거친 [LevelDB] (https://github.com/syndtr/goleveldb)가 있지만 크기 제한이 확실하지 않습니다. – kostix

1

어쩌면 단순한 ZIP 아카이브 당신을 위해 일 것입니까? 내용 (파일 스트림)에 자연스러운 색인이 있으므로 open it using archive/zip 일 때 a slice of "file info blocks", 등의 정보를 얻고 해당 파일 스트림을 찾고 읽는 방법을 "알고 있습니다". (파일의 데이터 오프셋을 얻는 방법도 있습니다. 을 읽으십시오. no-op "압축 해제 기"및 체크섬 확인 을 직접 건너 뛰십시오. 측정 결과가 인 경우이 가능한 속도 조정을 탐색 할 수 있습니다. 해당 데이터에 "정상적인 방법으로 액세스"는 차선입니다.)

그러면 빠른 액세스를 위해 파일 이름별로 색인이 생성 된지도를 만들 수 있습니다.

"자연스러운"디렉토리 트리를 시뮬레이트하기 위해 더 나아가 이러한 맵의 계층 구조를 생성하십시오. . 또는 파일 시스템 트리에 여러 개의 ZIP 아카이브가있을 수 있습니다. 당신이 가지고 싶어 모든 파일 스트림 모양 + 인덱스의 R/O의 BLOB 인 경우


그리고 자연은 그 합리적으로 간단한 일이 자신을-모두 구현하기 위해 읽기와 쓰기를위한 것입니다. 물건을 디자인하는 데별로 신경 쓰지 않는다면 format of the Git "pack files"을 살펴 보겠습니다.

+0

나는 zip 아카이브에 _millions_ 개의 파일을 추가하는 것에 대한 의문점이있다. 누군가 그것을 시험해야한다. – icza

+0

@icza, 물론, 그건 나의 의심이었습니다. Bu는 파일이 "매우 작다"고 분명히 언급했기 때문에 KiB가 1GB 미만으로 작고 4GB의 "표준 ZIP"모듈에 맞을 수도 있다고 생각했습니다. – kostix