1

JMeterを使用してWebアプリケーションをテストしています。私のテストケースは、データベースにレコードを追加することです。次に、「スレッドユーザー数」を20に設定します。これは、20人のユーザーが同時に作業することをシミュレートすることを意味します。次に、テストケースを実行します。しかし、最終的に、システムがデータベースに20レコードを作成せず、代わりにデータベースに13レコードを作成することに気付きました。

なぜこれが起こったのか知りたいですか?私のWebアプリケーションで、レコードの追加メソッドの前に「同期」を追加しなかったため、可能ですか?linqを使用しました。2人のユーザーが同時にサーバーにレコードを作成するリクエストを投稿した場合、どうなりますか?レコードを作成するだけですか、それとも2つのレコードを正常に作成できますか、それとも不明ですか?

以下は、データベースにレコードを作成するためのサンプルコードです。

       public int SaveEventGroup(int id, Models.Entities.EventGroup e, Nullable<int> setpublish)
    {
        try
        {
            Entities.EventGroup db;
            if (id == 0)
            {
                db = new Entities.EventGroup();
                db.CreatedBy = e.CreatedBy;
                db.CreateDatetime = DateTime.Now;
                db.Status = true;
            }
            else
            {
                db = this.GetEventGroup(id);
            }

            db.NameCN = e.NameCN;
            db.NameEN = e.NameEN;
            db.NameZH = e.NameZH;
            db.NamePT = e.NamePT;
            db.DisplayOrder = GetGroupMaxDisplayOrder() + 1;

            if (setpublish == null)
            {
                db.PublishStatus = false;
                db.PublishDatetime = null;
                db.UpdateDatetime = DateTime.Now;
                db.UpdatedBy = e.UpdatedBy;
            }

            if (id == 0)
                dataContext.AddToEventGroupSet(db);

            dataContext.SaveChanges();

            return db.Id;
        }
        catch (Exception ex)
        {
            log.Error(ex.Message, ex);
            throw ex;
        }
    }
4

1 に答える 1

0

データベース自体はACIDに準拠する必要があるため、同期に関してはデータベースに問題があるとは思えません。新しいレコードを挿入し、そのレコードが自動インクリメント整数などによってキー付けされている場合、新しいレコードを挿入するのではなく、その ID で更新するように指示しない限り、データベースはそれを踏みにじることはありません。しかし、あなたは SQL を書いていないので、あなたがデータベースに何をするように指示しているのか、誰にもわかりません。

方程式から linq を削除し、これを手動で作成することをお勧めします。テストしているのは、非常に単純な「アップサート」操作のようです。

于 2009-11-30T03:49:06.780 に答える