programing

파일 저장소로서의 MongoDB

padding 2023. 8. 16. 22:01
반응형

파일 저장소로서의 MongoDB

대용량 파일을 위한 확장 가능한 스토리지를 만들 수 있는 최상의 솔루션을 찾고 있습니다.파일 크기는 1-2MB에서 최대 500-600GB까지 다양할 수 있습니다.

Hadoop과 HDFS에 대한 정보를 찾았지만 맵/리듀스 작업 및 기타 많은 기능이 필요하지 않기 때문에 조금 복잡해 보입니다.이제 MongoDB를 파일 스토리지 솔루션으로 사용하려고 합니다.

이제 질문이 있습니다.

  1. 몇 개의 파일을 동시에 쓰려고 하면 gridfs는 어떻게 됩니까?읽기/쓰기 작업에 잠금 장치가 있습니까?(파일 저장소로만 사용)
  2. gridfs의 파일이 RAM에 캐시되며 읽기-쓰기 성능에 어떤 영향을 미칩니까?
  3. 제 문제를 좀 더 효율적으로 해결할 수 있는 다른 해결책이 있을까요?

감사해요.

저는 여기서 MongoDB에 대해서만 대답할 수 있습니다. HDFS 및 기타 기술에 대해 잘 아는 척하지 않겠습니다.

