ここでは簡単な使用例を示します。user2は、user1のドキュメントをアプリケーション内の自分のリポジトリにコピーします。シンプルにする必要がありますか?私たちが行う必要があるのは、blobstoreにuser2と関連付けることができるキーが返された2番目の同一のblobを作成することだけです。ここには何かが欠けているはずです。アプリエンジンブロブストアの主な機能は、ブラウザからアップロードされ、ブラウザにダウンロードされたブロブを処理することであり、サーバーサイドで開始された単純なコピー操作はあまり簡単ではないようです。Javaのアプリケーションエンジンでブロブストアエンティティのコピーを作成する最善の方法は何ですか?
明らかな解決策は、Javaの実験ファイルapiを使用していたようですが、愛はありません。 MB以上のファイルサイズで起きるまで、それはうまくいかず、予期せず失敗します。それをすべてサーバーレイヤーに読み込むことは、ストレージレイヤーにコピーを作成するだけでいいようです。さらに、私たちが実稼働環境に実験的機能を導入する可能性は薄いですが、ゼロではありません。
私たちの環境に関するいくつかの情報:アプリケーションはJavaで書かれており、クラウドストレージではなくblobstoreを使用しています。私たちは小規模な部署のチームで、アプリエンジンは使いやすいプラットフォームだと考えていますが、これは私たちには困惑しています。 S3はこれを驚くほど単純にしています。本当にここで馬鹿なことがありますか?
ブロブは変更できないため、コピーを作成する理由は何ですか? user2の同じブロブへの別の参照があります。ユーザーがブロブの内容を削除することが許可されている場合は、ブロブストアから実際に削除する前に参照カウンタをチェックしてください。 –
私たちはそれについて考えましたが、ユーザーが削除できるのでかなり早く廃止されました。単一の小滴の優雅さとコピーの苦労を考えると、これは別の見方をする価値があります。これをモデル化する最良の方法は何でしょうか? blobに複数の参照があるかどうかを追跡する相互参照エンティティ - BLOBが 'コピー'されたときに相互参照エンティティにエントリを作成し、 'コピー'または '削除'されるたびにカウンタまたはIDを加算/減算します。参照は1つしかありません。私たちはカウンターやデータストアで挑戦してきました。だから、実際に削除したのはちょっと残念です。 – coleMan
いくつかの議論の末、私たちはKalleの提案の変種を使うことに決めました。それが他の人を助ける場合は、以下の回答をしてください。また、私たちは、コードの実装に関する質問があると思っていましたが、おそらくプログラマーのスタック交換に適したアーキテクチャー上の問題であることが判明しました。 – coleMan