|
|
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
Приходится разрабатывать веб интерфейс. Никогда ранее веб интерфейс при помощи jsp не писал. Архитектура система трёх уровневая (субд, сервер приложений, браузер). С какой стороны ко всему этому подходить? Как решить проблему с блокировкой данных, если пользователь начал редактировать чтото то другой пользователь не должен редактировать теже самые данные. Ка это можно сделать? еслибы интерфейс был гуишный то всё понятно - установил соединение, сделал селект фор апдейт и всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2007, 11:40:21 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
Чендлер С какой стороны ко всему этому подходить? сторон много, начинать надо с хелло ворлд для веб, а дальше сам разберешься! и читать...читать...читать... а потом уже конкретные вопросы в форум! думую с этой стороны))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2007, 11:49:42 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
Для начала изучить обзорно многообразие существующих решений. JSP, JSF, Wicket, Spring MVC, Velocity, Struts 2, Tapestry, GWT и пр. Остановится на одном понравившемся. SELECT FOR UPDATE, конечно хорошо. Но советую подтянуть теорию в плане оптимистичных, пессимистичных локов и какой когда лучше пользовать. После этого посмотреть java.util.concurrent и научится применять локи и другие средства синхронизации в коде так же хорого как и в базе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2007, 14:53:25 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
Blazkowicz wrote: > Для начала изучить обзорно многообразие существующих решений. > JSP, JSF, Wicket, Spring MVC, Velocity, Struts 2, Tapestry, GWT и пр. > Остановится на одном понравившемся. Кстати, а как выбирать? Т.е. как понять, что же лучше для конкретного применения/разработчика? -- Алексей Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2007, 15:08:27 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
GKS_Samara > Для начала изучить обзорно многообразие существующих решений. > JSP, JSF, Wicket, Spring MVC, Velocity, Struts 2, Tapestry, GWT и пр. > Остановится на одном понравившемся. Кстати, а как выбирать? Т.е. как понять, что же лучше для конкретного применения/разработчика? Универсального рецепта конечно же нет. Надо долго и нудно анализировать требования проекта сравнивая с сильными и слабыми сторонами каждого подхода. Если бы я программил просто развлечь себя любимого, то взял бы Spring MVC + Freemarker Если бы я программил с целью прокачать скиллы чтобы найти себе любую работу в скором времени, то JSF. Если бы я программил портал, то посмотрел был в сторону Wicket. К Tapestry лично у меня душа больше не лежит. Не смотря на все заверения что этот проект стал лучше. GWT, классное решение, но надо понимать его узкую специализацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2007, 15:43:46 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
База это JSP и servlets насколько я понимаю. Читай спецификацию (можно найти где то на сайте sun), написано хоть и по английски но довольно понятно и просто. А потом уже и JSF можно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2007, 15:49:02 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
AndronБаза это JSP и servlets насколько я понимаю. Читай спецификацию (можно найти где то на сайте sun), написано хоть и по английски но довольно понятно и просто. А потом уже и JSF можно. База это сервлеты, JSP и JSF это вот ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2007, 16:30:21 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
Blazkowicz... JSP и JSF это вот Netbeans 5.0 и старше + VisualWeb Pack как мне кажется немного решает проблему или я что то не понимаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2007, 11:47:58 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
Я бы даже нарисовал так: чувак в куртке с надписью NetBeans разрезает саперными ножницами цепи :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2007, 11:53:20 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
BlazkowiczДля начала изучить обзорно многообразие существующих решений. JSP, JSF, Wicket, Spring MVC, Velocity, Struts 2, Tapestry, GWT и пр. Остановится на одном понравившемся. SELECT FOR UPDATE, конечно хорошо. Но советую подтянуть теорию в плане оптимистичных, пессимистичных локов и какой когда лучше пользовать. После этого посмотреть java.util.concurrent и научится применять локи и другие средства синхронизации в коде так же хорого как и в базе. я думаю надо начинать со спринговой транзакционности и hibernate ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2007, 19:04:52 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
Blazkowiczкоде так же хорого как и в базе. База одна, приложений много, поэтому хотелось бы локи делать на уровне базы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2007, 04:30:12 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
Чендлер 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2007, 12:11:02 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
Stub Нада за один запрос открыл сессию транзакцию закрыл сессию транзакцию IMHO Наверно не ясно написал: в начале запроса открываеться(сессия, транзакция) по окончанию закрываеться IMHO P.S. Плохо что не предусмотрена правка постов. :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2007, 12:13:26 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
StubТоесть одновременно две транзакции выполняться не могут чтоб не нарушить целосность.Вот это новость. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2007, 12:20:42 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
pamir StubТоесть одновременно две транзакции выполняться не могут чтоб не нарушить целосность.Вот это новость. Какой тады от них смысл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2007, 12:36:47 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
Stub pamir StubТоесть одновременно две транзакции выполняться не могут чтоб не нарушить целосность.Вот это новость. Какой тады от них смысл. Какой смысл от транзакций если они одновременно редактируют одни те же данные. Возникнут колизии и много чего не хорошего. P.S. Сто пудов нужна правка постов. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2007, 12:50:31 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
StubКакой смысл от транзакций если они одновременно редактируют одни те же данные. Возникнут колизии и много чего не хорошего.Вот для разруливания коллизий и существуют блокировки. Которые бывают пессимистические и оптимистические. И ими рулит обычно программист. Потому как редко бывает, чтобы правили одни и те же данные. Во всяком случае гораздо реже, чем когда множество параллельных транзакций правят разные данные. Что будет, если пустить их по очереди? Все это применительно к версионникам. У блокировочников (MSSQL) все как-то иначе, но их я не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2007, 12:56:45 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
pamir StubКакой смысл от транзакций если они одновременно редактируют одни те же данные. Возникнут колизии и много чего не хорошего.Вот для разруливания коллизий и существуют блокировки. Которые бывают пессимистические и оптимистические. И ими рулит обычно программист. Потому как редко бывает, чтобы правили одни и те же данные. Во всяком случае гораздо реже, чем когда множество параллельных транзакций правят разные данные. Что будет, если пустить их по очереди? Все это применительно к версионникам. У блокировочников (MSSQL) все как-то иначе, но их я не знаю. optimistic concurrency control если прально понял то это нечто вроде REQUEST1 TRANSACTION BEGIN applicationVar=DataRead TRANSACTION END RESPONSE applicationVar REQUEST2 TRANSACTION BEGIN DataWrite applicationVar //- место колизии TRANSACTION END RESPONSE applicationVar ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2007, 13:10:38 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
Stubесли прально понял то это нечто вроде Вот ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2007, 13:23:39 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
pamir StubКакой смысл от транзакций если они одновременно редактируют одни те же данные. Возникнут колизии и много чего не хорошего.Вот для разруливания коллизий и существуют блокировки. Которые бывают пессимистические и оптимистические. И ими рулит обычно программист. Потому как редко бывает, чтобы правили одни и те же данные. Во всяком случае гораздо реже, чем когда множество параллельных транзакций правят разные данные. Что будет, если пустить их по очереди? Все это применительно к версионникам. У блокировочников (MSSQL) все как-то иначе, но их я не знаю. http://www.hibernate.org/hib_docs/reference/en/html/transactions.html (Pessimistic Locking) Сдесь кажысь тоже кое что есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2007, 01:16:05 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
Stub pamir StubКакой смысл от транзакций если они одновременно редактируют одни те же данные. Возникнут колизии и много чего не хорошего.Вот для разруливания коллизий и существуют блокировки. Которые бывают пессимистические и оптимистические. И ими рулит обычно программист. Потому как редко бывает, чтобы правили одни и те же данные. Во всяком случае гораздо реже, чем когда множество параллельных транзакций правят разные данные. Что будет, если пустить их по очереди? Все это применительно к версионникам. У блокировочников (MSSQL) все как-то иначе, но их я не знаю. http://www.hibernate.org/hib_docs/reference/en/html/transactions.html (Pessimistic Locking) Сдесь кажысь тоже кое что есть.Судя по названию сайта (по ссылке не ходил) там будет описание уже в терминах хибернейта. Я же говорил о "чистой" базе. А всякие обертки нужно уже смотреть, как они реализованы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2007, 11:20:44 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
pamir Stub pamir StubКакой смысл от транзакций если они одновременно редактируют одни те же данные. Возникнут колизии и много чего не хорошего.Вот для разруливания коллизий и существуют блокировки. Которые бывают пессимистические и оптимистические. И ими рулит обычно программист. Потому как редко бывает, чтобы правили одни и те же данные. Во всяком случае гораздо реже, чем когда множество параллельных транзакций правят разные данные. Что будет, если пустить их по очереди? Все это применительно к версионникам. У блокировочников (MSSQL) все как-то иначе, но их я не знаю. http://www.hibernate.org/hib_docs/reference/en/html/transactions.html (Pessimistic Locking) Сдесь кажысь тоже кое что есть.Судя по названию сайта (по ссылке не ходил) там будет описание уже в терминах хибернейта. Я же говорил о "чистой" базе. А всякие обертки нужно уже смотреть, как они реализованы. На самом деле не важно на каком уровне реализованы транзакции и блокировки (правда в данном случаев они естественно должны быть в БД). Смысл понятий "оптимистическая" и "пессимистическая блокировка" от этого не меняется. Любая система расчитанная на сколько-нибудь серьезную нагрузку при параллельной работе и с серьезными требованиями по масштабированию должна по максимуму использовать оптимистическое блокирование. Особенно в долгих транзакциях. Пессимистические блокировки должны использоваться только тогда, когда это реально обосновано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2007, 17:31:29 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
TiGНа самом деле не важно на каком уровне реализованы транзакции и блокировки (правда в данном случаев они естественно должны быть в БД). Смысл понятий "оптимистическая" и "пессимистическая блокировка" от этого не меняется. Любая система расчитанная на сколько-нибудь серьезную нагрузку при параллельной работе и с серьезными требованиями по масштабированию должна по максимуму использовать оптимистическое блокирование. Особенно в долгих транзакциях. Пессимистические блокировки должны использоваться только тогда, когда это реально обосновано. Все верно, но стоит так же отметить что вынесение блокировок с уровня базы на уровень приолжения, довольно позитивно влияет на приложение в целом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2007, 17:41:42 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
Blazkowicz TiGНа самом деле не важно на каком уровне реализованы транзакции и блокировки (правда в данном случаев они естественно должны быть в БД). Смысл понятий "оптимистическая" и "пессимистическая блокировка" от этого не меняется. Любая система расчитанная на сколько-нибудь серьезную нагрузку при параллельной работе и с серьезными требованиями по масштабированию должна по максимуму использовать оптимистическое блокирование. Особенно в долгих транзакциях. Пессимистические блокировки должны использоваться только тогда, когда это реально обосновано. Все верно, но стоит так же отметить что вынесение блокировок с уровня базы на уровень приолжения, довольно позитивно влияет на приложение в целом . Тебе не повезло с СУБД Любое изменение БД влечет за собой некоторое блокирование на каком-то уровне. Когда сюда добавляется попытка организации блокировок на стороне апликейшна (опять же стоит вспоминить о кластере) возникает масса забавных ситуаций. Распределенный дедлок - что может быть лучше Кто его будет ресолвить? [нормальная ;)] СУБД сделает фсе сама. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2007, 17:50:05 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
Timm Blazkowicz TiGНа самом деле не важно на каком уровне реализованы транзакции и блокировки (правда в данном случаев они естественно должны быть в БД). Смысл понятий "оптимистическая" и "пессимистическая блокировка" от этого не меняется. Любая система расчитанная на сколько-нибудь серьезную нагрузку при параллельной работе и с серьезными требованиями по масштабированию должна по максимуму использовать оптимистическое блокирование. Особенно в долгих транзакциях. Пессимистические блокировки должны использоваться только тогда, когда это реально обосновано. Все верно, но стоит так же отметить что вынесение блокировок с уровня базы на уровень приолжения, довольно позитивно влияет на приложение в целом . Тебе не повезло с СУБД Любое изменение БД влечет за собой некоторое блокирование на каком-то уровне. Когда сюда добавляется попытка организации блокировок на стороне апликейшна (опять же стоит вспоминить о кластере) возникает масса забавных ситуаций. Распределенный дедлок - что может быть лучше Кто его будет ресолвить? [нормальная ;)] СУБД сделает фсе сама. угу, причем блокировки в БД при изменении данных никуда ведь не денутся. одна сессия держит другую на уровне БД, а та первую - на стороне приложения вот уж точно никакой deadlock detection ни в БД ни в приложении не поможет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2007, 18:03:41 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
Timm Blazkowicz Все верно, но стоит так же отметить что вынесение блокировок с уровня базы на уровень приолжения, довольно позитивно влияет на приложение в целом . Опечатался, хотел написать на производительность в целом. TimmТебе не повезло с СУБД "Везет" с СУБД только в том случае если она крутится в той же JVM. 8)) Во всех остальных большую часть времени приложения ждут ответа от JDBC. TimmЛюбое изменение БД влечет за собой некоторое блокирование на каком-то уровне. Когда сюда добавляется попытка организации блокировок на стороне апликейшна (опять же стоит вспоминить о кластере) возникает масса забавных ситуаций. Забавных ситуаций не избежать в любом приложении с серьезной нагрузкой, не зависимо от местонахождения локов. С кластеризацией-то можно все локи на базу перевести, но потом все равно перфоманс тюнить. TimmРаспределенный дедлок - что может быть лучше Кто его будет ресолвить? [нормальная ;)] СУБД сделает фсе сама. Ага. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2007, 18:24:50 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
ЧендлерПриходится разрабатывать веб интерфейс. Никогда ранее веб интерфейс при помощи jsp не писал. Архитектура система трёх уровневая (субд, сервер приложений, браузер). С какой стороны ко всему этому подходить? Как решить проблему с блокировкой данных, если пользователь начал редактировать чтото то другой пользователь не должен редактировать теже самые данные. Ка это можно сделать? еслибы интерфейс был гуишный то всё понятно - установил соединение, сделал селект фор апдейт и всё. Напиши две хранимых процедуры - блокировки и разблокирования, типа Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2007, 18:29:23 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
.................. А на форму редактирования таблиц добавь 2 кнопки внутри методов-обработчиков которых которые блокируются и разблокируются таблицы: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2007, 18:36:28 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
Blazkowicz Timm Blazkowicz Все верно, но стоит так же отметить что вынесение блокировок с уровня базы на уровень приолжения, довольно позитивно влияет на приложение в целом . Опечатался, хотел написать на производительность в целом. Я понял что ты хотел сказать, мое мнение - блокировки в апликейшне при работе с БД очень сильно усложняют жисть. Видел последствия дедлока между БД и 4 нодами кластера, как раз из-за такой пакости. BlazkowiczЗабавных ситуаций не избежать в любом приложении с серьезной нагрузкой, не зависимо от местонахождения локов. С кластеризацией-то можно все локи на базу перевести, но потом все равно перфоманс тюнить. Когда приложение становится слишком большим, даже незначительное изменение дизайна влечет некоторые трудозатраты/импакт. Имхо, стратегия блокирования это не "небольшое изменение", поэтому выбор нужно делать на этапе дизайна, а никак не подгонять "когда прижмет". И снова: апликейшн - не лучший выбор для организации concurrency control. И чтобы не обсуждать "сферического коня в вакууме", приведи плиз пример "вынесение блокировок с уровня базы на уровень приолжения". Хочу видеть улучшение "производительности в целом" :) " потом все равно перфоманс тюнить" - это хреновая метода. No comments. Изя Шниперсон... Не советуй, пожалуйста, ерунду. За такой PL-код надо бить по рукам, к тому же проблему автора он решает только в одном случае - когда соединение хранится в сессии, а это бред. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2007, 18:53:34 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
TimmИ чтобы не обсуждать "сферического коня в вакууме", приведи плиз пример "вынесение блокировок с уровня базы на уровень приолжения". Хочу видеть улучшение "производительности в целом" :) Банально, версии хранить в кэше чтобы попытку записать можно было отшить ещё до обращения в базу. На счет пессимистичного лока пока в голову ничего не приходит. Хотя там тоже рапределенные варианты есть, надо подумать над примером. Timm" потом все равно перфоманс тюнить" - это хреновая метода. No comments. Тюнить сразу это не менее хреновая метода, которая называется "превентивная оптимизация". Никто не спорит что блокировки надо делать обдуманно. Но только всегда их делать только в базе мне не кажется разумным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2007, 19:25:59 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
Blazkowicz TimmИ чтобы не обсуждать "сферического коня в вакууме", приведи плиз пример "вынесение блокировок с уровня базы на уровень приолжения". Хочу видеть улучшение "производительности в целом" :) Банально, версии хранить в кэше чтобы попытку записать можно было отшить ещё до обращения в базу. На счет пессимистичного лока пока в голову ничего не приходит. Хотя там тоже рапределенные варианты есть, надо подумать над примером. Timm" потом все равно перфоманс тюнить" - это хреновая метода. No comments. Тюнить сразу это не менее хреновая метода, которая называется "превентивная оптимизация". Никто не спорит что блокировки надо делать обдуманно. Но только всегда их делать только в базе мне не кажется разумным. Timm кстати говорил не про "тюнить сразу", а про то что думать надо обо всех критичных вещах (к которым относится и методика обеспечения многопользовательского доступа и производительность и много других вещей) еще на этапе дизайна. Правильный дизайн зачастую как раз избавляет от необходимости долгой и упорной настройки производительности в дальнейшем, а когда не избавляет, то по крайней мере упрощает её. А вынос транзакционности полностью на уровень приложения имеет такой большой недостаток, как ограничение возможности работы с данными приложения только через само приложение. А это действительно большое ограничение. По поводу предлагаемого варианта с кэшем. В OLTP-системе затраты на поддержание данных в кэше в актуальном состоянии могут заметно снизить его полезность. В общем не будем забывать что кэширование наиболее эффективно для активно читаемых данных при сравнительно меньшей (относительно чтений) доле модификаций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2007, 23:37:40 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
давайте оставим в покое OLTP И кеширование на уровне приложения, пусть кеширует субд. Если имеется много приложений причём некоторые на Java(Swing,WEB), C#(GUI), Delphi(GUI) локи нужно делать в бд, на уровне строк. Самый прикол в том что структура табличек может меняться и приходится много переписывать. Так и не нашёл ничего подходящего, чую что придётся писать свой фрейм ворк. Осталось рассмотреть NetBeans, Spring. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2007, 05:24:51 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
Чендлердавайте оставим в покое OLTP И кеширование на уровне приложения, пусть кеширует субд. Если имеется много приложений причём некоторые на Java(Swing,WEB), C#(GUI), Delphi(GUI) локи нужно делать в бд, на уровне строк. Самый прикол в том что структура табличек может меняться и приходится много переписывать. Так и не нашёл ничего подходящего, чую что придётся писать свой фрейм ворк. Осталось рассмотреть NetBeans, Spring.Самый прикол в том, что все бизнес-операции можно оборачивать в хранимые процедуры. И тогда для клиентского приложения, будь он хоть свинг, хоть си-шарп, будет существовать только вызов одной или нескольких хранимок, а уж при изменении структуры таблиц будет меняться лишь хранимка, но не вызов ее из клиента (если конечно структура не меняется настолько глобально, что просто невозможно сохранить совместимость). Этакая псевдо-трехзвенка, где вместо сервера приложения идет слой хранимых процедур и вьюшек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2007, 11:49:45 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
Чендлердавайте оставим в покое OLTP И кеширование на уровне приложения, пусть кеширует субд. Если имеется много приложений причём некоторые на Java(Swing,WEB), C#(GUI), Delphi(GUI) локи нужно делать в бд, на уровне строк. Самый прикол в том что структура табличек может меняться и приходится много переписывать. Так и не нашёл ничего подходящего, чую что придётся писать свой фрейм ворк. Осталось рассмотреть NetBeans, Spring. Если меняется структура таблиц, то наверное меняется и бизнес-логика работы с этими данными ? В этом случае по любому надо будет что-то изменять/дописывать, разве нет ? Так ли уж надо сразу кидаться "писать свой фреймворк", может попробовать воспользоваться чужими наработками ? Самый быстрый способ сделать что-то - взять уже готовое ;-) Иногда кстати бывает полезно часть бизнес-логики вынести на сервер БД - когда она используется в нескольких приложениях или подсистемах неоднородного приложения. Бывает очень удобно, часто позволяет повысить производительность. Но, по своему опыту могу смело это утверждать, до определенного предела сложности. PL/SQL очень удобен, полезен и сильно упрощает жизнь при разработке под Oracle, но тем не менее (а) остается процедурным языком (б) нет для него такого огромного количества сторонних разработок на все случаи жизни, которыми можно было бы воспользоваться (в 95% случаев используются свои наработки + стандартные оракловые возможности, которых конечно достаточно чтобы можно было сделать всё что угодно, но ... вы пробовали писать на джаве использую только jdk ? его ведь тоже в принципе вполне достаточно). И я это очень хорошо прочуствовал после двух лет непрерывной разработки сложной, гибко кастомизируемой системы с нуля на чистом PL/SQL. Все успешно завершилось, но "осадочек то остался" ;-) PS Надеюсь никто не воспримет это как призыв не использовать хранимые процедуры ;) Как раз наоборот - применять для каждого случая тот инструмент, который к этому наиболее приспособлен. PPS Несколько раз сталкивался с обратной ситуацией - народ реализовывал сам функциональность БД. А БД использовал только как складбище данных. Тоже абсолютно ничего хорошего. Хм. Куда то я в сторону ушел. Сорри, наболело :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2007, 11:57:32 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
TiGА вынос транзакционности полностью на уровень приложения имеет такой большой недостаток, как ограничение возможности работы с данными приложения только через само приложение. Я нигде не говорил про полный вынос локов в приложение. Я говорил что, вынося локи из базы, можно получать прирост производительности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2007, 12:18:11 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
Blazkowicz TimmИ чтобы не обсуждать "сферического коня в вакууме", приведи плиз пример "вынесение блокировок с уровня базы на уровень приолжения". Хочу видеть улучшение "производительности в целом" :) Банально, версии хранить в кэше... ОК, отлично. Но нисколько не банально. Каким образом обеспечиваются, if any: 1. thread-safety 2. memory usage control 3. транзакционность данных при работе с этим кэшем? сколько их (кэшей) нужно? когда в него попадают данные? когда "пропадают"? про синхронизацию и кластер пока молчу. PS. примерчег кода будет очень кстати. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2007, 12:44:17 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
Timm1. thread-safety 2. memory usage control 3. транзакционность данных Штатными средствами что вообще за вопрос? Timmпри работе с этим кэшем? сколько их (кэшей) нужно? когда в него попадают данные? когда "пропадают"? про синхронизацию и кластер пока молчу. Кэш никогда не будет хранить версию большую чем та что в базе. Соответственно, можно при любых попытках сохранить версию более раннюю чем закешированую, можно выдавать отлуп. Этот кэш даже распределять не обязательно. TimmPS. примерчег кода будет очень кстати. Ага, а ORM тут за 5 минут не набросать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2007, 13:13:38 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЯ нигде не говорил про полный вынос локов в приложение. Я говорил что, вынося локи из базы, можно получать прирост производительности. позволю себе небольшой пук .... нужно просто разделять транзакции и локи уровня базы и уровня приложения. это совершенно разные понятия. разумеется можно реализовывать длинную транзакцию уровня приложения с помощью пессимистической блокировки FOR UPDATE.. но какой это сакс не мне вам рассказывать. гораздо эффективнее использовать оптимистическую "блокировку" с помощью колонок версий UPDATE ... WHERE verson=223 . но нужно понимать что работает это только потому что база обеспечивает READCOMMITED посредством своих лочек. т.е. когда мы флашим хибер сессию в кучу таких оптимистичных апдейтов. проапдейченные строчки блокируются - селекты других транзакций на них просто повисают. если один из апдейтов не проходит - версия поменялась т.е. имеем ноль проапдейченных строчек, получаем эксепшн и откатываем всё к чертям. тем самым имеем атомарный и целостный накат длинющей транзакции приложения очень дёшево и эффективно. это мне кажется более точная формулировка "выноса локов..." ну а организация таблички блокировок ("пессимизм своими руками") приводит к ботлнеку и куче висящих селектов. но имхо лучше for updateа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2007, 13:13:52 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
exppпроапдейченные строчки блокируются - селекты других транзакций на них просто повисают.Это где так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2007, 13:32:11 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
Blazkowicz Timm1. thread-safety 2. memory usage control 3. транзакционность данных Штатными средствами что вообще за вопрос? Хочу их увидеть in action, в данном конкретном случае, come on! BlazkowiczАга, а ORM тут за 5 минут не набросать? Т.е. ты такую весчь не применял, но советуешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2007, 13:33:53 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
pamir exppпроапдейченные строчки блокируются - селекты других транзакций на них просто повисают.Это где так? а где не так? я может не очень подробно изложил свою мысль... берёшь свою дб консоль, открываешь два конекшна, вырубаешь автокомит, ставишь readcommited, в одной транзакции апдейт, и селекти эти строки в другой, результат селекта зависит от комита/ролбака первой транзакции удивительное рядом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2007, 13:44:35 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
expp pamir exppпроапдейченные строчки блокируются - селекты других транзакций на них просто повисают.Это где так? а где не так? я может не очень подробно изложил свою мысль... берёшь свою дб консоль, открываешь два конекшна, вырубаешь автокомит, ставишь readcommited, в одной транзакции апдейт, и селекти эти строки в другой, результат селекта зависит от комита/ролбака первой транзакции удивительное рядомВ оракле. Как и в любом версионнике. Там ничто не блокирует читающие транзакции. Если ты еще не закоммитил, то читающая прочтет те данные, которые лежат. Твоих еще не существует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2007, 13:50:40 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
с "версионниками" не сталкивался. это похоже на ресурсожоркий SERIALIZABLE. какой уровень изоляции указан в свойствах соединения? ну и проверялось это на MSSQL DB2 Derby ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2007, 13:59:25 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
TimmТ.е. ты такую весчь не применял, но советуешь? Да, я уже давно нормальных проектов не кодирую. Но это мне никак не мешает разбиратся в теории. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2007, 14:00:10 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
exppс "версионниками" не сталкивался. это похоже на ресурсожоркий SERIALIZABLE. Именно, но только похоже. Добивается поведение уроня SERIALIZABLE, но _гораздо_ менее ресурсоемким способом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2007, 14:02:44 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
ну так в графе изоляция что написано? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2007, 14:19:02 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
оракле, насколько помню, их только два READ COMMITED и SERIALIZABLE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2007, 14:21:38 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
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 начинать не собираюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2007, 14:23:32 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
fixxerоракле, насколько помню, их только два READ COMMITED и SERIALIZABLE.Ага ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2007, 14:24:07 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
pamir wrote: > Вижу старые данные > Первый коннект > commit; > Второй коннект видит новые данные. Главное ему про firebird не рассказывать, а то крышу оторвёт нафиг -- Алексей Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2007, 14:33:31 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
Blazkowicz TimmТ.е. ты такую весчь не применял, но советуешь? Да, я уже давно нормальных проектов не кодирую. Но это мне никак не мешает разбиратся в теории. Жаль. я бы посмотрел не "в теории". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2007, 15:59:14 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
expp BlazkowiczЯ нигде не говорил про полный вынос локов в приложение. Я говорил что, вынося локи из базы, можно получать прирост производительности. позволю себе небольшой пук .... нужно просто разделять транзакции и локи уровня базы и уровня приложения. это совершенно разные понятия. разумеется можно реализовывать длинную транзакцию уровня приложения с помощью пессимистической блокировки FOR UPDATE.. но какой это сакс не мне вам рассказывать. гораздо эффективнее использовать оптимистическую "блокировку" с помощью колонок версий UPDATE ... WHERE verson=223 . но нужно понимать что работает это только потому что база обеспечивает READCOMMITED посредством своих лочек. т.е. когда мы флашим хибер сессию в кучу таких оптимистичных апдейтов. проапдейченные строчки блокируются - селекты других транзакций на них просто повисают. если один из апдейтов не проходит - версия поменялась т.е. имеем ноль проапдейченных строчек, получаем эксепшн и откатываем всё к чертям. тем самым имеем атомарный и целостный накат длинющей транзакции приложения очень дёшево и эффективно. это мне кажется более точная формулировка "выноса локов..." ну а организация таблички блокировок ("пессимизм своими руками") приводит к ботлнеку и куче висящих селектов. но имхо лучше for updateа Как реагирует хибер когда мы закрыли сессиюь и открыли новою. но песемизм хотим реализовать на старой сесии(соответственно старой версии). P.S. Оптимизм своими ручками реализовать сложно. Напрактитике кто то так делал были ли траблы. Скажем есть поле update_lock_time. Если оно null то устанавлеваем текущую дату. В ином случае оно залочено и ждем. Пока не разлочат. Также проверка на timeout может залочили час назат и упал. P.S.2 Терпеть не могу timeout-ы они гробят стабильность и производительность сетей IMHO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2007, 19:55:00 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
pamirСамый прикол в том, что все бизнес-операции можно оборачивать в хранимые процедуры. И тогда для клиентского приложения, будь он хоть свинг, хоть си-шарп, будет существовать только вызов одной или нескольких хранимок CRUID, так и сделано, тока вот в делфи конект держится и все селекты for update будут до тех пор пока в сессии я не скажу коммит. Открылась формачка редактирования в еёшних полях сселктились данный с for update и до тех пор пока пока я не нажму кнопочку сохранить они будут залочены. С вебом не получается так, хтмлька сгенерилась и сессия закрылась. Есть среда разработки Jdeveloper, я две недели потратил на то чтобы разобраться с еёшними BC (ViewObject, EntityObject). Тас всё нормально сделано, гдето внутрях эти сессии держутся но вот тока слепить более менее приличный интерфейс с этими компонентами не получается. А если появились какие либо изменения в структуре таблиц то это вообще писец. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2007, 08:13:57 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
Чендлер pamirСамый прикол в том, что все бизнес-операции можно оборачивать в хранимые процедуры. И тогда для клиентского приложения, будь он хоть свинг, хоть си-шарп, будет существовать только вызов одной или нескольких хранимок CRUID, так и сделано, тока вот в делфи конект держится и все селекты for update будут до тех пор пока в сессии я не скажу коммит. Открылась формачка редактирования в еёшних полях сселктились данный с for update и до тех пор пока пока я не нажму кнопочку сохранить они будут залочены. С вебом не получается так, хтмлька сгенерилась и сессия закрылась. Есть среда разработки Jdeveloper, я две недели потратил на то чтобы разобраться с еёшними BC (ViewObject, EntityObject). Тас всё нормально сделано, гдето внутрях эти сессии держутся но вот тока слепить более менее приличный интерфейс с этими компонентами не получается. А если появились какие либо изменения в структуре таблиц то это вообще писец.Естественно, в вебе нужно организовывать оптимистические блокировки. Позволил юзеру редактировать, а при сохранении проверил - не изменил ли кто-то данные. Если изменил - извини, ты слишком долго думал. Тебя опередили. Но это никак не мешает организовать то, что я описал - оборачивание БО в процедуры, что позволяет уйти от привязанности к структуре БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2007, 13:10:29 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
Stub Как реагирует хибер когда мы закрыли сессиюь и открыли новою. но песемизм хотим реализовать на старой сесии(соответственно старой версии). желательно попроще мысли излагать... Хибер не реагирует ни как. это не его собачье дело, при пессимистичном локе он выдаёт SELECT .. FOR UPDATE. дальше всё определяется поведением бд. (лочка висит до конца транзакции) Stub P.S. Оптимизм своими ручками реализовать сложно. Напрактитике кто то так делал были ли траблы. Скажем есть поле update_lock_time. Если оно null то устанавлеваем текущую дату. В ином случае оно залочено и ждем. Пока не разлочат. хибер реализует оптимизм с помощью колонок версий (можно и таймстэмпами) вроде работает. в этом наборе слов, кажется описан принцип реализации пессимистической блокировки своими руками StubТакже проверка на timeout может залочили час назат и упал. P.S.2 Терпеть не могу timeout-ы они гробят стабильность и производительность сетей IMHO. но бывает как-то сказать что подумал, не стало мне ясно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2007, 15:08:48 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
Тьфу оптимизи. Когда использует версию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2007, 16:42:47 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
expp Stub Как реагирует хибер когда мы закрыли сессиюь и открыли новою. но песемизм хотим реализовать на старой сесии(соответственно старой версии). желательно попроще мысли излагать... Хибер не реагирует ни как. это не его собачье дело, при пессимистичном локе он выдаёт SELECT .. FOR UPDATE. дальше всё определяется поведением бд. (лочка висит до конца транзакции) Stub P.S. Оптимизм своими ручками реализовать сложно. Напрактитике кто то так делал были ли траблы. Скажем есть поле update_lock_time. Если оно null то устанавлеваем текущую дату. В ином случае оно залочено и ждем. Пока не разлочат. хибер реализует оптимизм с помощью колонок версий (можно и таймстэмпами) вроде работает. в этом наборе слов, кажется описан принцип реализации пессимистической блокировки своими руками StubТакже проверка на timeout может залочили час назат и упал. P.S.2 Терпеть не могу timeout-ы они гробят стабильность и производительность сетей IMHO. но бывает как-то сказать что подумал, не стало мне ясно Да иммено так. Сорри перепутал термины :-( . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2007, 16:43:25 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
Как хибер будет реагировать на версию(оптимизм) при закрытии сессии. Если сессия закрыветься то и теряються персистентные обьекты с ихними версиями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2007, 16:46:36 |
|
||
|
WEB интерфейс
|
|||
|---|---|---|---|
|
#18+
StubКак хибер будет реагировать на версию(оптимизм) при закрытии сессии. Если сессия закрыветься то и теряються персистентные обьекты с ихними версиями. в этом случае ты держишь вроде как в "detached state" т.е. кладёшь их например в http сессию после закрытия хиберской (лучше конечно использовать хиберсессию в нескольких транзакциях) по сабмиту ты присоединяешь update()ом объедки к новой сессии со старыми значениями версии. т.е. проблемы я не вижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2007, 16:54:46 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2144411]: |
0ms |
get settings: |
16ms |
get forum list: |
25ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
62ms |
get topic data: |
19ms |
get forum data: |
6ms |
get page messages: |
128ms |
get tp. blocked users: |
3ms |
| others: | 357ms |
| total: | 630ms |

| 0 / 0 |
