закрытие Connection как можно быстрее
От: Albatross  
Дата: 24.10.06 09:34
Оценка:
Вот тут говорили, что соединение в ADO нужно открывать как можно позже и закрывать как можно раньше.
Например. выбирает юзер команду "показать журнал документов", открываетcя соединение, запускается хранимая процедура, возвращающая журнал, соединение закрывается.
А как же тогда с get_applock и т.п., то есть с программными блокировками работать?
Я хочу, чтобы если я открыл документ, который могу изменить, то при этом установил блокировку, чтобы другие юзеры из своей программы, видя, что блокировка приложения установлена, открывали документ только для чтения! А проблема в том, что при закрытии соединения блокировку сервер снимает. Как лучше поступать?
Re: закрытие Connection как можно быстрее
От: _d_m_  
Дата: 24.10.06 11:19
Оценка:
Здравствуйте, Albatross, Вы писали:

A>Вот тут говорили, что соединение в ADO нужно открывать как можно позже и закрывать как можно раньше.

A>Например. выбирает юзер команду "показать журнал документов", открываетcя соединение, запускается хранимая процедура, возвращающая журнал, соединение закрывается.
A>А как же тогда с get_applock и т.п., то есть с программными блокировками работать?
A>Я хочу, чтобы если я открыл документ, который могу изменить, то при этом установил блокировку, чтобы другие юзеры из своей программы, видя, что блокировка приложения установлена, открывали документ только для чтения! А проблема в том, что при закрытии соединения блокировку сервер снимает. Как лучше поступать?

"Например. выбирает юзер команду "показать журнал документов", открываетcя соединение, запускается хранимая процедура, возвращающая журнал, соединение закрывается."

Далее: открыл соед., sp_getapplock (например, @LockTimeout = 100),

если успешно: открыл документ для редакции, залил изменения в БД, sp_releaseapplock, закрыл соед.
иначе: считал документ в клиентское приложение (режим read-only), закрыл. соед

Ты этого хотел?
Re[2]: закрытие Connection как можно быстрее
От: Albatross  
Дата: 24.10.06 11:36
Оценка:
___>"Например. выбирает юзер команду "показать журнал документов", открываетcя соединение, запускается хранимая процедура, возвращающая журнал, соединение закрывается."

___>Далее: открыл соед., sp_getapplock (например, @LockTimeout = 100),


___>если успешно: открыл документ для редакции, залил изменения в БД, sp_releaseapplock, закрыл соед.

___>иначе: считал документ в клиентское приложение (режим read-only), закрыл. соед

___>Ты этого хотел?


нет, не совсем!
я хочу, чтобы когда у пользователя документ открыт для записи, чтобы он сколь угодно долго мог на него смотреть, потом отредактировать и закрыть. А чтобы, когда он на него смотрит, у других он открывался только для чтения. Ну как, к примеру, открытие файла Excel- первый, кто открыл, открывает его на запись, а другие только читать могут, пока первый не закроет.
а тогда получается, что пока документ у пользователя открыт, то connection должен быть тоже открыт, что нехорошо.
Re[3]: закрытие Connection как можно быстрее
От: Lloyd Россия  
Дата: 24.10.06 11:43
Оценка:
Здравствуйте, Albatross, Вы писали:

A>нет, не совсем!

A>я хочу, чтобы когда у пользователя документ открыт для записи, чтобы он сколь угодно долго мог на него смотреть, потом отредактировать и закрыть. А чтобы, когда он на него смотрит, у других он открывался только для чтения. Ну как, к примеру, открытие файла Excel- первый, кто открыл, открывает его на запись, а другие только читать могут, пока первый не закроет.
A>а тогда получается, что пока документ у пользователя открыт, то connection должен быть тоже открыт, что нехорошо.

Имхо, в этом случае лучше блокировать документ явно. Т.е. когда пользователь открывает документ на редактирование выставлять какой-либо флажок типа "Занят Васей Пупкиным".
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: закрытие Connection как можно быстрее
От: _d_m_  
Дата: 24.10.06 11:50
Оценка:
Здравствуйте, Albatross, Вы писали:

