Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хранимые процедуры и многопользовательский режим 
V
    Опции темы
cra6
Дата 21.10.2009, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 10.12.2007

Репутация: 2
Всего: 2



Здравствуйте,
Есть следующая задача:
Существует n хостов с n потоками.Каждый поток выбирает из одной и той же таблицы n строк и апдейтит им статус-делая их закрытыми для других потоков.Пока что есть два варианта-select for update или вызов хранимой процедуры из каждого потока.Вопрос-как это всё таки лучше сделать?И будут ли хранимые процедуры работать корректно(и каким собственно образом--первый вызвал-все остальные ждут?)Если есть ссылки на "где почитать" с радостью кликну. Спасибо.
БД- Oracle 10. + java
P.S.также надо будет делать для MSSQL. 

Это сообщение отредактировал(а) cra6 - 21.10.2009, 00:21
PM MAIL   Вверх
ToshaCh
Дата 21.10.2009, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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 это не только способ отмывания денег, но и вполне себе преличная база данных.
PM MAIL Jabber   Вверх
DimW
Дата 26.10.2009, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 23
Всего: 44



ToshaCh, а чем в данном случае select for update уступает dbms_lock - у?
разница лишь в том что одна блокировка физическая, а другая логическая.
PM MAIL ICQ   Вверх
ToshaCh
Дата 26.10.2009, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 555
Регистрация: 10.11.2005
Где: Москва, РФ

Репутация: 12
Всего: 26



Цитата(DimW @  26.10.2009,  08:23 Найти цитируемый пост)
чем в данном случае select for update уступает dbms_lock

Может, я конечно не правильно понял задачу, но блокироваться должна не вся таблица, а какая-то её часть. А если вся то конечно ничем, кроме гемороя это отличаться не будет smile


--------------------
Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 
--
Oracle это не только способ отмывания денег, но и вполне себе преличная база данных.
PM MAIL Jabber   Вверх
DimW
Дата 26.10.2009, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 23
Всего: 44



Цитата(ToshaCh @  26.10.2009,  14:13 Найти цитируемый пост)
но блокироваться должна не вся таблица, а какая-то её часть

так for update и не блокирует все, блокируются только те строки которые выбранны, на время транзакции.

я просто думал что есть аргументы почему в данном случае логическая блокировка предпочтительней физической.
PM MAIL ICQ   Вверх
DimW
Дата 26.10.2009, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 23
Всего: 44



Цитата(cra6 @  21.10.2009,  00:20 Найти цитируемый пост)
Пока что есть два варианта-select for update или вызов хранимой процедуры из каждого потока.

мочему вы разделяете это на два способа, по мне так - необходимо реализовать процедуру в которой используется for update.
ну или я не уловил сути вопроса, особенно не понятна идея изменеия статусов для блокирования.

Цитата(cra6 @  21.10.2009,  00:20 Найти цитируемый пост)
Каждый поток выбирает из одной и той же таблицы n строк и апдейтит им статус-делая их закрытыми для других потоков.

поясните.

PM MAIL ICQ   Вверх
ToshaCh
Дата 26.10.2009, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 555
Регистрация: 10.11.2005
Где: Москва, РФ

Репутация: 12
Всего: 26



Цитата(DimW @  26.10.2009,  14:34 Найти цитируемый пост)
так for update и не блокирует все, блокируются только те строки которые выбранны, на время транзакции.

Угу. Молчу дурак. smile


--------------------
Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 
--
Oracle это не только способ отмывания денег, но и вполне себе преличная база данных.
PM MAIL Jabber   Вверх
cra6
Дата 27.10.2009, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 10.12.2007

Репутация: 2
Всего: 2



Цитата(DimW @  26.10.2009,  16:19 Найти цитируемый пост)
мочему вы разделяете это на два способа

Уже не раздяляю) 
Цитата(DimW @  26.10.2009,  16:19 Найти цитируемый пост)
особенно не понятна идея изменеия статусов для блокирования.

Потоками выбираются записи только с определённым статусом.Записи блокируются, у них меняется статус, они разблокируются и после этого происходит их обработка.По моему это проще чем держать блокировку всё время до конца обработки.(Обработка дстаточно сложная)
Цитата(DimW @  26.10.2009,  16:19 Найти цитируемый пост)
по мне так - необходимо реализовать процедуру в которой используется for update.

Процедура в данном случае лучше чем просто запросы?Если не сложно приведите пожалуйста пару аргументов в пользу данного подхода.Будет ли существенная польза?
PM MAIL   Вверх
Zloxa
Дата 27.10.2009, 02:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(cra6 @  27.10.2009,  00:29 Найти цитируемый пост)
Процедура в данном случае лучше чем просто запросы?Если не сложно приведите пожалуйста пару аргументов в пользу данного подхода.Будет ли существенная польза? 

Логика работы с данными остается на сервере БД. Процедура являет собой интерфейс для приложения. Много проще будет в дальнейшем сопровождать и модернизировать.

Это сообщение отредактировал(а) Zloxa - 27.10.2009, 02:18


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
DimW
Дата 28.10.2009, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 23
Всего: 44



Цитата(cra6 @  27.10.2009,  00:29 Найти цитируемый пост)
Процедура в данном случае лучше чем просто запросы?

просто вы сами завели разговор о процедурах, вот я и привел пример. если вы реализуете все логику на java то может и нет смысла выносить механизм блокирования на сторону БД. во всяком случае я сторонник того что бы логика была в одном месте, а вообще 
Zloxa, все сказал и я разделяю его мнение.

Добавлено через 11 минут и 21 секунду
Цитата(cra6 @  21.10.2009,  00:20 Найти цитируемый пост)
Существует n хостов с n потоками.

 smile Ё моЁ конечно же процедура!!!  как вы с кучи хостов собрались блокировать данные если логика реализована не в БД.
PM MAIL ICQ   Вверх
cra6
Дата 28.10.2009, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 10.12.2007

Репутация: 2
Всего: 2



Цитата(DimW @  28.10.2009,  10:00 Найти цитируемый пост)
Ё моЁ конечно же процедура!!!  как вы с кучи хостов собрались блокировать данные если логика реализована не в БД. 

Простите, не понял. Я не против процедур просто интересно -  блокировать с разных хостов запросами for update нельзя? Обьясните, пожалуйста.(используется java + hibernate + spring)

PM MAIL   Вверх
DimW
Дата 28.10.2009, 15:14 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 23
Всего: 44



Цитата(cra6 @  28.10.2009,  15:03 Найти цитируемый пост)
блокировать с разных хостов запросами for update нельзя? 

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

PM MAIL ICQ   Вверх
cra6
Дата 28.10.2009, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 10.12.2007

Репутация: 2
Всего: 2



Ясно.Спасибо за помощь.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.0670 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.