Что ж, я получил задание [мини-проект], в котором одним из наиболее важных вопросов является согласованность базы данных.Проект представляет собой веб-приложение, которое позволяет нескольким пользователям получать к нему доступ и работать с ним.Я могу ожидать одновременного запроса и обновления запросов в небольшой набор таблиц, некоторые из которых соединены одна с другой (используя FOREIGN KEYS).
Чтобы поддерживать базу данных максимально согласованной, нам посоветовалииспользуйте уровни изоляции.Прочитав немного (может быть, недостаточно?) О них, я понял, что самые полезные для меня - READ COMMITTED и SERIALIZABLE.
Я могу разделить запросы на три вида:
- Выборочный запрос
- Обновление запроса
- Комбо
Для первого мне нужны данные, чтобы они были согласованными, конечно, я не хочу представлять грязныеданные или незафиксированные данные и т. д. Поэтому я подумал использовать READ COMMITTED для этих запросов.Для запроса на обновление я подумал, что использование SERIALIZABLE будет лучшим вариантом, но, прочитав немного, я обнаружил, что потерян.В комбо, мне, вероятно, придется читать из БД и решать, нужно ли мне / можно ли обновлять, эти 2-3 вызова будут происходить по одной транзакции.
Хотел попросить советакакой уровень изоляции использовать в каждом из этих вариантов запроса.Должен ли я даже рассмотреть различные уровни изоляции для каждого типа?или просто придерживаться одного?
Я использую MySQL 5.1.53 вместе с драйвером MySQL JDBC 3.1.14 (Требования ... Не выбрали версию JDBC)
Ваше мнениеочень ценятся!
Редактировать:
Я решил, что буду использовать REPEATABLE READ , который кажется уровнем по умолчанию.Я не уверен, что это правильный способ, но я думаю REPEATABLE READ вместе с LOCK IN SHARE MODE и FOR UPDATE для запросов должны работатьхорошо ...
Что вы, ребята, думаете?