производительность — плохая практика использовать php транзакции с каждым запросом?

В PHP вы можете запускать транзакции при выполнении запросов. Но когда должен вы используете его? Разве плохо использовать эту функцию с каждым запросом? Или вы должны использовать этот запрос только при добавлении / удалении / обновлении больших объемов данных?

Пример транзакции:

try {
$db->beginTransaction();

$db->exec("some query");

$stmt = $db->prepare("another query");
$stmt->execute(array($value));

$stmt = $db->prepare("another query again??");
$stmt->execute(array($value2, $value3));

$db->commit();
} catch(PDOException $ex) {
//Something went wrong rollback!
$db->rollBack();
echo $ex->getMessage();
}

Я предполагаю, что это сильно снизит производительность, если вы будете делать это с каждым запросом в вашем коде

ТЛ; др Можете ли вы использовать транзакции с каждым запросом? Или вы должны использовать их только при выполнении больших манипуляций с базой данных?

-1

Решение

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

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

Но это имеет значение только в том случае, если у вас высоконагруженный сайт или вам нужно вставить 1000 записей, и каждые 100 мс важны. Если у вас меньше 100 запросов, они просты, и в этом нет ничего плохого, если вы выполните половину из них, а затем перестанете работать сценарии (перезапуск сервера, тайм-аут PHP, …) и ваши данные по-прежнему непротиворечивы — вы не можете использовать транзакции.

Если вы считаете, что не используете транзакции, если не запускаете их явно, вы можете ошибаться. Это зависит от базы данных, но может автоматически запускать транзакцию с каждым запросом.
https://stackoverflow.com/a/2950764/437763

1

Другие решения

Других решений пока нет …