Реальное использование MySQL точек сохранения в веб-сервисах? - PullRequest
6 голосов
/ 26 февраля 2009

У кого-нибудь есть опыт, которым он может поделиться, используя MySQL точки сохранения (напрямую или через ORM), особенно в нетривиальном веб-сервисе? Где вы на самом деле использовали их? Являются ли они достаточно надежными (если вы готовы запустить довольно свежую версию MySQL) или слишком инновационными или дорогими?

Наконец, кто-нибудь имел опыт работы с чем-то вроде следующего варианта использования, и вы использовали для этого точки сохранения? Скажем, основной смысл какой-то конкретной единицы работы - добавить строку в таблицу Orders (или что-то еще, разумеется, не обязательно должно быть связано с заказом) и обновить таблицу OrdersAuditInfo в той же транзакции , Важно, чтобы Orders было обновлено, если это вообще возможно, но таблица OrdersAuditInfo не так важна (например, можно просто записать ошибку в файл, но продолжить выполнение всей транзакции). На низком уровне это может выглядеть так (предупреждение, псевдо-SQL следует):

BEGIN;

INSERT INTO Orders(...) VALUES (...);
/* Do stuff outside of SQL here; if there are problems, do a
 ROLLBACK and report an error (i.e., Order is invalid in this
 case anyway). */

SAVEPOINT InsertAudit;
INSERT INTO OrdersAudit(...) VALUES(...);
/* If the INSERT fails, log an error to a log file somewhere and do: */
ROLLBACK TO SAVEPOINT InsertAudit;

/* Always want to commit the INSERT INTO Orders: */
COMMIT;

Но даже здесь, возможно, найдется лучшая (или, по крайней мере, более распространенная) идиома? Можно сделать вставку OrdersAuditInfo в совершенно другой транзакции, но было бы неплохо гарантировать, что таблица OrdersAuditInfo будет не записана, если только окончательная COMMIT фактически не сработает.

1 Ответ

1 голос
/ 03 марта 2009

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

В случае, если вы разместили сообщение, перенос в одну транзакцию будет зависеть от того, входит ли в ваши бизнес-правила наличие OrdersAudit записей, точно соответствующих Orders.

РЕДАКТИРОВАТЬ: Просто перечитайте свой вопрос, и у вас нет требования для гарантированной корреспонденции между OrdersAudit и Orders. Поэтому я не буду использовать транзакцию для вставки записей OrdersAudit.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...