![]() |
|
Модераторы: LSD |
![]()
|
|
| cra6 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 10.12.2007 Репутация: 2 Всего: 2 |
Здравствуйте,
Есть следующая задача: Существует n хостов с n потоками.Каждый поток выбирает из одной и той же таблицы n строк и апдейтит им статус-делая их закрытыми для других потоков.Пока что есть два варианта-select for update или вызов хранимой процедуры из каждого потока.Вопрос-как это всё таки лучше сделать?И будут ли хранимые процедуры работать корректно(и каким собственно образом--первый вызвал-все остальные ждут?)Если есть ссылки на "где почитать" с радостью кликну. Спасибо. БД- Oracle 10. + java P.S.также надо будет делать для MSSQL. Это сообщение отредактировал(а) cra6 - 21.10.2009, 00:21 |
|||
|
||||
| ToshaCh |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 555 Регистрация: 10.11.2005 Где: Москва, РФ Репутация: 12 Всего: 26 |
Имхо надо писать свои блокировки. dbms_lock и Том Кайт тебе в помощь.
Добавлено через 12 минут и 50 секунд Более того. В оракле никогда, не при каких обстоятельствах не блокируется чтение, в отличии от старых версий MS Sql и Saybase. А вот запись работает по принципу: кто последний тот и папа. Поэтому чтобы блокировать доступ построчно нужно будет писать свою процедуру с использованием dbms_lock. -------------------- Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 -- Oracle это не только способ отмывания денег, но и вполне себе преличная база данных. |
|||
|
||||
| DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
ToshaCh, а чем в данном случае select for update уступает dbms_lock - у?
разница лишь в том что одна блокировка физическая, а другая логическая. |
|||
|
||||
| ToshaCh |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 555 Регистрация: 10.11.2005 Где: Москва, РФ Репутация: 12 Всего: 26 |
Может, я конечно не правильно понял задачу, но блокироваться должна не вся таблица, а какая-то её часть. А если вся то конечно ничем, кроме гемороя это отличаться не будет -------------------- Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 -- Oracle это не только способ отмывания денег, но и вполне себе преличная база данных. |
|||
|
||||
| DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
так for update и не блокирует все, блокируются только те строки которые выбранны, на время транзакции. я просто думал что есть аргументы почему в данном случае логическая блокировка предпочтительней физической. |
|||
|
||||
| DimW |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
мочему вы разделяете это на два способа, по мне так - необходимо реализовать процедуру в которой используется for update. ну или я не уловил сути вопроса, особенно не понятна идея изменеия статусов для блокирования.
поясните. |
||||
|
|||||
| ToshaCh |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 555 Регистрация: 10.11.2005 Где: Москва, РФ Репутация: 12 Всего: 26 |
Угу. Молчу дурак. -------------------- Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 -- Oracle это не только способ отмывания денег, но и вполне себе преличная база данных. |
|||
|
||||
| cra6 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 10.12.2007 Репутация: 2 Всего: 2 |
Уже не раздяляю) Потоками выбираются записи только с определённым статусом.Записи блокируются, у них меняется статус, они разблокируются и после этого происходит их обработка.По моему это проще чем держать блокировку всё время до конца обработки.(Обработка дстаточно сложная)
Процедура в данном случае лучше чем просто запросы?Если не сложно приведите пожалуйста пару аргументов в пользу данного подхода.Будет ли существенная польза? |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 37 Всего: 161 |
Логика работы с данными остается на сервере БД. Процедура являет собой интерфейс для приложения. Много проще будет в дальнейшем сопровождать и модернизировать. Это сообщение отредактировал(а) Zloxa - 27.10.2009, 02:18 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
просто вы сами завели разговор о процедурах, вот я и привел пример. если вы реализуете все логику на java то может и нет смысла выносить механизм блокирования на сторону БД. во всяком случае я сторонник того что бы логика была в одном месте, а вообще Zloxa, все сказал и я разделяю его мнение. Добавлено через 11 минут и 21 секунду |
|||
|
||||
| cra6 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 10.12.2007 Репутация: 2 Всего: 2 |
Простите, не понял. Я не против процедур просто интересно - блокировать с разных хостов запросами for update нельзя? Обьясните, пожалуйста.(используется java + hibernate + spring) |
|||
|
||||
| DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
можно, но если я правильно все понимаю, то это дублирование метода блокировки на каждом хосте, а это означает что в один прекрасный момент они станут разными - со всеми вытикающими... или у вас архитектура не такая как я подумал? |
|||
|
||||
| cra6 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 10.12.2007 Репутация: 2 Всего: 2 |
Ясно.Спасибо за помощь.
|
|||
|
||||
![]()
|
| Правила форума "Oracle" | |
|
|
Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Oracle | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |