Тестирование на параллельность и / или целостность транзакций в веб-приложении с JMeter - PullRequest
1 голос
/ 30 апреля 2009

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

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

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

Тестирование с помощью JMeter

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

CSV-файлы:

alt csv for al alt csv for bl

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

alt alt

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

Как вы проверяете параллелизм?

1 Ответ

2 голосов
/ 30 апреля 2009

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

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

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

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

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

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

EDIT

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

...