Вопрос

Я использую JMeter для тестирования своего веб-приложения. и мой тестовый пример заключается в добавлении записи в базу данных. а затем я устанавливаю «номер пользователя потока» до 20 это означает, что он будет симулировать работу 20 пользователей одновременно. а затем я запускаю тестовый пример. Но в конце концов я обнаружил, что система не создает 20 записей в базе данных, а просто создает 13 записей в базе данных.

Я хочу знать, почему это произошло? Возможно ли, потому что в моем веб-приложении я не добавил " синхронизированный " перед методом добавления записей? Я использовал linq, если два пользователя отправят запрос на создание записи на сервер одновременно, что произойдет? Просто создайте запись или можете успешно создать две записи, или неизвестно?

Ниже приведен пример кода для создания записи в базе данных:

       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;
        }
    }
Это было полезно?

Решение

сама база данных должна быть ACID-совместимой, поэтому я сомневаюсь, что проблема с базой данных, когда дело доходит до синхронизации. если вы вставляете новую запись, и эта запись вводится с помощью чего-то вроде целого числа с автоинкрементом, база данных не будет ее растирать, если вы не скажете обновить ее по этому идентификатору, а не вставите новую запись. но поскольку вы не пишете SQL, он действительно знает, что вы указываете базе данных делать.

Я бы предложил удалить linq из уравнения и написать это вручную. то, что вы тестируете, выглядит очень просто "upsert" операции.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top