![]() |
|
Модераторы: LSD |
![]()
|
|
| HugeX |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 19.9.2009 Репутация: нет Всего: нет |
Добрый день всем участникам форума!
Я занимаюсь разработкой системы для приема платежей и у меня возникли некоторые вопросы по поводу организации работы с базой данных. Вот структура системы, которая есть на данный момент: - существует N серверов, которые принимают запросы от клиентов и заносят их в таблицу транзакций, присваивая им определенный статус (к примеру, требует обработки) - существует M запущенных программ на серверах, которые вытягивают из таблицы транзакций записи, которые требуют обработки и обрабатывают их Сейчас я думаю, как сделать так, чтоб две программы не смогли вытянуть одновременно одну и ту же запись. Естественно, как только я достаю запись, я ставлю ей другой статус, но это не спасает ситуацию. Я так думаю, что тут нужно использовать механизм блокировки таблицы на чтение или устанавливать TRANSACTION ISOLATION LEVEL в SERIALIZABLE во время извлечения записи и изменения её статуса. В общем, кто имел дело с подобными системами или больше меня разбирается в работе с БД, пожалуйста, высказывайте свои мысли |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
платформа?
-------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| HugeX |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 19.9.2009 Репутация: нет Всего: нет |
На моём компьютере стоит Windows 7 + Java + MySQL Server 5.1
На сервере, где это всё будет работать - Debian + Java + MySQL Server 5.1 |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
К сожалению в особенностях работы блокировок MySQL я мало сведущ.
Тому, кто сведущ, еще бы, наверняка, помогло упоминание движка MySql(хотя елсли речь идет об изоляции транзакций, думаю это InnoDB) и будет будет ли жава использоваться как мидлваря или как клиент? В смысле - сколькизвенка? А если так, чисто помыслить вслух, я бы для начала порекомендовал попытаться смоделировать чтение в сериалайзабл с последующим апдейтом по критерию отбора в многопользовательском режиме. Сдается мне что многопользовательский доступ может деградировать в однопользовательский, и в один момент времени работать будет только один из N процессов, остальные - толкаться на блокировке. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| HugeX |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 19.9.2009 Репутация: нет Всего: нет |
Я так понял, вы имеете ввиду, устанавливать в SERIALIZABLE, потом выбирать запись, изменять её статус и возвращать уровень изоляции в первоначальный? Кстати, какой он по дефолту?
|
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
HugeX, я предполагаю, что если вы будете так поступать, то сериализуете транзакции чуть более чем полностью. Смысла пускать N процессов не будет никакого. Работать в один момент времени будет только один.
Поменять уровень изоляции конкретной транзакции, скорее всего невозможно, если такая возможность не является, конечно, особенностью MySQL, что врядли. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| HugeX |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 19.9.2009 Репутация: нет Всего: нет |
Я думаю, это будет иметь смысл, так как время обработки конкретной транзакции намного превышает время выборки, так как нужно ждать ответ от провайдера.
, |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
Я Вас совсем тут не понял. Видать мы говорим о разных вещах. Я уже много раз зарекался пытаться помогать в том, в чем сам не вполне компетентен, даже если тема мне очень интересна. Я тут попробовал побаловаться на MS SQL с serializeable. У меня получилось из двух сессий выбраться в этом режиме изоляции, на блокировке встал первый апдейт. В этом контексте мне перестало быть понятным приемущество для данной задачи serializeable перед read commited. Это сообщение отредактировал(а) Zloxa - 30.9.2010, 14:10 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
HugeX, ну как у Вас там дела? не поделитесь принятыми решениями?
-------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
![]()
|
| Правила форума "Общие вопросы по базам данных" | |
|
|
Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:
Данный форум не предназначен для:
Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение.
Полезные советы: Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | СУБД, общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |