powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / WEB интерфейс
59 сообщений из 59, показаны все 3 страниц
WEB интерфейс
    #34833966
Чендлер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приходится разрабатывать веб интерфейс. Никогда ранее веб интерфейс при помощи jsp не писал. Архитектура система трёх уровневая (субд, сервер приложений, браузер). С какой стороны ко всему этому подходить? Как решить проблему с блокировкой данных, если пользователь начал редактировать чтото то другой пользователь не должен редактировать теже самые данные. Ка это можно сделать? еслибы интерфейс был гуишный то всё понятно - установил соединение, сделал селект фор апдейт и всё.
...
Рейтинг: 0 / 0
WEB интерфейс
    #34834006
am_sasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чендлер С какой стороны ко всему этому подходить? сторон много, начинать надо с хелло ворлд для веб, а дальше сам разберешься! и читать...читать...читать... а потом уже конкретные вопросы в форум! думую с этой стороны)))
...
Рейтинг: 0 / 0
WEB интерфейс
    #34834935
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала изучить обзорно многообразие существующих решений.
JSP, JSF, Wicket, Spring MVC, Velocity, Struts 2, Tapestry, GWT и пр.
Остановится на одном понравившемся.

SELECT FOR UPDATE, конечно хорошо. Но советую подтянуть теорию в плане оптимистичных, пессимистичных локов и какой когда лучше пользовать.
После этого посмотреть java.util.concurrent и научится применять локи и другие средства синхронизации в коде так же хорого как и в базе.
...
Рейтинг: 0 / 0
WEB интерфейс
    #34835004
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz wrote:

> Для начала изучить обзорно многообразие существующих решений.
> JSP, JSF, Wicket, Spring MVC, Velocity, Struts 2, Tapestry, GWT и пр.
> Остановится на одном понравившемся.

Кстати, а как выбирать? Т.е. как понять, что же лучше для конкретного
применения/разработчика?

--
Алексей
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
WEB интерфейс
    #34835175
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GKS_Samara
> Для начала изучить обзорно многообразие существующих решений.
> JSP, JSF, Wicket, Spring MVC, Velocity, Struts 2, Tapestry, GWT и пр.
> Остановится на одном понравившемся.

Кстати, а как выбирать? Т.е. как понять, что же лучше для конкретного
применения/разработчика?

Универсального рецепта конечно же нет. Надо долго и нудно анализировать требования проекта сравнивая с сильными и слабыми сторонами каждого подхода.
Если бы я программил просто развлечь себя любимого, то взял бы Spring MVC + Freemarker
Если бы я программил с целью прокачать скиллы чтобы найти себе любую работу в скором времени, то JSF.
Если бы я программил портал, то посмотрел был в сторону Wicket.
К Tapestry лично у меня душа больше не лежит. Не смотря на все заверения что этот проект стал лучше.
GWT, классное решение, но надо понимать его узкую специализацию.
...
Рейтинг: 0 / 0
WEB интерфейс
    #34835197
Фотография Andron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
База это JSP и servlets насколько я понимаю. Читай спецификацию (можно найти где то на сайте sun), написано хоть и по английски но довольно понятно и просто. А потом уже и JSF можно.
...
Рейтинг: 0 / 0
WEB интерфейс
    #34835368
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndronБаза это JSP и servlets насколько я понимаю. Читай спецификацию (можно найти где то на сайте sun), написано хоть и по английски но довольно понятно и просто. А потом уже и JSF можно.
База это сервлеты, JSP и JSF это вот
...
Рейтинг: 0 / 0
WEB интерфейс
    #34837915
Фотография Andron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz... JSP и JSF это вот

Netbeans 5.0 и старше + VisualWeb Pack как мне кажется немного решает проблему или я что то не понимаю?
...
Рейтинг: 0 / 0
WEB интерфейс
    #34837934
Фотография Andron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы даже нарисовал так: чувак в куртке с надписью NetBeans разрезает саперными ножницами цепи :)
...
Рейтинг: 0 / 0
WEB интерфейс
    #34842073
Фотография Java Programmer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczДля начала изучить обзорно многообразие существующих решений.
JSP, JSF, Wicket, Spring MVC, Velocity, Struts 2, Tapestry, GWT и пр.
Остановится на одном понравившемся.

SELECT FOR UPDATE, конечно хорошо. Но советую подтянуть теорию в плане оптимистичных, пессимистичных локов и какой когда лучше пользовать.
После этого посмотреть java.util.concurrent и научится применять локи и другие средства синхронизации в коде так же хорого как и в базе.

я думаю надо начинать со спринговой транзакционности и hibernate
...
Рейтинг: 0 / 0
WEB интерфейс
    #34842505
Чендлер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczкоде так же хорого как и в базе.
База одна, приложений много, поэтому хотелось бы локи делать на уровне базы.
...
Рейтинг: 0 / 0
WEB интерфейс
    #34843281
Stub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чендлер Blazkowiczкоде так же хорого как и в базе.
База одна, приложений много, поэтому хотелось бы локи делать на уровне базы.

Наскока я понимаю база в локах не нуждается. Каждое обращение к базе происходит из набора запросов обьедененое в транзакцию. Каждая транзакция с точки зрения выполнения являеться унарной. Тоесть одновременно две транзакции выполняться не могут чтоб не нарушить целосность.
Существует 4 уровневая система изоляций транзакций(ACID).
Сдесь уже нада сматреть какая лучше подходит.

