복붙노트

[HADOOP] 확장 가능한 이미지 저장

HADOOP

확장 가능한 이미지 저장

저는 현재 이미지 저장 장치의 일종을 제공해야하는 웹 기반 응용 프로그램을위한 아키텍처를 설계하고 있습니다. 사용자는 서비스의 핵심 기능 중 하나로 사진을 업로드 할 수 있습니다. 또한 이러한 이미지를 보는 것은 웹을 통한 주요 사용법 중 하나입니다.

그러나 응용 프로그램에서 이러한 확장 가능한 이미지 저장 구성 요소를 구현하는 방법을 잘 모르겠습니다. 나는 이미 여러 가지 해결책에 대해 생각해 보았지만 실종 경험으로 인해 귀하의 제안을 기다리고 있습니다. 이미지를 제외하고는 메타 데이터도 폐기해야합니다. 여기에 내 초기 생각은 다음과 같습니다.

해결법

  1. ==============================

    1.우리는 CouchDB를 사용하여 이미지를 "첨부 파일"로 저장했습니다. 그러나 1 년이 지난 현재 수십 개의 GB CouchDB Database 파일이 두통으로 밝혀졌습니다. 예를 들어 CouchDB 복제는 매우 큰 문서 크기에서 사용하는 경우 여전히 문제가 있습니다.

    우리는 CouchDB를 사용하여 이미지를 "첨부 파일"로 저장했습니다. 그러나 1 년이 지난 현재 수십 개의 GB CouchDB Database 파일이 두통으로 밝혀졌습니다. 예를 들어 CouchDB 복제는 매우 큰 문서 크기에서 사용하는 경우 여전히 문제가 있습니다.

    그래서 이미지 정보 용 CouchDB와 실제 이미지 저장 용 Amazon S3를 사용하기 위해 소프트웨어를 다시 작성했습니다. 이 코드는 http://github.com/hudora/huImages에서 볼 수 있습니다.

    프로젝트에 현장에서 Amazon S3 호환 스토리지 서비스를 설치하고자 할 수 있습니다. 이것은 당신에게 유연성을 유지하고 지금은 외부 서비스를 요구하지 않고 아마존 옵션을 떠난다. Walruss는 가장 인기 있고 확장 성이 뛰어난 S3 클론으로 보입니다.

    또한 훌륭한 오픈 소스 MogileFS 및 Perlbal 제품으로 Livejournal의 디자인을 살펴 보시기 바랍니다. 이 조합은 아마도 가장 유명한 이미지 제공 설정입니다.

    또한 라이브 저널처럼 오픈 소스 소프트웨어를 대중에게 제공하지는 않지만 flickr Architecture는 영감을 줄 수 있습니다.

  2. ==============================

    2."추가 질문 : CouchDB는 Base64를 통해 얼룩을 저장합니다."

    "추가 질문 : CouchDB는 Base64를 통해 얼룩을 저장합니다."

    CouchDB는 blob을 Base64로 저장하지 않고 곧은 바이너리로 저장됩니다. ? attachments = true로 JSON 문서를 검색 할 때 디스크 기반 바이너리를 JSON에 안전하게 추가하기 위해 디스크 기반 바이너리를 Base64로 변환하지만 이것은 단지 프리젠 테이션 수준의 것입니다.

    독립형 첨부 파일을 참조하십시오.

    CouchDB는 저장된 콘텐츠 유형의 첨부 파일을 제공합니다. 실제로 HTML, CSS 및 GIF / PNG / JPEG 첨부 파일을 브라우저에 직접 연결할 수 있습니다.

    첨부 파일을 스트리밍 할 수 있으며, CouchDB 1.1에서는 Range 헤더 (미디어 스트리밍 및 중단 된 다운로드 재개)를 지원합니다.

  3. ==============================

    3.페이스 북의 건초 더미 용지 인 해초 -FS (Weed-FS라고 불렀었다)를 사용하십시오.

    페이스 북의 건초 더미 용지 인 해초 -FS (Weed-FS라고 불렀었다)를 사용하십시오.

    해초 -FS는 매우 융통성이 있으며 기초까지 깎여 있습니다. 수십억 개의 이미지를 저장하고 빠르게 제공하기 위해 만들어졌습니다.

  4. ==============================

    4.Amazon Web Services를 고려해 보셨습니까? S3은 웹 기반 파일 저장소이며 SimpleDB는 키 -> 속성 저장소입니다. 둘 다 성능이 뛰어나고 확장 성이 뛰어납니다. 자신의 서버와 설정을 유지하는 것보다 비용이 많이 들지만 (사용자가 직접 해보고 사람들을 고용하지 않는다고 가정 할 때), 더 빨리 일어나서 실행할 수 있습니다.

    Amazon Web Services를 고려해 보셨습니까? S3은 웹 기반 파일 저장소이며 SimpleDB는 키 -> 속성 저장소입니다. 둘 다 성능이 뛰어나고 확장 성이 뛰어납니다. 자신의 서버와 설정을 유지하는 것보다 비용이 많이 들지만 (사용자가 직접 해보고 사람들을 고용하지 않는다고 가정 할 때), 더 빨리 일어나서 실행할 수 있습니다.

    편집 : 나는 그것을 다시 가져옵니다 - 높은 볼륨에서 장기적으로는 더 비싸지 만, 낮은 볼륨에서는 하드웨어 구입의 초기 비용보다 높습니다.

    S3 : http://aws.amazon.com/s3/ (여기에 이미지 파일을 저장할 수 있으며 서버에 이미지 캐시가있을 수도 있고 그렇지 않을 수도 있습니다)

    SimpleDB : http://aws.amazon.com/simpledb/ (메타 데이터는 여기에 올 수 있습니다 : 저장하려는 데이터에 이미지 ID 매핑)

    편집 2 : 나는 이것에 대해 알지 못했지만 Amazon CloudFront (http://aws.amazon.com/cloudfront/)라는 새로운 웹 서비스가 있습니다. 그것은 빠른 웹 컨텐츠 전달을위한 것이며 S3와 잘 통합됩니다. 귀하의 이미지에 대한 Akamai와 같은 종류. 이것을 이미지 캐시 대신 사용할 수 있습니다.

  5. ==============================

    5.우리는 MogileFS를 사용합니다. 우리는 8TB 미만의 파일과 약 5 천만 개의 파일을 가진 소규모 사용자입니다. 몇 년 전에 Amazon S3에 저장하는 것을 전환하여 파일 이름과 성능을보다 잘 제어했습니다.

    우리는 MogileFS를 사용합니다. 우리는 8TB 미만의 파일과 약 5 천만 개의 파일을 가진 소규모 사용자입니다. 몇 년 전에 Amazon S3에 저장하는 것을 전환하여 파일 이름과 성능을보다 잘 제어했습니다.

    가장 훌륭한 소프트웨어는 아니지만 매우 "현장 테스트를 거쳐"기본적으로 모든 사용자가 동일한 방식으로 사용합니다.

  6. ==============================

    6.어쩌면 Facebook hayStack의 설명을 살펴보십시오.

    어쩌면 Facebook hayStack의 설명을 살펴보십시오.

    건초 더미의 바늘 : 수십억 개의 사진을 효율적으로 저장

  7. ==============================

    7.Cloudant의 일환으로 나는 제품을 밀어 넣고 싶지는 않지만 .... BigCouch는 과학 응용 프로그램 스택에서이 문제를 해결합니다. (물리학 - Cloudant와는 관계가 없으며 확실히 이익과 관련이 없습니다.) CocuhDB 디자인의 단순성과 단일 서버 CouchDB에서 누락 된 자동 샤딩 및 확장 성을 결합합니다. 일반적으로 작은 파일 (multi-GB)과 작은 파일 (100MB 이하)을 저장하는 데이 파일을 사용합니다. S3를 사용하고 있었지만 실제로는 반복적으로 액세스되는 작은 파일을 추가하기 시작했습니다.

    Cloudant의 일환으로 나는 제품을 밀어 넣고 싶지는 않지만 .... BigCouch는 과학 응용 프로그램 스택에서이 문제를 해결합니다. (물리학 - Cloudant와는 관계가 없으며 확실히 이익과 관련이 없습니다.) CocuhDB 디자인의 단순성과 단일 서버 CouchDB에서 누락 된 자동 샤딩 및 확장 성을 결합합니다. 일반적으로 작은 파일 (multi-GB)과 작은 파일 (100MB 이하)을 저장하는 데이 파일을 사용합니다. S3를 사용하고 있었지만 실제로는 반복적으로 액세스되는 작은 파일을 추가하기 시작했습니다.

  8. ==============================

    8.AWS의 모든 것들이 작동하지 않는다면, 여기에 몇 가지 생각이 있습니다.

    AWS의 모든 것들이 작동하지 않는다면, 여기에 몇 가지 생각이 있습니다.

    지금까지 (3)과 같이 바이너리 데이터를 데이터베이스에 저장하면 동일한 데이터가 나옵니다. JPEG로 만드는 이유는 데이터베이스의 형식이 아니라 데이터베이스의 생각입니다. Content-type 헤더를 image / jpeg로 설정할 때 클라이언트 (웹 브라우저)가 jpeg로 생각하는 이유는 무엇입니까? 텍스트와 같은 다른 텍스트 (권장하지 않음)로 설정할 수도 있습니다. 브라우저가 텍스트를 해석하려고 시도하는 방법입니다.

    디스크상의 스토리지의 경우 CouchDB를 좋아하지만 HDFS는 확실히 작동합니다. 다음은 CouchDB에서 이미지 컨텐츠를 제공하는 방법에 대한 링크입니다. http://japhr.blogspot.com/2009/04/render-couchdb-images-via-sinatra.html

    편집 : linux / apache 아래 디스크에서 memcached와 vc를 검색하여 이미지를 캐싱하는 것에 대한 유용한 토론 링크가 있습니다.

  9. ==============================

    9.필자는 Python 뷰 서버에서 CouchDB 뷰 서버에 사용할 수있는 _update 기능을 실험 해왔다.

    필자는 Python 뷰 서버에서 CouchDB 뷰 서버에 사용할 수있는 _update 기능을 실험 해왔다.

    필자가 한 멋진 기능 중 하나는 이미지 업로드를위한 업데이트 기능 이었기 때문에 PIL을 사용하여 축소판 및 기타 관련 이미지를 만들고이를 CouchDB에 푸시 할 때 문서에 첨부 할 수있었습니다.

    이는 이미지 조작이 필요하고 유지해야 할 코드 및 인프라의 양을 줄이려는 경우에 유용 할 수 있습니다.

  10. ==============================

    10.카산드라 위에 이미지 저장소를 썼습니다. 우리에게는 쓰기가 많으며 쓰기 및 임의 읽기는 거의 없습니다. 읽기 / 쓰기 비율이 높으면 mongodb (GridFs)를 제안합니다.

    카산드라 위에 이미지 저장소를 썼습니다. 우리에게는 쓰기가 많으며 쓰기 및 임의 읽기는 거의 없습니다. 읽기 / 쓰기 비율이 높으면 mongodb (GridFs)를 제안합니다.

  11. ==============================

    11.다음은 PHP Laravel을 사용하여 CouchDB에 blob 이미지를 저장하는 예제입니다. 이 예에서는 사용자 요구 사항에 따라 세 개의 이미지를 저장합니다.

    다음은 PHP Laravel을 사용하여 CouchDB에 blob 이미지를 저장하는 예제입니다. 이 예에서는 사용자 요구 사항에 따라 세 개의 이미지를 저장합니다.

    CouchDB에서 연결 설정하기.

    $connection = DB::connection('your database name');
    
    /*region Fetching the Uers Uploaded Images*/
    
    $FirstImage = base64_encode(file_get_contents(Input::file('FirstImageInput')));
    $SecondImage =base64_encode(file_get_contents(Input::file('SecondImageInput')));
    $ThirdImage = base64_encode(file_get_contents(Input::file('ThirdImageInput')));
    
    list($id, $rev) = $connection->putDocument(array(
        'name' => $name,
        'location' => $location,
        'phone' => $phone,
        'website' => $website,
        "_attachments" =>[
            'FirstImage.png' => [
                'content_type' => "image/png",
                'data' => $FirstImage
            ],
            'SecondImage.png' => [
                'content_type' => "image/png",
                'data' => $SecondImage
            ],
            'ThirdImage.png' => [
                'content_type' => "image/png",
                'data' => $ThirdImage
            ]
        ],
    ), $id, $rev);
    
    ...
    

    단일 이미지를 저장할 수있는 것과 동일합니다.

  12. from https://stackoverflow.com/questions/1961191/scalable-image-storage by cc-by-sa and MIT license