___>>Ты этого хотел?


A>нет, не совсем!

A>я хочу, чтобы когда у пользователя документ открыт для записи, чтобы он сколь угодно долго мог на него смотреть, потом отредактировать и закрыть. А чтобы, когда он на него смотрит, у других он открывался только для чтения. Ну как, к примеру, открытие файла Excel- первый, кто открыл, открывает его на запись, а другие только читать могут, пока первый не закроет.
A>а тогда получается, что пока документ у пользователя открыт, то connection должен быть тоже открыт, что нехорошо.

Ну сколько у тебя будет одновременно редактирующих пользователей? 1000? А если их будет в пределах 50, то это имхо вполне нормально.
Re[4]: закрытие Connection как можно быстрее
От: Albatross  
Дата: 24.10.06 11:52
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>Здравствуйте, Albatross, Вы писали:


___>>>Ты этого хотел?


A>>нет, не совсем!

A>>я хочу, чтобы когда у пользователя документ открыт для записи, чтобы он сколь угодно долго мог на него смотреть, потом отредактировать и закрыть. А чтобы, когда он на него смотрит, у других он открывался только для чтения. Ну как, к примеру, открытие файла Excel- первый, кто открыл, открывает его на запись, а другие только читать могут, пока первый не закроет.
A>>а тогда получается, что пока документ у пользователя открыт, то connection должен быть тоже открыт, что нехорошо.

___>Ну сколько у тебя будет одновременно редактирующих пользователей? 1000? А если их будет в пределах 50, то это имхо вполне нормально.


Много будет!
несколько сотен.
Конечно, они разные документы редактировать будут.
Re[4]: закрытие Connection как можно быстрее
От: _d_m_  
Дата: 24.10.06 11:52
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Имхо, в этом случае лучше блокировать документ явно. Т.е. когда пользователь открывает документ на редактирование выставлять какой-либо флажок типа "Занят Васей Пупкиным".


Кто-то нечаяно дергает за провод и тут компьютер Васи Пупкина выключается. А блокирока — остается висеть.
Re[4]: закрытие Connection как можно быстрее
От: Albatross  
Дата: 24.10.06 11:53
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, Albatross, Вы писали:


A>>нет, не совсем!

A>>я хочу, чтобы когда у пользователя документ открыт для записи, чтобы он сколь угодно долго мог на него смотреть, потом отредактировать и закрыть. А чтобы, когда он на него смотрит, у других он открывался только для чтения. Ну как, к примеру, открытие файла Excel- первый, кто открыл, открывает его на запись, а другие только читать могут, пока первый не закроет.
A>>а тогда получается, что пока документ у пользователя открыт, то connection должен быть тоже открыт, что нехорошо.

L>Имхо, в этом случае лучше блокировать документ явно. Т.е. когда пользователь открывает документ на редактирование выставлять какой-либо флажок типа "Занят Васей Пупкиным".


ничего хорошего из этого не выйдет.
Кто будет снимать флажок, если винда у пользователя упадёт в BSOD?
или он просто выключит комп Power-ом и пойдёт домой.
Re[5]: закрытие Connection как можно быстрее
От: pkarklin  
Дата: 24.10.06 12:03
Оценка:
Здравствуйте, Albatross, Вы писали:

A>Здравствуйте, _d_m_, Вы писали:


___>>Здравствуйте, Albatross, Вы писали:


___>>>>Ты этого хотел?


A>>>нет, не совсем!

A>>>я хочу, чтобы когда у пользователя документ открыт для записи, чтобы он сколь угодно долго мог на него смотреть, потом отредактировать и закрыть. А чтобы, когда он на него смотрит, у других он открывался только для чтения. Ну как, к примеру, открытие файла Excel- первый, кто открыл, открывает его на запись, а другие только читать могут, пока первый не закроет.
A>>>а тогда получается, что пока документ у пользователя открыт, то connection должен быть тоже открыт, что нехорошо.