Нада за один запрос открыл сессию транзакцию закрыл сессию транзакцию IMHO

У spring-а есть утила которые сама занимаеться сессиями и транзакциями.
Если что все шишки на разработчиков Spring :-)

http://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%B0%D0%BD%D0%B7%D0%B0%D0%BA%D1%86%D0%B8%D1%8F
...
Рейтинг: 0 / 0
WEB интерфейс
    #34843293
Stub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stub
Нада за один запрос открыл сессию транзакцию закрыл сессию транзакцию IMHO

Наверно не ясно написал:
в начале запроса открываеться(сессия, транзакция) по окончанию закрываеться IMHO

P.S.
Плохо что не предусмотрена правка постов. :-(
...
Рейтинг: 0 / 0
WEB интерфейс
    #34843333
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StubТоесть одновременно две транзакции выполняться не могут чтоб не нарушить целосность.Вот это новость.
...
Рейтинг: 0 / 0
WEB интерфейс
    #34843405
Stub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pamir StubТоесть одновременно две транзакции выполняться не могут чтоб не нарушить целосность.Вот это новость.

Какой тады от них смысл.
...
Рейтинг: 0 / 0
WEB интерфейс
    #34843473
Stub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stub pamir StubТоесть одновременно две транзакции выполняться не могут чтоб не нарушить целосность.Вот это новость.

Какой тады от них смысл.

Какой смысл от транзакций если они одновременно редактируют одни те же данные. Возникнут колизии и много чего не хорошего.


P.S. Сто пудов нужна правка постов. :-)
...
Рейтинг: 0 / 0
WEB интерфейс
    #34843499
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StubКакой смысл от транзакций если они одновременно редактируют одни те же данные. Возникнут колизии и много чего не хорошего.Вот для разруливания коллизий и существуют блокировки. Которые бывают пессимистические и оптимистические. И ими рулит обычно программист. Потому как редко бывает, чтобы правили одни и те же данные. Во всяком случае гораздо реже, чем когда множество параллельных транзакций правят разные данные. Что будет, если пустить их по очереди?
Все это применительно к версионникам. У блокировочников (MSSQL) все как-то иначе, но их я не знаю.
...
Рейтинг: 0 / 0
WEB интерфейс
    #34843548
Stub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pamir StubКакой смысл от транзакций если они одновременно редактируют одни те же данные. Возникнут колизии и много чего не хорошего.Вот для разруливания коллизий и существуют блокировки. Которые бывают пессимистические и оптимистические. И ими рулит обычно программист. Потому как редко бывает, чтобы правили одни и те же данные. Во всяком случае гораздо реже, чем когда множество параллельных транзакций правят разные данные. Что будет, если пустить их по очереди?
Все это применительно к версионникам. У блокировочников (MSSQL) все как-то иначе, но их я не знаю.

optimistic concurrency control

если прально понял то это нечто вроде

REQUEST1
TRANSACTION BEGIN
applicationVar=DataRead
TRANSACTION END
RESPONSE applicationVar

REQUEST2
TRANSACTION BEGIN
DataWrite applicationVar //- место колизии
TRANSACTION END
RESPONSE applicationVar
...
Рейтинг: 0 / 0
WEB интерфейс
    #34843608
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stubесли прально понял то это нечто вроде
Вот
...
Рейтинг: 0 / 0
WEB интерфейс
    #34845309
Stub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pamir StubКакой смысл от транзакций если они одновременно редактируют одни те же данные. Возникнут колизии и много чего не хорошего.Вот для разруливания коллизий и существуют блокировки. Которые бывают пессимистические и оптимистические. И ими рулит обычно программист. Потому как редко бывает, чтобы правили одни и те же данные. Во всяком случае гораздо реже, чем когда множество параллельных транзакций правят разные данные. Что будет, если пустить их по очереди?
Все это применительно к версионникам. У блокировочников (MSSQL) все как-то иначе, но их я не знаю.

http://www.hibernate.org/hib_docs/reference/en/html/transactions.html (Pessimistic Locking)
Сдесь кажысь тоже кое что есть.
...
Рейтинг: 0 / 0
WEB интерфейс
    #34846037
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stub pamir StubКакой смысл от транзакций если они одновременно редактируют одни те же данные. Возникнут колизии и много чего не хорошего.Вот для разруливания коллизий и существуют блокировки. Которые бывают пессимистические и оптимистические. И ими рулит обычно программист. Потому как редко бывает, чтобы правили одни и те же данные. Во всяком случае гораздо реже, чем когда множество параллельных транзакций правят разные данные. Что будет, если пустить их по очереди?
Все это применительно к версионникам. У блокировочников (MSSQL) все как-то иначе, но их я не знаю.

http://www.hibernate.org/hib_docs/reference/en/html/transactions.html (Pessimistic Locking)
Сдесь кажысь тоже кое что есть.Судя по названию сайта (по ссылке не ходил) там будет описание уже в терминах хибернейта. Я же говорил о "чистой" базе. А всякие обертки нужно уже смотреть, как они реализованы.
...
Рейтинг: 0 / 0
WEB интерфейс
    #34847602
