1

ここで、ravendb シャード ドキュメント ストア内のドキュメントを更新するのは多忙なようです。これは、id を持つ sess.store を使用して特定のドキュメントを更新しているためです。ストアを使用して同時更新を回避しています。次のコードを使用して更新しています。

これが文書構造です

public class DistributorRechargePayment:IPOCOLogInfo
            {

               [JsonIgnore]
               public Guid? Etag;
               public String Id { get; set; }
               public String ReceiptNo { get; set; }
               public TransactionTypes TransactionType { get; set; }
               public String PaymentId { get; set; }
        }

ここに更新用のコードがあります

sess.Store(distbpayment, myguid1, distbpayment.Id);

私のシャード戦略では、次のように他の値を持つシャードキーを参照しました

 var shards = new Dictionary<string, IDocumentStore>
            {
                {"zero", new DocumentStore {Url = "http://localhost:8080"}},
                {"one", new DocumentStore {Url = "http://localhost:8081"}},
                {"two", new DocumentStore {Url = "http://localhost:8082"}},

            };
        shardStrategy = new ShardStrategy(shards).ShardingOn<DistributorRechargePayment>(x => x.ReceiptNo);

ここで何が起こるかというと、ドキュメントが最初に保存されたときです。たとえば、レシート番号が one-123455 の場合、このドキュメントは正しいシャードに移動します。そして、ドキュメント ID が one-DistributorRechargePayment-1 であるときにストアを再度更新すると、ID が one-one-DistributorRechargePayment-1 として書き直され、エラーがスローされます。

ここで、sess.saveshanges() を使用できたはずです。しかし、楽観的な同時実行性を確保するには、sess.store() が必要です。オプティミスティック コンカレンシーを使用し、シャード ストアも実現するソリューションが必要です

4

0 に答える 0