2015-01-22 7 views
1

하늘색 얼룩 API는 때때로 외계인에 의해 설계된 것처럼 보입니다. 가장 단순한 것들이 농구를 뛰어 넘을 필요가있는 아주 이국적인 사용 사례를 위해 설계된 것. 여기 하나가 있습니다.작성 중일 때 다른 서비스에서 하늘색 얼룩이 액세스되지 못하도록 방지

두 명의 작업자 역할이 있습니다. 하나는 모양을 만들고, 다른 하나는 처리하고 (처리가 완료되면 "완료된"폴더로 이동). BLOB 크기는 100MB와 같이 상당히 클 수 있습니다. 분명히, 블롭이 모든 데이터를 갖기 전에 두 번째 역할이 블롭을 읽기 시작하는 것을 원하지 않습니다. 좋습니다, Lease API의 도움을 기대할 수 있습니다 : 임대 계약을 얻고, BLOB를 복사하고, 임대 계약을 해제하십시오. 그런 다음 독자는 처리하기 전에 임대 계약을 취득하려고하므로 대기해야합니다. 그러나 아니요, 아직 존재하지 않는 얼룩에는 임대를 할 수 없습니다. 또한, 나는 원자 연산으로 "on"리스를 가진 blob을 만드는 메소드를 찾을 수 없었다.

트릭이 제대로 작동하는지 알고 계시다면 알려주십시오. 감사합니다.

답변

1

분명히, 나는 블롭 모든 데이터가 전에 덩어리를 읽기 시작하는 제 역할을하지 않습니다.

시간까지 블롭이 블롭이 존재하지 모든 의도와 목적 (또는 다른 말로하면 모든 데이터가 블롭에 기록)과에서 오지 않을 최선을 다하고 있습니다, 당신은 BlockBlob을 만드는 가정 blob 목록 결과 (blob을 나열 할 때 커밋되지 않은 blob을 특별히 요구하지 않는 한). 그래서 나는 특별한 일을 할 필요가 없다고 생각합니다.

좋아, 하나는 임대 API에서 도움을 기대할 수 있습니다 : 임대를 취득, 방울을 복사하고 임대를 릴리스하십시오. 그런 다음 독자는 을 처리하기 전에 임대를 얻으려고 시도하므로 기다려야합니다.

다른 해결책이 있습니다. 당신이 할 수있는 일은 Azure Queues을 사용하는 것입니다. blob 작성자 작업자 역할이 blob 업로드를 완료하면 blob을 처리하는 작업자 역할에 의해 폴링 될 메시지를 대기열에 씁니다. 프로세서 작업자 역할의 인스턴스가 여러 개 있다고 가정하면 각 인스턴스는 blob lease (메시지는 하나의 인스턴스에서만 사용 가능)과 유사한이 큐에서 메시지를 GET 수 있으며 blob 처리를 시작할 수 있습니다.