TiG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pamir Stub pamir StubКакой смысл от транзакций если они одновременно редактируют одни те же данные. Возникнут колизии и много чего не хорошего.Вот для разруливания коллизий и существуют блокировки. Которые бывают пессимистические и оптимистические. И ими рулит обычно программист. Потому как редко бывает, чтобы правили одни и те же данные. Во всяком случае гораздо реже, чем когда множество параллельных транзакций правят разные данные. Что будет, если пустить их по очереди?
Все это применительно к версионникам. У блокировочников (MSSQL) все как-то иначе, но их я не знаю.

http://www.hibernate.org/hib_docs/reference/en/html/transactions.html (Pessimistic Locking)
Сдесь кажысь тоже кое что есть.Судя по названию сайта (по ссылке не ходил) там будет описание уже в терминах хибернейта. Я же говорил о "чистой" базе. А всякие обертки нужно уже смотреть, как они реализованы.
На самом деле не важно на каком уровне реализованы транзакции и блокировки (правда в данном случаев они естественно должны быть в БД). Смысл понятий "оптимистическая" и "пессимистическая блокировка" от этого не меняется.
Любая система расчитанная на сколько-нибудь серьезную нагрузку при параллельной работе и с серьезными требованиями по масштабированию должна по максимуму использовать оптимистическое блокирование. Особенно в долгих транзакциях. Пессимистические блокировки должны использоваться только тогда, когда это реально обосновано.
...
Рейтинг: 0 / 0
WEB интерфейс
    #34847629
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TiGНа самом деле не важно на каком уровне реализованы транзакции и блокировки (правда в данном случаев они естественно должны быть в БД). Смысл понятий "оптимистическая" и "пессимистическая блокировка" от этого не меняется.
Любая система расчитанная на сколько-нибудь серьезную нагрузку при параллельной работе и с серьезными требованиями по масштабированию должна по максимуму использовать оптимистическое блокирование. Особенно в долгих транзакциях. Пессимистические блокировки должны использоваться только тогда, когда это реально обосновано.
Все верно, но стоит так же отметить что вынесение блокировок с уровня базы на уровень приолжения, довольно позитивно влияет на приложение в целом.
...
Рейтинг: 0 / 0
WEB интерфейс
    #34847666
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz TiGНа самом деле не важно на каком уровне реализованы транзакции и блокировки (правда в данном случаев они естественно должны быть в БД). Смысл понятий "оптимистическая" и "пессимистическая блокировка" от этого не меняется.
Любая система расчитанная на сколько-нибудь серьезную нагрузку при параллельной работе и с серьезными требованиями по масштабированию должна по максимуму использовать оптимистическое блокирование. Особенно в долгих транзакциях. Пессимистические блокировки должны использоваться только тогда, когда это реально обосновано.
Все верно, но стоит так же отметить что вынесение блокировок с уровня базы на уровень приолжения, довольно позитивно влияет на приложение в целом .
Тебе не повезло с СУБД

Любое изменение БД влечет за собой некоторое блокирование на каком-то уровне. Когда сюда добавляется попытка организации блокировок на стороне апликейшна (опять же стоит вспоминить о кластере) возникает масса забавных ситуаций.
Распределенный дедлок - что может быть лучше Кто его будет ресолвить?
[нормальная ;)] СУБД сделает фсе сама.
...
Рейтинг: 0 / 0
WEB интерфейс
    #34847726
TiG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timm Blazkowicz TiGНа самом деле не важно на каком уровне реализованы транзакции и блокировки (правда в данном случаев они естественно должны быть в БД). Смысл понятий "оптимистическая" и "пессимистическая блокировка" от этого не меняется.
Любая система расчитанная на сколько-нибудь серьезную нагрузку при параллельной работе и с серьезными требованиями по масштабированию должна по максимуму использовать оптимистическое блокирование. Особенно в долгих транзакциях. Пессимистические блокировки должны использоваться только тогда, когда это реально обосновано.
Все верно, но стоит так же отметить что вынесение блокировок с уровня базы на уровень приолжения, довольно позитивно влияет на приложение в целом .
Тебе не повезло с СУБД

Любое изменение БД влечет за собой некоторое блокирование на каком-то уровне. Когда сюда добавляется попытка организации блокировок на стороне апликейшна (опять же стоит вспоминить о кластере) возникает масса забавных ситуаций.
Распределенный дедлок - что может быть лучше Кто его будет ресолвить?
[нормальная ;)] СУБД сделает фсе сама.
угу, причем блокировки в БД при изменении данных никуда ведь не денутся. одна сессия держит другую на уровне БД, а та первую - на стороне приложения вот уж точно никакой deadlock detection ни в БД ни в приложении не поможет
...
Рейтинг: 0 / 0
WEB интерфейс
    #34847794
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timm Blazkowicz
Все верно, но стоит так же отметить что вынесение блокировок с уровня базы на уровень приолжения, довольно позитивно влияет на приложение в целом .
Опечатался, хотел написать на производительность в целом.

TimmТебе не повезло с СУБД
"Везет" с СУБД только в том случае если она крутится в той же JVM. 8)) Во всех остальных большую часть времени приложения ждут ответа от JDBC.


