GridFS는 생산을 위해 충분히 빠르고 안정적입니까?


86

저는 새 웹 사이트를 개발하고 일반 파일 시스템 스토리지에 비해 많은 이점을 제공하기 때문에 모든 사용자 업로드를위한 스토리지로 GridFS를 사용하고 싶습니다.

nginx에서 제공하는 GridFS의 벤치 마크는 nginx에서 제공하는 일반 파일 시스템만큼 빠르지 않음을 나타냅니다.

nginx를 사용한 벤치 마크

이미 생산 환경에서 GridFS를 사용하는 사람이 있습니까? 아니면 새 프로젝트에 사용할 사람이 있습니까?


1
나에게 비슷한 의도를 가지고 미래 수색자에 대한 MongoDB의 이미지를 저장하기에 블로그 게시물 : menge.io/2015/03/24/storing-small-images-in-mongodb은 (단순히 바이너리와 문서로 던지는와 GridFS를 비교 data)

참조 - 당신이 MongoDB를 이진 데이터를 저장하려면 결정할 때 고려해야 할 많은이 있습니다 alexmarquardt.com/2017/03/02/...
알렉산더 마르카토

답변:


118

나는 명예로운 트래픽 통계 (하루 약 25,000 명의 방문자)를 가진 가격 비교 웹 사이트의 일부인 서버 중 하나에서 gridfs를 사용합니다. 서버에는 램, 2 기가 많지 않고 CPU도 실제로 빠르지는 않지만 (Core 2 duo 1.8Ghz) 서버에는 충분한 저장 공간이 있습니다. RAID 0 구성에서 10Tb (sata)입니다. 서버가 수행하는 작업은 매우 간단합니다.

가격 비교기의 각 제품에는 이미지가 있으며 (제품 DB에 따라 약 천만 개의 제품이 있음) 서버 작업은 이미지를 다운로드하고 크기를 조정 한 다음 gridfs에 저장하고 방문자 브라우저에 전달하는 것입니다. .. 그리드에없는 경우 ... 또는 ... 그리드에 이미 저장되어있는 경우 방문자 브라우저에 전달합니다. 따라서 이것은 '전통적인 cdn 스키마'라고 부를 수 있습니다.

이 서버가 실행 중이기 때문에이 서버에 4 백만 개의 이미지를 저장하고 처리했습니다. 크기 조정 및 저장 작업은 간단한 PHP 스크립트로 수행됩니다.하지만 확실하게 Python 스크립트 또는 Java와 같은 것이 더 빠를 수 있습니다.

현재 데이터 크기 : 11.23g

현재 저장 용량 : 12.5g

지수 : 5

색인 크기 : 849.65m

신뢰성에 관하여 : 이것은 매우 신뢰할 수 있습니다. 서버가로드되지 않고 인덱스 크기가 정상이며 쿼리가 빠릅니다.

속도 정보 : 확실히 로컬 파일 저장소만큼 빠르지 않고 10 % 정도 느리지 만 이미지를 처리해야 할 때에도 실시간으로 사용할 수있을만큼 빠릅니다. 우리의 경우는 매우 PHP에 따라 다릅니다. 유지 관리 및 개발 시간도 단축되었습니다. 단일 또는 여러 이미지를 삭제하는 것이 매우 간단 해졌습니다. 간단한 삭제 명령으로 db를 쿼리하기 만하면됩니다. 또 다른 흥미로운 점 : 로컬 파일 저장소 (수천 개의 폴더에있는 수백만 개의 파일)를 사용하여 이전 서버를 재부팅했을 때 시스템이 파일 무결성 검사를 수행하기 때문에 때때로 몇 시간 동안 중단됩니다 (정말 몇 시간이 걸렸습니다 ...). gridfs에서는 더 이상이 문제가 발생하지 않습니다. 이제 이미지가 큰 mongodb 청크 (2GB 파일)에 저장됩니다.

그래서 ... 내 마음에 ... 예, gridfs는 프로덕션에 사용할 수있을만큼 빠르고 안정적입니다.


9
누구든지 프로덕션 웹 사이트의 기본 스토리지로 raid 0을 사용한다는 사실에 놀랐습니다. 좋은 백업이 있더라도 스토리지 장애 가능성을 높이는 것은 성능 향상을 위해 지불해야하는 상당히 가파른 비용입니다.
mikerobi

67
특별한 경우 이미지 데이터가 휘발성 일 수 있기 때문에 raid 0을 사용합니다. 판매자 웹 사이트에서 이미지를 다시 다운로드하므로 이미지가 손실되었는지 여부는 중요하지 않습니다. 실용적으로 우리 서버는 단순한 이미지 캐시 서버라고 생각할 수 있습니다.
Manu Eidenberger

