2

新しいエンティティの自動インクリメントIDが常に既存のIDよりも大きいことが保証されていますか?新しいエンティティの数値の自動インクリメントIDが常に既存のIDよりも大きいことが保証されていますか?

基本的に、定期的に、バックグラウンドタスクのエンティティ(例:コメント)を、顧客が作成したように大きなブロブに定期的にダンプします。 100個のエンティティが今あるかどう

だから私はブロブに保存し、

class BlobRange 
{ 
    long fromId; // Comment.id 
    long toId;  // Comment.id 
    String blobKey; 
} 

のように、このブロブのためのバックグラウンドタスクが最大のBlobRange.toIdを見つけるだろうし、Commentの新しいチャンクをフェッチします次の時間をヘルパーエンティティを作成しますidBlobRange.toIdより大きく、この例では100より大きい。

答えて

3

Afaik、no。 IDはブロック内に割り当てられているようです(here参照)。私は個人的に1001,2001,1002,3001,2002などのように割り当てられたIDを見てきました。ブロック内で連続してインクリメントされているようですが、いくつかのブロックが並行して使用されているようです。

このように、新しいエンティティをチェックすることはできません。

代わりにQuery Cursorsを使用してください。 Commentが作成されたときに記録するCommentにtimestampプロパティ(タイプlongのunixタイムスタンプにすることができます)を作成します。次に、クエリとカーソルを使用して新しいエンティティを検出します。

+0

ええ、まさに私が今やっていることです。問題は、ピークロード時にほぼ同時に追加されたコメント用の2つのブロブの間に重複があることです。私は重複をフィルタリングしますが、私はこの小さな問題を完全に排除できると考えました。 – expert

関連する問題