TimmЛюбое изменение БД влечет за собой некоторое блокирование на каком-то уровне. Когда сюда добавляется попытка организации блокировок на стороне апликейшна (опять же стоит вспоминить о кластере) возникает масса забавных ситуаций.
Забавных ситуаций не избежать в любом приложении с серьезной нагрузкой, не зависимо от местонахождения локов. С кластеризацией-то можно все локи на базу перевести, но потом все равно перфоманс тюнить.

TimmРаспределенный дедлок - что может быть лучше Кто его будет ресолвить?
[нормальная ;)] СУБД сделает фсе сама.
Ага.
...
Рейтинг: 0 / 0
WEB интерфейс
    #34847805
Фотография Изя Шниперсон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЧендлерПриходится разрабатывать веб интерфейс. Никогда ранее веб интерфейс при помощи jsp не писал. Архитектура система трёх уровневая (субд, сервер приложений, браузер). С какой стороны ко всему этому подходить? Как решить проблему с блокировкой данных, если пользователь начал редактировать чтото то другой пользователь не должен редактировать теже самые данные. Ка это можно сделать? еслибы интерфейс был гуишный то всё понятно - установил соединение, сделал селект фор апдейт и всё.

Напиши две хранимых процедуры - блокировки и разблокирования, типа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE OR REPLACE FUNCTION LOCK_TABLE(TABLE_NAME in VARCHAR2)
 RETURN   BOOLEAN  
IS
return_value  BOOLEAN ;
BEGIN 
   EXCECUTE IMMEDIATE 'LOCK TABLE' || TABLE_NAME || 'IN SHARE UPDATE MODE';
    RETURN  TRUE;
  EXCEPTION
   WHEN OTHERS THEN  RETURN  FALSE;
END;
А на форму редактирования таблиц добавь 2 кнопки которые блокируют и разблокируют таблицы:
Код: plaintext
1.
2.
3.
4.
5.
6.
......
CallableStatement callableStatement = conn.prepareCall("? = {call LOCK_TABLE(?)}");
callableStatement.registerOutParameter( 1 ,Types. BOOLEAN );
callableStatement.setString("2, my table");
callableStatement.executeUpdate();
 boolean  result = callableStatement.getBoolean( 2 );
...
Рейтинг: 0 / 0
WEB интерфейс
    #34847818
Фотография Изя Шниперсон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
..................
А на форму редактирования таблиц добавь 2 кнопки внутри методов-обработчиков которых
которые блокируются и разблокируются таблицы:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
......
 public   void  BlockButtonCall()
{
  CallableStatement callableStatement = conn.prepareCall("? = {call LOCK_TABLE(?)}");
  callableStatement.registerOutParameter( 1 ,Types. BOOLEAN );
   callableStatement.setString( 1 ," my table");
  callableStatement.executeUpdate();
    boolean  result = callableStatement.getBoolean( 2 );
}

...
Рейтинг: 0 / 0
WEB интерфейс
    #34847860
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz Timm Blazkowicz
Все верно, но стоит так же отметить что вынесение блокировок с уровня базы на уровень приолжения, довольно позитивно влияет на приложение в целом .
Опечатался, хотел написать на производительность в целом.

Я понял что ты хотел сказать, мое мнение - блокировки в апликейшне при работе с БД очень сильно усложняют жисть. Видел последствия дедлока между БД и 4 нодами кластера, как раз из-за такой пакости.
BlazkowiczЗабавных ситуаций не избежать в любом приложении с серьезной нагрузкой, не зависимо от местонахождения локов. С кластеризацией-то можно все локи на базу перевести, но потом все равно перфоманс тюнить.
Когда приложение становится слишком большим, даже незначительное изменение дизайна влечет некоторые трудозатраты/импакт. Имхо, стратегия блокирования это не "небольшое изменение", поэтому выбор нужно делать на этапе дизайна, а никак не подгонять "когда прижмет". И снова: апликейшн - не лучший выбор для организации concurrency control.
И чтобы не обсуждать "сферического коня в вакууме", приведи плиз пример "вынесение блокировок с уровня базы на уровень приолжения". Хочу видеть улучшение "производительности в целом" :)

" потом все равно перфоманс тюнить" - это хреновая метода. No comments.

Изя Шниперсон...
Не советуй, пожалуйста, ерунду. За такой PL-код надо бить по рукам, к тому же проблему автора он решает только в одном случае - когда соединение хранится в сессии, а это бред.
...
Рейтинг: 0 / 0
WEB интерфейс
    #34847924
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TimmИ чтобы не обсуждать "сферического коня в вакууме", приведи плиз пример "вынесение блокировок с уровня базы на уровень приолжения". Хочу видеть улучшение "производительности в целом" :)
Банально, версии хранить в кэше чтобы попытку записать можно было отшить ещё до обращения в базу. На счет пессимистичного лока пока в голову ничего не приходит. Хотя там тоже рапределенные варианты есть, надо подумать над примером.

Timm" потом все равно перфоманс тюнить" - это хреновая метода. No comments.
Тюнить сразу это не менее хреновая метода, которая называется "превентивная оптимизация". Никто не спорит что блокировки надо делать обдуманно. Но только всегда их делать только в базе мне не кажется разумным.
...
Рейтинг: 0 / 0
WEB интерфейс
    #34848182