그러나 장애 가능성을 적극적으로 증가시키고 있습니다 (초기 드라이브 장애 계수에 스핀들 수를 곱한 값). RAID 10은 읽기보다 쓰기가 더 많이 필요한 경우 이상적이거나 쓰기보다 읽기가 더 많이 필요한 경우 Raid 5/6이 이상적입니다.
NeuroScr 2014

9
@ManuEidenberger MongoDB 문서에 저장되는 이미지를 저장하기 위해 GridFS를 사용하는 이유는 무엇입니까? 16MB 문서 크기 제한에 도달하지 않은 것 같습니다. 그리고 MongoDB 문서 위에 GridFS 계층이 필요하지 않기 때문에 이미지를 MongoDB 문서 내에 BLOB로 저장하는 것이 더 효율적입니다.
Arnaud Bouchez

1
@ArnaudBouchez의 질문에 대해서도 궁금합니다. 단순히 문서에 바이너리 데이터로 저장하는 것보다 GridFS를 선택하게 된 이점이 있었나요, Manu? 감사!

12

언급했듯이 일반 파일 시스템만큼 빠르지는 않지만 일반 파일 시스템에 비해 사람에게 이점을 제공합니다. 약간의 속도를 포기할 가치가 있다고 생각하는 제공합니다.

궁극적으로 샤딩을 사용하면 GridFS 스토리지가 일반 파일 시스템 및 단일 노드와 달리 실제로 더 빠른 옵션이되는 지점에 도달 할 수 있습니다.


6

하지만 더 큰 DB의 수리에 대한주의-우리가 개발중인 새로운 시스템, mongo는 깨끗하게 종료되지 않았으며 7TB GridFS를 수리하는 데 130 시간이 걸릴 것으로 보입니다.

이 때문에 OpenStack Swift 또는 Ceph로 전환하는 방법을 살펴 보겠습니다. 그래도 그때까지는 좋았습니다. 그리고 nginx-gridfs 모듈은 훌륭합니다.


그래서 어떻게 갔습니까?
Mukus

5

mdirolf의 nginx-gridfs 모듈은 훌륭하고 설정하기 매우 쉽습니다. 우리는 paint.ly의 프로덕션에서 모든 그림을 제공하기 위해 그것을 사용하고 있으며 지금까지 아무런 문제가 없었습니다.


3
paint.ly는 더 이상 사용할 수없는 것 같습니다. :(
Marian

2

나는 당신이 무엇을하고 있는지 알지 못한다면 gridfs를 사용하지 않는 것이 좋습니다. GridFS는 파일을 청크로 분할하고 파일을 두 개의 컬렉션에 저장하는 추상화 계층입니다. 더 많은 파일-더 많은 오버 헤드. 파일이 32M 정도를 넘지 않고 같은 크기로 예상된다면 올바른 방법입니다. gridfs에 큰 파일을 저장하지 마십시오. 왜?

  1. 다른 언어의 드라이버는 파일의 작은 부분을 읽을 때 전체 파일 (예 : 청크)을 읽을 수 있습니다.
  2. 파일을 수정하면 모든 청크에 영향을 미치고 데이터베이스로드가 증가 할 수 있습니다. 파일 시스템이 커지면 gridfs를 분할하기로 결정해야합니다. 조심해! 샤딩이 초기화 될 때 일관성이 보장되지 않습니다!

로드 된 프로젝트 읽기에 대해 생각하는 경우-파일을 문서에 직접로드하거나 (16M 이하인 경우) 다른 clusterfs를 선택하고 파일 이름 / inode를 논리에 연결하십시오.

도움이 되었기를 바랍니다.


4
GridFS는 파일 수를 두 배로 늘리는 추상화 계층 이상이라는 것을 알고 있지만 GridFS를 처음 접했습니다. GridFS는 MongoDB의 복제 및 샤딩 기능을 활용하는 간단한 방법을 제공합니다. 나는 다른 사람들이 파일이 2GB 청크로 저장되어 있다고 생각하며, 특히 누군가가 매우 많은 양의 작은 이미지를 가지고 있다면 총 파일 수를 줄일 것이라고 생각합니다.

+1 당신이 옳습니다. 더 작은 파일이라도 GridFS에 저장하면 도움이되지 않습니다. 파일이 MongoDB 문서에 저장 될 수있는 경우 (즉, 16MB 크기 제한 미만) MongoDB 문서에 BLOB로 파일을 저장하는 것이 좋습니다. MongoDB 스토리지 위에 GridFS를 사용하는 오버 헤드를 우회합니다. compose.io/articles/gridfs-and-mongodb-pros-and-cons
Arnaud Bouchez
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.