GridFs 구현은 드라이버 자체 내에서 완전히 클라이언트 측입니다.이는 MongoDB 자체 내에서 파일 서비스의 컨텍스트를 특별하게 로드하거나 이해할 필요가 없음을 의미하며, 실제로 MongoDB 자체는 파일(http://docs.mongodb.org/manual/applications/gridfs/ )을 인식하지 못합니다.

은 즉, 에▁of▁part▁the▁forying다▁any니▁this수▁quer됩행,▁that즉▁means쿼의 임의의 부분에 대한 쿼리를 의미합니다.files또는chunks수집은 최적의 성능을 유지하기 위해 주어진 시간 내에 MongoDB가 요구하는 데이터 세트(또는 그 당시 로드된 모든 데이터)를 나타내는 작업 세트(http://en.wikipedia.org/wiki/Working_set )에 필요한 데이터를 로드하는 다른 쿼리와 동일한 프로세스를 수행합니다.이는 RAM에 페이징을 함으로써 수행됩니다(기술적으로는 OS가 수행함).

고려해야 할 또 다른 점은 이 드라이버가 구현되어 있다는 것입니다.이것은 사양이 다를 수 있다는 것을 의미하지만, 저는 그렇게 생각하지 않습니다.하면 모든드를사에문집수있다습에서 을 수 .files에 파일 를 메데나타컬파로사에서 할 수 .chunks단일 쿼리를 사용하는 컬렉션입니다.

것은 . 자체에 해야 합니다. 즉, 하만중아다니를 하게 됩니다. 데이터를 포함하여 파일 자체를 제공하고 싶습니다. 즉, 파일을 로드하는 것입니다.files과 그 의 컬렉션입니다.chunks작업 세트로 수집합니다.

이를 염두에 두고 우리는 이미 첫 번째 난관에 봉착했습니다.

gridfs의 파일이 RAM에 캐시되며 읽기-쓰기 성능에 어떤 영향을 미칩니까?

RAM에서 직접 작은 파일의 읽기 성능은 훌륭할 수 있으며 쓰기도 마찬가지입니다.

파일 크기가 큰 경우에는 그렇지 않습니다.mongod사례.이는 해당 파일이 제공되기 위해서는 작업 세트에 들어가야 하지만 RAM보다 클 수 없기 때문에 문제가 발생합니다. 이 시점에서 서버가 24/7로 파일을 로드하려고 하는 페이지 장애(http://en.wikipedia.org/wiki/Thrashing_%28computer_science%29 )가 발생할 수 있습니다.여기 있는 글들도 더 나은 것은 없습니다.

은 단일 에 배치하는 것입니다. 이문 를 해 할 유 파 단 여 샤 는 배 것 니 입 다 하 치 에 드 개 의 러 제 을 일 일 은 방 법 한 결 일 는 있 수 ▁the ▁putting 다 니 ▁sh ▁this ▁across ▁a 이 ▁file ▁to ▁many ards 입 ▁is 것▁starting▁around:\.

한 더 할 인 " " " " " " " 입니다.chunks"청크"는 256KB이므로 600GB 파일에 해당하는 많은 문서입니다.이 설정은 대부분의 드라이버에서 조작할 수 있습니다.

몇 개의 파일을 동시에 쓰려고 하면 gridfs는 어떻게 됩니까?읽기/쓰기 작업에 잠금 장치가 있습니까?(파일 저장소로만 사용)

GridFS는 사양일 뿐이므로 데이터베이스 수준(2.2+) 또는 글로벌 수준(2.2 이전)의 읽기 및 쓰기 잠금 모두 다른 컬렉션과 동일한 잠금을 사용합니다.이 두 가지는 서로 간섭하기도 합니다. 즉, 작성 중인 문서의 일관된 읽기를 어떻게 보장할 수 있습니까?

즉, 고객의 시나리오 세부 사항, 트래픽, 동시 쓰기/읽기 수 및 기타 많은 정보에 따라 경합이 발생할 가능성이 있습니다.

제 문제를 좀 더 효율적으로 해결할 수 있는 다른 해결책이 있을까요?

개인적으로 (@mlruggy가 말한 것처럼) 중복성이 감소된 S3는 GridFS를 사용하는 것과 마찬가지로 MongoDB 내의 파일에 대한 메타데이터의 일부만 저장하는 것이 가장 효과적이라는 것을 알게 되었지만, 청크 수집 없이 S3가 배포, 백업 및 기타 모든 작업을 처리할 수 있습니다.

제가 분명히 말했으면 좋겠네요, 도움이 되길 바랍니다.

Edit: MongoDB는 제가 실수로 말한 것과 달리 Collection Level Lock이 없고 데이터베이스 Level Lock입니다.

MongoDB에 메타데이터를 저장하고 실제 파일을 Amazon S3에 쓰는 것을 고려해 본 적이 있습니까?둘 다 우수한 드라이버를 제공하며 후자는 매우 중복된 클라우드/cdn 지원 파일 스토리지입니다.한번 해보겠습니다.

처음 두 가지에 대해 답변하는 것으로 시작하겠습니다.

  1. 그리드FS에 쓸 때 쓰기 잠금이 있습니다.읽기에 대한 잠금이 없습니다.
  2. 파일을 쿼리할 때 파일은 메모리에 캐시되지 않지만 파일의 메타데이터는 캐시됩니다.

그리드FS는 문제에 대한 최선의 해결책이 아닐 수 있습니다.쓰기 잠금은 특히 대용량 파일의 경우 이러한 유형의 상황을 처리할 때 큰 문제가 될 수 있습니다.이 문제를 해결할 수 있는 다른 데이터베이스가 있습니다.HDFS는 좋은 선택이지만, 당신의 말처럼 매우 복잡합니다.Riak나 Amazon의 S3와 같은 저장 메커니즘을 고려하는 것을 추천합니다.파일을 위한 스토리지를 선호하기 때문에 큰 단점이 발생하지 않습니다.S3와 Riak는 모두 우수한 관리 기능을 갖추고 있으며, 대용량 파일을 처리할 수 있습니다.Riak에 대해서는 100MB 이상의 파일을 저장하기 위해 파일 청킹을 수행해야 했습니다.그럼에도 불구하고 일반적으로 대용량 파일 크기에 대해 어느 정도 수준의 청킹을 수행하는 것이 가장 좋습니다.파일을 DB로 전송할 때 네트워크 시간 초과, 버퍼 오버플로 등과 같은 여러 가지 문제가 발생할 수 있습니다.어느 쪽이든 대규모 파일 크기에 맞게 솔루션을 조정해야 합니다.

언급URL : https://stackoverflow.com/questions/15030532/mongodb-as-file-storage

반응형