TiG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz TimmИ чтобы не обсуждать "сферического коня в вакууме", приведи плиз пример "вынесение блокировок с уровня базы на уровень приолжения". Хочу видеть улучшение "производительности в целом" :)
Банально, версии хранить в кэше чтобы попытку записать можно было отшить ещё до обращения в базу. На счет пессимистичного лока пока в голову ничего не приходит. Хотя там тоже рапределенные варианты есть, надо подумать над примером.

Timm" потом все равно перфоманс тюнить" - это хреновая метода. No comments.
Тюнить сразу это не менее хреновая метода, которая называется "превентивная оптимизация". Никто не спорит что блокировки надо делать обдуманно. Но только всегда их делать только в базе мне не кажется разумным.
Timm кстати говорил не про "тюнить сразу", а про то что думать надо обо всех критичных вещах (к которым относится и методика обеспечения многопользовательского доступа и производительность и много других вещей) еще на этапе дизайна. Правильный дизайн зачастую как раз избавляет от необходимости долгой и упорной настройки производительности в дальнейшем, а когда не избавляет, то по крайней мере упрощает её.
А вынос транзакционности полностью на уровень приложения имеет такой большой недостаток, как ограничение возможности работы с данными приложения только через само приложение. А это действительно большое ограничение.
По поводу предлагаемого варианта с кэшем. В OLTP-системе затраты на поддержание данных в кэше в актуальном состоянии могут заметно снизить его полезность. В общем не будем забывать что кэширование наиболее эффективно для активно читаемых данных при сравнительно меньшей (относительно чтений) доле модификаций.
...
Рейтинг: 0 / 0
WEB интерфейс
    #34848309
Чендлер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
давайте оставим в покое OLTP И кеширование на уровне приложения, пусть кеширует субд. Если имеется много приложений причём некоторые на Java(Swing,WEB), C#(GUI), Delphi(GUI) локи нужно делать в бд, на уровне строк. Самый прикол в том что структура табличек может меняться и приходится много переписывать. Так и не нашёл ничего подходящего, чую что придётся писать свой фрейм ворк. Осталось рассмотреть NetBeans, Spring.
...
Рейтинг: 0 / 0
WEB интерфейс
    #34849088
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чендлердавайте оставим в покое OLTP И кеширование на уровне приложения, пусть кеширует субд. Если имеется много приложений причём некоторые на Java(Swing,WEB), C#(GUI), Delphi(GUI) локи нужно делать в бд, на уровне строк. Самый прикол в том что структура табличек может меняться и приходится много переписывать. Так и не нашёл ничего подходящего, чую что придётся писать свой фрейм ворк. Осталось рассмотреть NetBeans, Spring.Самый прикол в том, что все бизнес-операции можно оборачивать в хранимые процедуры. И тогда для клиентского приложения, будь он хоть свинг, хоть си-шарп, будет существовать только вызов одной или нескольких хранимок, а уж при изменении структуры таблиц будет меняться лишь хранимка, но не вызов ее из клиента (если конечно структура не меняется настолько глобально, что просто невозможно сохранить совместимость).
Этакая псевдо-трехзвенка, где вместо сервера приложения идет слой хранимых процедур и вьюшек.
...
Рейтинг: 0 / 0
WEB интерфейс
    #34849140
TiG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чендлердавайте оставим в покое OLTP И кеширование на уровне приложения, пусть кеширует субд. Если имеется много приложений причём некоторые на Java(Swing,WEB), C#(GUI), Delphi(GUI) локи нужно делать в бд, на уровне строк. Самый прикол в том что структура табличек может меняться и приходится много переписывать. Так и не нашёл ничего подходящего, чую что придётся писать свой фрейм ворк. Осталось рассмотреть NetBeans, Spring.
Если меняется структура таблиц, то наверное меняется и бизнес-логика работы с этими данными ? В этом случае по любому надо будет что-то изменять/дописывать, разве нет ? Так ли уж надо сразу кидаться "писать свой фреймворк", может попробовать воспользоваться чужими наработками ? Самый быстрый способ сделать что-то - взять уже готовое ;-)
Иногда кстати бывает полезно часть бизнес-логики вынести на сервер БД - когда она используется в нескольких приложениях или подсистемах неоднородного приложения. Бывает очень удобно, часто позволяет повысить производительность. Но, по своему опыту могу смело это утверждать, до определенного предела сложности. PL/SQL очень удобен, полезен и сильно упрощает жизнь при разработке под Oracle, но тем не менее (а) остается процедурным языком (б) нет для него такого огромного количества сторонних разработок на все случаи жизни, которыми можно было бы воспользоваться (в 95% случаев используются свои наработки + стандартные оракловые возможности, которых конечно достаточно чтобы можно было сделать всё что угодно, но ... вы пробовали писать на джаве использую только jdk ? его ведь тоже в принципе вполне достаточно). И я это очень хорошо прочуствовал после двух лет непрерывной разработки сложной, гибко кастомизируемой системы с нуля на чистом PL/SQL. Все успешно завершилось, но "осадочек то остался" ;-)
PS Надеюсь никто не воспримет это как призыв не использовать хранимые процедуры ;) Как раз наоборот - применять для каждого случая тот инструмент, который к этому наиболее приспособлен.
PPS Несколько раз сталкивался с обратной ситуацией - народ реализовывал сам функциональность БД. А БД использовал только как складбище данных. Тоже абсолютно ничего хорошего.
Хм. Куда то я в сторону ушел. Сорри, наболело :))
...
Рейтинг: 0 / 0
WEB интерфейс
    #34849227
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TiGА вынос транзакционности полностью на уровень приложения имеет такой большой недостаток, как ограничение возможности работы с данными приложения только через само приложение.
Я нигде не говорил про полный вынос локов в приложение. Я говорил что, вынося локи из базы, можно получать прирост производительности.
...
Рейтинг: 0 / 0
WEB интерфейс
    #34849405
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz TimmИ чтобы не обсуждать "сферического коня в вакууме", приведи плиз пример "вынесение блокировок с уровня базы на уровень приолжения". Хочу видеть улучшение "производительности в целом" :)
Банально, версии хранить в кэше...
ОК, отлично. Но нисколько не банально. Каким образом обеспечиваются, if any:
1. thread-safety
2. memory usage control
3. транзакционность данных
при работе с этим кэшем? сколько их (кэшей) нужно? когда в него попадают данные? когда "пропадают"?
про синхронизацию и кластер пока молчу.
PS. примерчег кода будет очень кстати.
...
Рейтинг: 0 / 0
WEB интерфейс
    #34849599
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timm1. thread-safety
2. memory usage control
3. транзакционность данных
Штатными средствами что вообще за вопрос?

