2013-03-18 2 views
1

Я использую сервер Percona (MySQL), в настоящее время разрабатывая сетевое настольное приложение с несколькими пользователями, которые используют приложение. Моя база данных приложений innodb с транзакциями, но у меня есть проблема при выборе, который Сделка транзакций Я должен использовать, мое приложение чувствительно, так как оно имеет финансовые отчеты. Итак, может кто-то помочь мне решить, какую транзакционную изоляцию я должен использовать?MySQL Transaction-Isolation

+0

И вопрос ...? – zerkms

+0

Какую транзакционную изоляцию я должен использовать? –

+2

все зависит. Вы сначала читали http://dev.mysql.com/doc/refman/5.5/en/set-transaction.html? – zerkms

ответ

5

@deceze и @zerkms верны - это не характер ваших данных, который определяет лучшую изоляцию транзакций. Это характер вашего приложения и его запросов. Вы даже можете найти случаи использования обоих уровней изоляции в одном приложении.

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

Read-commit также позволяет другим сеансам изменять данные одновременно, но в вашей транзакции всегда будет отображаться последнее зафиксированное состояние данных. Таким образом, один и тот же запрос может возвращать разные (более современные) результаты, даже в течение одной и той же транзакции. Это полезно, потому что это уменьшает необходимость в том, чтобы база данных сохраняла старые версии строк для вашей долгосрочной транзакции.

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