___>>Ну сколько у тебя будет одновременно редактирующих пользователей? 1000? А если их будет в пределах 50, то это имхо вполне нормально.


A>Много будет!

A>несколько сотен.
A>Конечно, они разные документы редактировать будут.

Не испытываю никаких затруднений держа постоянный коннект (один) для каждого при кол-ве пользоваетелей в несколько сотен и использую следующий механизм "логических блокировок": Проблема с блокировкой записи DELPHI+ADO+MSSQL
Re[6]: закрытие Connection как можно быстрее
От: Albatross  
Дата: 24.10.06 12:11
Оценка:
Здравствуйте, pkarklin, Вы писали:

P>Не испытываю никаких затруднений держа постоянный коннект (один) для каждого при кол-ве пользоваетелей в несколько сотен и использую следующий механизм "логических блокировок": Проблема с блокировкой записи DELPHI+ADO+MSSQL


Так если один коннект нормально, то и sp_getAppLock подойдёт!
хранимая процедура при возврате документа сделает программный лок — если получится, то возвратит юзеру как параметр, что открыто на запись, если не получится — только на чтение.
А процедура обновления и снимет программный лок и всё ок будет
можно даже (даже лучше, наверное) эти локи вызывать из самой проги,а не в хранимке
Re[5]: закрытие Connection как можно быстрее
От: _d_m_  
Дата: 24.10.06 12:12
Оценка:
Здравствуйте, Albatross, Вы писали:

___>>Ну сколько у тебя будет одновременно редактирующих пользователей? 1000? А если их будет в пределах 50, то это имхо вполне нормально.


A>Много будет!

A>несколько сотен.
A>Конечно, они разные документы редактировать будут.

Вышеприведеная схема (окрыл/действие/закрыл) хороша для использования в высоконагруженных веб-приложениях. Рекомендуема также для других приложений. Но вполне нормальным будет держать соединение до тех пор, пока пользователь не завершит редактирование документа.
Re[7]: закрытие Connection как можно быстрее
От: pkarklin  
Дата: 24.10.06 12:15
Оценка:
Здравствуйте, Albatross, Вы писали:

A>Так если один коннект нормально, то и sp_getAppLock подойдёт!

A>хранимая процедура при возврате документа сделает программный лок — если получится, то возвратит юзеру как параметр, что открыто на запись, если не получится — только на чтение.
A>А процедура обновления и снимет программный лок и всё ок будет
A>можно даже (даже лучше, наверное) эти локи вызывать из самой проги,а не в хранимке

Вот и держите коннект открытым. Как там у Булгакова:

Проф. Преображенский: Да-с. Если вы заботитесь о своём пищеварении, мой добрый совет — не говорите за обедом о большевизме и о медицине. И — боже вас сохрани — не читайте до обеда советских газет.

Док. Борменталь: Гм... Да ведь других нет.

Проф. Преображенский: Вот никаких и не читайте.


Re[8]: закрытие Connection как можно быстрее
От: Albatross  
Дата: 24.10.06 12:21
Оценка:
Здравствуйте, pkarklin, Вы писали:

P>Здравствуйте, Albatross, Вы писали:


A>>Так если один коннект нормально, то и sp_getAppLock подойдёт!

A>>хранимая процедура при возврате документа сделает программный лок — если получится, то возвратит юзеру как параметр, что открыто на запись, если не получится — только на чтение.
A>>А процедура обновления и снимет программный лок и всё ок будет
A>>можно даже (даже лучше, наверное) эти локи вызывать из самой проги,а не в хранимке

P>Вот и держите коннект открытым. Как там у Булгакова:


P>Проф. Преображенский: Да-с. Если вы заботитесь о своём пищеварении, мой добрый совет — не говорите за обедом о большевизме и о медицине. И — боже вас сохрани — не читайте до обеда советских газет.