Timmпри работе с этим кэшем? сколько их (кэшей) нужно? когда в него попадают данные? когда "пропадают"?
про синхронизацию и кластер пока молчу.
Кэш никогда не будет хранить версию большую чем та что в базе. Соответственно, можно при любых попытках сохранить версию более раннюю чем закешированую, можно выдавать отлуп. Этот кэш даже распределять не обязательно.


TimmPS. примерчег кода будет очень кстати.
Ага, а ORM тут за 5 минут не набросать?
...
Рейтинг: 0 / 0
WEB интерфейс
    #34849602
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЯ нигде не говорил про полный вынос локов в приложение. Я говорил что, вынося локи из базы, можно получать прирост производительности.

позволю себе небольшой пук ....

нужно просто разделять транзакции и локи уровня базы и уровня приложения. это совершенно разные понятия. разумеется можно реализовывать длинную транзакцию уровня приложения с помощью пессимистической блокировки FOR UPDATE.. но какой это сакс не мне вам рассказывать. гораздо эффективнее использовать оптимистическую "блокировку" с помощью колонок версий UPDATE ... WHERE verson=223 . но нужно понимать что работает это только потому что база обеспечивает READCOMMITED посредством своих лочек. т.е. когда мы флашим хибер сессию в кучу таких оптимистичных апдейтов. проапдейченные строчки блокируются - селекты других транзакций на них просто повисают. если один из апдейтов не проходит - версия поменялась т.е. имеем ноль проапдейченных строчек, получаем эксепшн и откатываем всё к чертям. тем самым имеем атомарный и целостный накат длинющей транзакции приложения очень дёшево и эффективно.

это мне кажется более точная формулировка "выноса локов..."

ну а организация таблички блокировок ("пессимизм своими руками") приводит к ботлнеку и куче висящих селектов. но имхо лучше for updateа
...
Рейтинг: 0 / 0
WEB интерфейс
    #34849728
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exppпроапдейченные строчки блокируются - селекты других транзакций на них просто повисают.Это где так?
...
Рейтинг: 0 / 0
WEB интерфейс
    #34849737
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz Timm1. thread-safety
2. memory usage control
3. транзакционность данных
Штатными средствами что вообще за вопрос?

Хочу их увидеть in action, в данном конкретном случае, come on!
BlazkowiczАга, а ORM тут за 5 минут не набросать?
Т.е. ты такую весчь не применял, но советуешь?
...
Рейтинг: 0 / 0
WEB интерфейс
    #34849795
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pamir exppпроапдейченные строчки блокируются - селекты других транзакций на них просто повисают.Это где так?

а где не так?

я может не очень подробно изложил свою мысль...

берёшь свою дб консоль, открываешь два конекшна, вырубаешь автокомит, ставишь readcommited, в одной транзакции апдейт, и селекти эти строки в другой, результат селекта зависит от комита/ролбака первой транзакции

удивительное рядом
...
Рейтинг: 0 / 0
WEB интерфейс
    #34849826
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
expp pamir exppпроапдейченные строчки блокируются - селекты других транзакций на них просто повисают.Это где так?

а где не так?

я может не очень подробно изложил свою мысль...

берёшь свою дб консоль, открываешь два конекшна, вырубаешь автокомит, ставишь readcommited, в одной транзакции апдейт, и селекти эти строки в другой, результат селекта зависит от комита/ролбака первой транзакции

удивительное рядомВ оракле. Как и в любом версионнике. Там ничто не блокирует читающие транзакции. Если ты еще не закоммитил, то читающая прочтет те данные, которые лежат. Твоих еще не существует.
...
Рейтинг: 0 / 0
WEB интерфейс
    #34849865
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с "версионниками" не сталкивался. это похоже на ресурсожоркий SERIALIZABLE.
какой уровень изоляции указан в свойствах соединения?

