1 votes

Pourquoi la base de données ne contient-elle pas 10 enregistrements ?

J'utilise JMeter pour tester mon application web. et mon scénario de test consiste à ajouter un enregistrement dans la base de données. Ensuite, j'ai fixé le "nombre de threads" à 20, ce qui signifie que 20 utilisateurs travailleront en même temps. Puis j'ai exécuté le cas de test. Mais finalement, j'ai constaté que le système n'a pas créé 20 enregistrements dans la base de données, mais seulement 13 enregistrements dans la base de données.

Je voudrais savoir pourquoi cela s'est produit ? Est-il possible que dans mon application web je n'ai pas ajouté un "synchronized" devant la méthode d'ajout d'enregistrements ? J'ai utilisé linq, si deux utilisateurs postent une requête pour créer un enregistrement au serveur en même temps, que se passera-t-il ? Un seul enregistrement sera créé ou deux enregistrements seront créés avec succès, ou inconnu ?

Voici un exemple de code pour créer un enregistrement dans la base de données :

       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;
        }
    }

0voto

Messy Points 461

La base de données elle-même devrait être compatible ACID, donc je doute que le problème vienne de la base de données en ce qui concerne la synchronisation. si vous insérez un nouvel enregistrement et que cet enregistrement est lié à quelque chose comme un nombre entier auto-incrémenté, la base de données ne va pas l'écraser à moins que vous ne lui disiez de mettre à jour par cet id, plutôt que d'insérer un nouvel enregistrement. mais comme vous n'écrivez pas le SQL, qui sait vraiment ce que vous demandez à la base de données de faire.

Je suggérerais de supprimer linq de l'équation et d'écrire cela manuellement. Ce que vous testez semble être une opération "upsert" très simple.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X