Как реализовать модель ACID для базы данных - PullRequest
3 голосов
/ 24 ноября 2010

Как мне добиться ACID-свойств для моей базы данных - A-атомарность, C-согласованность, I-изоляция, D-долговечность.Используемая система баз данных - MySql.

Ответы [ 3 ]

18 голосов
/ 24 ноября 2010

Ну, ACID - это не модель, которую вы можете реализовать, а набор правил, которым должен соответствовать сервер базы данных, чтобы иметь возможность безопасно обрабатывать транзакции.

MySQL не является сервером баз данных, совместимым с ACID, но если вы используете для хранения таблиц механизм хранения InnoDB (или лучше в качестве механизма хранения по умолчанию для сервера баз данных, задав для параметра default-storage-engine значение InnoDB (см. Параметр default-storage-engine )), вы сможете выполнять безопасные для транзакций операции с вашей базой данных.

Я рекомендую установить InnoDB в качестве механизма хранения по умолчанию, поскольку важно, чтобы не смешивал операции с таблицами с различными механизмами хранения в рамках одной транзакции (например, таблицы InnoDB и MyISAM). В противном случае вы можете повредить ваши данные, потому что вы не сможете откатить все свои операции, если откатите свою транзакцию.

Тем не менее, как вы гарантируете, что ваши операции совместимы с ACID? Просто с помощью сгруппируйте операции внутри транзакций , чтобы перейти из одного непротиворечивого состояния ваших данных в другое , и выполните фиксацию в конце, если все прошло хорошо, или откат, если что-то пошло не так. Для этого вам нужно сообщить серверу базы данных, когда ваша транзакция начинается с выдачи оператора START TRANSACTION, а когда ваша транзакция заканчивается оператором COMMIT или ROLLBACK.

Обычно рекомендуется отключить режим автоматической фиксации в начале ваших сценариев с помощью команды SET AUTOCOMMIT=0, хотя это не является обязательным, поскольку команда START TRANSACTION фактически отключает режим автоматической фиксации.

Также имейте в виду, что некоторые операторы выдают неявную команду COMMIT (в основном все операторы DDL и некоторые другие, см. Утверждения, которые вызывают неявный коммит ).

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

3 голосов
/ 24 ноября 2010

Используйте innoDB-движок в MySQL, создайте правильную схему базы данных, включающую внешние ключи, используйте транзакции для связанных запросов, используйте серверное оборудование и дайте базе данных выполнить свою работу.

http://en.wikipedia.org/wiki/ACID

0 голосов
/ 24 ноября 2010

Если я правильно вас понял, это не ваша задача.Это задача разработчиков MySql (Oracle).Если сервер базы данных поддерживает ACID, вы можете использовать его, выбрав правильный уровень изоляции и используя транзакции (явные или явные).

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