다음은 간단한 사용법입니다. user2는 user1의 문서를 응용 프로그램 내의 자신의 저장소에 복사하려고합니다. 간단해야한다, 그렇지? 우리가해야 할 일은 blobstore에 user2와 연결할 수있는 키가 리턴 된 두 번째 동일한 blob을 만드는 것뿐입니다. 우리는 여기서 뭔가를 놓치고 있어야합니다. 앱 엔진 얼룩 저장소의 기본 기능은 브라우저에서 업로드 및 다운로드 한 얼룩을 처리하는 것으로 나타 났으며 서버 측에서 시작된 간단한 복사 작업은 그리 간단하지 않습니다.Java의 앱 엔진에서 Blobstore 엔티티의 복사본을 만드는 가장 좋은 방법은 무엇입니까?
명백한 해결책은 Java에서 실험 파일 api를 사용하는 것처럼 보였지만 사랑은 없었습니다. MB 이상의 파일 크기가 될 때까지는 작동하지 않습니다. 예기치 않게 실패합니다. 서버 레이어에이 모든 내용을 읽어도 저장 영역에 복사본을 만들어야 할 때 어리석은 것처럼 보입니다. 또한 우리가 생산 환경에 실험적 기능을 도입 할 확률은 0이 아니지만 가볍습니다.
우리의 환경에 대한 몇 가지 정보 : 응용 프로그램은 Java로 작성되었으며 우리는 클라우드 저장소가 아닌 blobstore를 사용하고 있으며 지금은이를 위해 최선을 다하고 있습니다. 우리는 소규모 부서 팀으로 앱 엔진을 사용할 수있는 훌륭한 플랫폼이라고 주장하지만이 문제는 우리에게 어려움을 겪고 있습니다. S3는이 사실을 간단하게 보이게합니다. 우리는 정말 바보 같은 것을 놓치고 있습니까?
얼룩을 수정할 수 없으므로 왜 복사본을 만들까요? user2에 동일한 blob에 대한 또 다른 참조가 있습니다.사용자가 BLOB의 내용을 삭제할 수 있다면 BLOBSTORE에서 실제로 삭제하기 전에 참조 카운터를 확인하십시오. –
우리는 사용자가 삭제할 수 있기 때문에 그것에 대해 생각했지만 꽤 빨리 폐기되었습니다. 단일 한 얼룩의 우아함과 복사의 고통을 감안할 때, 이것은 또 다른 볼만한 가치가 있습니다. 이것을 모델링하는 가장 좋은 방법은 무엇입니까? blob에 둘 이상의 참조가 있는지 여부를 추적하는 상호 참조 엔터티 - blob이 '복사'될 때 상호 참조 엔터티에 항목을 만들고 '복사'또는 '삭제'될 때까지 카운터 또는 ID를 더하거나 뺍니다. 하나의 참조 만 있습니다. 우리는 카운터 및 데이터 저장소에 대한 어려움을 겪었으므로 실제로 마지막 참조 일 때 실제로 삭제하는 것은 약간 무서운 것입니다. – coleMan
몇 가지 논쟁 끝에 Kalle의 제안을 변형하기로 결정했습니다. 다른 사람들에게 도움이 될 수 있도록 아래에서 답하십시오. 또한, 우리는 코드 구현 질문이 있다고 생각했지만 프로그래머 스택 교환에 더 적합한 아키텍처 문제로 밝혀졌습니다. – coleMan