ну и проверялось это на MSSQL DB2 Derby
...
Рейтинг: 0 / 0
WEB интерфейс
    #34849870
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TimmТ.е. ты такую весчь не применял, но советуешь?
Да, я уже давно нормальных проектов не кодирую. Но это мне никак не мешает разбиратся в теории.
...
Рейтинг: 0 / 0
WEB интерфейс
    #34849877
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exppс "версионниками" не сталкивался. это похоже на ресурсожоркий SERIALIZABLE.

Именно, но только похоже. Добивается поведение уроня SERIALIZABLE, но _гораздо_ менее ресурсоемким способом.
...
Рейтинг: 0 / 0
WEB интерфейс
    #34849967
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну так в графе изоляция что написано?
...
Рейтинг: 0 / 0
WEB интерфейс
    #34849974
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
оракле, насколько помню, их только два READ COMMITED и SERIALIZABLE.
...
Рейтинг: 0 / 0
WEB интерфейс
    #34849983
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exppс "версионниками" не сталкивался. это похоже на ресурсожоркий SERIALIZABLE.
какой уровень изоляции указан в свойствах соединения?

ну и проверялось это на MSSQL DB2 Derby
Таблица teams пустая

Первый коннект

INSERT INTO teams (code, team_name, assoc_id) VALUES ('ttt', 'namet', 1);
Сommt;

Второй коннект
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
SELECT * FROM teams

Вижу.

Первый коннект
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
SELECT * FROM teams

Вижу

UPDATE teams SET team_name = 'sdfsdf' WHERE code='ttt';

Второй коннект
--SET TRANSACTION ISOLATION LEVEL READ COMMITTED (это уже выставлено, второй раз не дает)
SELECT * FROM teams

Вижу старые данные

Первый коннект
commit;

Второй коннект видит новые данные.

Просто не нужно считать, что "у всех так", если работали только с блокировочниками. У версионников все иначе.
Войну oracle vs ms sql начинать не собираюсь.
...
Рейтинг: 0 / 0
WEB интерфейс
    #34849986
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fixxerоракле, насколько помню, их только два READ COMMITED и SERIALIZABLE.Ага
...
Рейтинг: 0 / 0
WEB интерфейс
    #34850027
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pamir wrote:

> Вижу старые данные
> Первый коннект
> commit;
> Второй коннект видит новые данные.

Главное ему про firebird не рассказывать, а то крышу оторвёт нафиг

--
Алексей
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
WEB интерфейс
    #34850418
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz TimmТ.е. ты такую весчь не применял, но советуешь?
Да, я уже давно нормальных проектов не кодирую. Но это мне никак не мешает разбиратся в теории.
Жаль. я бы посмотрел не "в теории".
...
Рейтинг: 0 / 0
WEB интерфейс
    #34851958
Stub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
expp BlazkowiczЯ нигде не говорил про полный вынос локов в приложение. Я говорил что, вынося локи из базы, можно получать прирост производительности.

позволю себе небольшой пук ....

нужно просто разделять транзакции и локи уровня базы и уровня приложения. это совершенно разные понятия. разумеется можно реализовывать длинную транзакцию уровня приложения с помощью пессимистической блокировки FOR UPDATE.. но какой это сакс не мне вам рассказывать. гораздо эффективнее использовать оптимистическую "блокировку" с помощью колонок версий UPDATE ... WHERE verson=223 . но нужно понимать что работает это только потому что база обеспечивает READCOMMITED посредством своих лочек. т.е. когда мы флашим хибер сессию в кучу таких оптимистичных апдейтов. проапдейченные строчки блокируются - селекты других транзакций на них просто повисают. если один из апдейтов не проходит - версия поменялась т.е. имеем ноль проапдейченных строчек, получаем эксепшн и откатываем всё к чертям. тем самым имеем атомарный и целостный накат длинющей транзакции приложения очень дёшево и эффективно.

это мне кажется более точная формулировка "выноса локов..."

ну а организация таблички блокировок ("пессимизм своими руками") приводит к ботлнеку и куче висящих селектов. но имхо лучше for updateа

Как реагирует хибер когда мы закрыли сессиюь и открыли новою. но песемизм хотим реализовать на старой сесии(соответственно старой версии).

P.S.
Оптимизм своими ручками реализовать сложно. Напрактитике кто то так делал были ли траблы.
Скажем есть поле update_lock_time. Если оно null то устанавлеваем текущую дату. В ином случае оно залочено и ждем. Пока не разлочат.
Также проверка на timeout может залочили час назат и упал.
P.S.2 Терпеть не могу timeout-ы они гробят стабильность и производительность сетей IMHO.
...
Рейтинг: 0 / 0
WEB интерфейс
    #34852977