P>Док. Борменталь: Гм... Да ведь других нет.


P>Проф. Преображенский: Вот никаких и не читайте.


P>


да я так и делал и нормально работало!
но это была прога для конторы из 10 человек.
А если их будет несколько сотен, не скажется ли открытый коннект плохо на работе.
Re[9]: закрытие Connection как можно быстрее
От: pkarklin  
Дата: 24.10.06 12:28
Оценка:
Здравствуйте, Albatross, Вы писали:

A>да я так и делал и нормально работало!

A>но это была прога для конторы из 10 человек.
A>А если их будет несколько сотен, не скажется ли открытый коннект плохо на работе.

Естественно, что поддержание коннекта требует дополнительных ресурсов сервера (если мне не изменяет склероз минимум 64кб на коннект). Но, если Вам нужна сессионно-привязанная информация то другого выхода, кроме как держать постоянно открытый коннект я не вижу. Для систем, требующих подключения 10-100 тысяч пользователей уже классическая двузвенка с такой архитектурой не применима. В таких случаях делают 3х(N) уровневую архитектуру и механизм блокировок на уровне бизнес-логики уносят с сервера СУБД на апп.сервер, и на последнем использую пуллинг коннектов.
Re[9]: закрытие Connection как можно быстрее
От: _d_m_  
Дата: 24.10.06 12:28
Оценка:
Здравствуйте, Albatross, Вы писали:

P>>Проф. Преображенский: Да-с. Если вы заботитесь о своём пищеварении, мой добрый совет — не говорите за обедом о большевизме и о медицине. И — боже вас сохрани — не читайте до обеда советских газет.


P>>Док. Борменталь: Гм... Да ведь других нет.


P>>Проф. Преображенский: Вот никаких и не читайте.


P>>


A>да я так и делал и нормально работало!

A>но это была прога для конторы из 10 человек.
A>А если их будет несколько сотен, не скажется ли открытый коннект плохо на работе.

И что, все несколько сотен одновременно редактируют документы? Ведь конект держим только для редактирования.
Re[5]: закрытие Connection как можно быстрее
От: Lloyd Россия  
Дата: 24.10.06 12:38
Оценка:
Здравствуйте, Albatross, Вы писали:

L>>Имхо, в этом случае лучше блокировать документ явно. Т.е. когда пользователь открывает документ на редактирование выставлять какой-либо флажок типа "Занят Васей Пупкиным".


A>ничего хорошего из этого не выйдет.

A>Кто будет снимать флажок, если винда у пользователя упадёт в BSOD?
A>или он просто выключит комп Power-ом и пойдёт домой.

Пишется job-а, которая периодически снимает "зависшие" документы.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: закрытие Connection как можно быстрее
От: _d_m_  
Дата: 24.10.06 12:40
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Пишется job-а, которая периодически снимает "зависшие" документы.


А как она определяет, что они "зависли"?
Re[7]: закрытие Connection как можно быстрее
От: Lloyd Россия  
Дата: 24.10.06 12:48
Оценка:
Здравствуйте, _d_m_, Вы писали:

L>>Пишется job-а, которая периодически снимает "зависшие" документы.


___>А как она определяет, что они "зависли"?


По времени блокировки.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[8]: закрытие Connection как можно быстрее
От: _d_m_  
Дата: 24.10.06 12:59
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, _d_m_, Вы писали:


L>>>Пишется job-а, которая периодически снимает "зависшие" документы.


___>>А как она определяет, что они "зависли"?


L>По времени блокировки.


Что-то больно туманно. Нельзя ли конкретнее? А то в данном форуме не у всех одинаковый уровень знания предмета, да и фантазия тоже. Вот, например, у меня — что-то никак не вижу более-менее стОящего варианта "по времени блокировки" Ограничить время редактирования документа, к примеру, 30 мин? А потом отрубать? Или как? Или это из серии: "иногда лучше жевать, чем говорить"?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.