Pull to refresh

Comments 4

public function query(..., string $query, array $params = []): array {
$this->connectionPool->freeConnection($connection);
}

У вас на каждый SQL-запрос используется своё подключение, это не будет работать с транзакциями, в реальном приложении это нельзя использовать. В течение всей обработки веб-запроса должно использоваться одно подключение.

Лучше сделать так: для всех изменяющих действий сделать INSERT в таблицу log в той же транзакции, сделать откат транзакции по флагу в GET-параметре с вероятностью 30%, и после завершения бенчмарка проверять, что добавилось то что нужно и ничего не откатилось из-из отката в параллельном запросе. Для UPDATE и DELETE можно добавить предварительный SELECT строки, потому что в приложении обычно надо проверить 404 и 403. Тогда бенчмарки будут иметь практический смысл. Можно проверять 3 сценария отдельно - только запись, только чтение, и поровну. Мне кажется, чем больше операций записи, тем ближе производительность будет к обычному подходу, но наверно все равно немного лучше из-за отсутствия установки подключения к БД. Вопрос в том, насколько. Если разница в пределах 10%, то может и не стоит добавлять из-за этого архитектурную сложность.

Проще получение подключения вынести куда-то повыше и передавать его в качестве аргумента. Также можно связывать подключение с id файбера при старте транзакции или при первом получении из пула. Решаемо.

Не помню, спрашивал ли уже - а на английском этих статей нету? Они заслуживают куда более широкой аудитории, чем полудохлый Хабр.

Вот не стал делать что-то. Так-то могу перевести и опубликовать и на английском, уровень языка достаточный имеется)

Sign up to leave a comment.

Articles