Чендлер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pamirСамый прикол в том, что все бизнес-операции можно оборачивать в хранимые процедуры. И тогда для клиентского приложения, будь он хоть свинг, хоть си-шарп, будет существовать только вызов одной или нескольких хранимок
CRUID, так и сделано, тока вот в делфи конект держится и все селекты for update будут до тех пор пока в сессии я не скажу коммит. Открылась формачка редактирования в еёшних полях сселктились данный с for update и до тех пор пока пока я не нажму кнопочку сохранить они будут залочены. С вебом не получается так, хтмлька сгенерилась и сессия закрылась. Есть среда разработки Jdeveloper, я две недели потратил на то чтобы разобраться с еёшними BC (ViewObject, EntityObject). Тас всё нормально сделано, гдето внутрях эти сессии держутся но вот тока слепить более менее приличный интерфейс с этими компонентами не получается. А если появились какие либо изменения в структуре таблиц то это вообще писец.
...
Рейтинг: 0 / 0
WEB интерфейс
    #34853824
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чендлер pamirСамый прикол в том, что все бизнес-операции можно оборачивать в хранимые процедуры. И тогда для клиентского приложения, будь он хоть свинг, хоть си-шарп, будет существовать только вызов одной или нескольких хранимок
CRUID, так и сделано, тока вот в делфи конект держится и все селекты for update будут до тех пор пока в сессии я не скажу коммит. Открылась формачка редактирования в еёшних полях сселктились данный с for update и до тех пор пока пока я не нажму кнопочку сохранить они будут залочены. С вебом не получается так, хтмлька сгенерилась и сессия закрылась. Есть среда разработки Jdeveloper, я две недели потратил на то чтобы разобраться с еёшними BC (ViewObject, EntityObject). Тас всё нормально сделано, гдето внутрях эти сессии держутся но вот тока слепить более менее приличный интерфейс с этими компонентами не получается. А если появились какие либо изменения в структуре таблиц то это вообще писец.Естественно, в вебе нужно организовывать оптимистические блокировки. Позволил юзеру редактировать, а при сохранении проверил - не изменил ли кто-то данные. Если изменил - извини, ты слишком долго думал. Тебя опередили. Но это никак не мешает организовать то, что я описал - оборачивание БО в процедуры, что позволяет уйти от привязанности к структуре БД.
...
Рейтинг: 0 / 0
WEB интерфейс
    #34854286
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stub
Как реагирует хибер когда мы закрыли сессиюь и открыли новою. но песемизм хотим реализовать на старой сесии(соответственно старой версии).
желательно попроще мысли излагать...
Хибер не реагирует ни как. это не его собачье дело, при пессимистичном локе он выдаёт SELECT .. FOR UPDATE. дальше всё определяется поведением бд. (лочка висит до конца транзакции)

Stub
P.S.
Оптимизм своими ручками реализовать сложно. Напрактитике кто то так делал были ли траблы.
Скажем есть поле update_lock_time. Если оно null то устанавлеваем текущую дату. В ином случае оно залочено и ждем. Пока не разлочат.
хибер реализует оптимизм с помощью колонок версий (можно и таймстэмпами) вроде работает.
в этом наборе слов, кажется описан принцип реализации пессимистической блокировки своими руками

StubТакже проверка на timeout может залочили час назат и упал.
P.S.2 Терпеть не могу timeout-ы они гробят стабильность и производительность сетей IMHO.
но бывает как-то сказать что подумал, не стало мне ясно
...
Рейтинг: 0 / 0
WEB интерфейс
    #34854644
Stub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тьфу оптимизи. Когда использует версию.
...
Рейтинг: 0 / 0
WEB интерфейс
    #34854646
Stub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
expp Stub
Как реагирует хибер когда мы закрыли сессиюь и открыли новою. но песемизм хотим реализовать на старой сесии(соответственно старой версии).
желательно попроще мысли излагать...
Хибер не реагирует ни как. это не его собачье дело, при пессимистичном локе он выдаёт SELECT .. FOR UPDATE. дальше всё определяется поведением бд. (лочка висит до конца транзакции)

Stub
P.S.
Оптимизм своими ручками реализовать сложно. Напрактитике кто то так делал были ли траблы.
Скажем есть поле update_lock_time. Если оно null то устанавлеваем текущую дату. В ином случае оно залочено и ждем. Пока не разлочат.
хибер реализует оптимизм с помощью колонок версий (можно и таймстэмпами) вроде работает.
в этом наборе слов, кажется описан принцип реализации пессимистической блокировки своими руками

StubТакже проверка на timeout может залочили час назат и упал.
P.S.2 Терпеть не могу timeout-ы они гробят стабильность и производительность сетей IMHO.
но бывает как-то сказать что подумал, не стало мне ясно

Да иммено так. Сорри перепутал термины :-( .
...
Рейтинг: 0 / 0
WEB интерфейс
    #34854659
Stub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как хибер будет реагировать на версию(оптимизм) при закрытии сессии.
Если сессия закрыветься то и теряються персистентные обьекты с ихними версиями.
...
Рейтинг: 0 / 0
WEB интерфейс
    #34854694
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StubКак хибер будет реагировать на версию(оптимизм) при закрытии сессии.
Если сессия закрыветься то и теряються персистентные обьекты с ихними версиями.

в этом случае ты держишь вроде как в "detached state" т.е. кладёшь их например в http сессию после закрытия хиберской (лучше конечно использовать хиберсессию в нескольких транзакциях)

по сабмиту ты присоединяешь update()ом объедки к новой сессии со старыми значениями версии.

т.е. проблемы я не вижу.
...
Рейтинг: 0 / 0
59 сообщений из 59, показаны все 3 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / WEB интерфейс
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]