Тестирование на параллелизм и / или целостность транзакций в веб-приложении с JMeter

Я довольно новичок в работе с несколькими потоками в базе данных (большая часть моей карьеры была потрачена на внешний интерфейс).

Сегодня я попытался протестировать простое php-приложение, которое я написал для хранения значений в базе данных mysql с использованием таблиц ISAM, эмулирующих транзакции с использованием Table Locking.

Я просто написал сообщение в блоге о процедуре здесь:

Тестирование с JMeter

Исходя из моих результатов, мое простое php-приложение сохраняет целостность транзакции (как видно из данных в моих файлах csv, совпадающих с данными, которые я повторно извлек из базы данных):

CSV файлы:

alt csv для alAlt CSV для бл

Запрос данных для обоих пользователей после выполнения теста JMeter:

альтальт

Правильно ли я полагаю, что целостность данных транзакции не повреждена?

Как вы тестируете на параллелизм?

1 ответ

Решение

Почему бы не использовать InnoDB и получить тот же эффект без ручных блокировок таблицы?

Кроме того, от чего ты защищаешься? Рассмотрим двух пользователей (Билл и Стив):

  1. Билл загружает запись 1234
  2. Стив загружает рекорд 1234
  3. Стив меняет запись 1234 и представляет
  4. Билл немного ждет, затем обновляет устаревшую запись 1234 и подает. Эти изменения обломали Билла.

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

Фактически, причина использовать InnoDB поверх MyISAM в том, что он будет выполнять блокировку строк вместо блокировки таблиц. Он также поддерживает транзакции. Многократные обновления для разных записей не будут блокировать друг друга, а сложные обновления для нескольких записей будут блокироваться до завершения транзакции.

Вы должны учитывать вероятность того, что два обновления одной и той же записи произойдут одновременно для вашего приложения. Если это возможно, блокировка таблицы / строки не блокирует второе обновление, а только откладывает его до завершения первого обновления.

РЕДАКТИРОВАТЬ

Из того, что я помню, MyISAM имеет специальное поведение для вставок. Для вставки совсем не нужно блокировать таблицу, так как она просто добавляется в конец таблицы. Это может быть не так для таблиц с уникальными индексами или первичными ключами без автоинкремента.

Другие вопросы по тегам