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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> jdbc 
:(
    Опции темы
Tony
  Дата 22.9.2007, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Нужно ли на4инать транзакцию и делать коммит если только лоад данных ?  smile 


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
LSD
Дата 22.9.2007, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Лоад - имеется в виду чтение?

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


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Tony
Дата 22.9.2007, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Но если выставить тразакцию, то это будет тормозить, все будут встовать в о4ередь даже 4тобы про4итать.

Добавлено через 1 минуту и 29 секунд
Цитата(LSD @ 22.9.2007,  13:55)
Лоад - имеется в виду чтение?

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

Хотелось бы поподробней.


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
LSD
Дата 22.9.2007, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Нет в очередь становиться не будут, но дополнительная память у сервера расходоваться будет. Так что длительных транзакций лучше не устраивать и вообще, по возможности обойтись без этого.

Выставляешь у сесси (setTransactionIsolation()) уровень изоляции Connection.TRANSACTION_REPEATABLE_READ или Connection.TRANSACTION_SERIALIZABLE. А дальше читаешь свои данные.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Tony
Дата 22.9.2007, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код

connection.setAutoCommit(false);
//delete data
connection.commit();
//а если только лоад
conn.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
//load data

Как я понял так.


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
LSD
Дата 22.9.2007, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Да, только вопрос в том как начать транзакцию. Попробуй через setSavePoint().


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Tony
Дата 22.9.2007, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Статейку про4итал. Думаю всем будет полезно.
Цитата


Применение транзакций для сохранения целостности данных

    Помимо группировки инструкций для выполнения их как единого блока, транзакции могут помочь сохранить целостность и непротиворечивость данных в таблице. Например, предположим, что сотрудник решил ввести новые цены на кофе в таблицу COFFEES, но отложил это действие на несколько дней. Тем временем цены повысились, и сегодня владелец выполняет ввод повышенных цен. Тем временем сотрудник решил ввести запоздалые цены, а в это время владелец пытается изменить таблицу. После вставки запоздалых цен сотрудник обнаруживает, что они больше недействительны, и вызывает метод rollback объекта Connection для того, чтобы "откатить" назад выполненные действия. (Метод rollback прекращает транзакцию и восстанавливает значения в то состояние, в котором они находились перед попыткой изменения). В это же самое время владелец выполняет команду SELECT и распечатывает новый прейскурант. В данной ситуации возможно, что владелец распечатает цены до выполнения "отката", и прейскурант будет неправильным.
    Подобные случаи можно обойти с помощью транзакций. Если база данных поддерживает транзакции, а практически все это делают, то база данных предоставляет некоторый уровень защиты от конфликтов, которые возможны при попытке двух пользователей одновременно обратиться к одним и тем же данным.
    Во избежание конфликтов в ходе транзакции база данных использует механизм блокировок, блокируя для других пользователей доступ к данным, к которым идет обращение во время транзакции. (Заметим, что режим auto-commit, где каждая инструкция является транзакцией, выполняет блокировки только для одной инструкции). Если блокировка установлена, она продолжает действовать до тех пор, пока не произойдет подтверждение или откат транзакции. Например, база данных может блокировать строку в таблице до тех пор, пока сделанные в ней изменения не будут подтверждены. Эффект такой блокировки заключается в том, что пользователь предохраняется от чтения "грязных" данных, т.е. не может прочитать значение до тех пор, пока изменение не станет постоянным. (Обращение к измененному значению, которое еще не было подтверждено, считается "грязным" чтением, потому что есть вероятность того, что произойдет "откат" с восстановлением предыдущего значения). Если вы читаете значение, для которого затем будет выполнен "откат" -- значит, вы прочитали некорректное значение.
    Как именно устанавливаются блокировки, в базе данных определяет то, что называют уровнем изоляции (transaction isolation level). Уровень может варьироваться от самого слабого, не поддерживающего транзакции, до поддержки всех транзакций с очень строгими ограничениями доступа.
    В качестве одного из примеров уровня изоляции (transaction isolation level) можно привести TRANSACTION_READ_COMMITTED, при котором не разрешается доступ к значению до тех пор, пока не будет выполнено подтверждение. Другими словами, если уровень изоляции установлен в TRANSACTION_READ_COMMITTED, то база данных не позволит выполнять "грязное" чтение. Интерфейс Connection включает пять значений, представляющих различные уровни изоляции, которые вы можете использовать в JDBC.
    Обычно вам не нужно делать что-либо специальное для уровня изоляции, вы можете принять значения, принятые по умолчанию для вашей базы данных. JDBC позволяет вам узнать, какой уровень изоляции установлен в вашей базе данных (с помомщью метода getTransactionIsolation объекта Connection ), а также позволяет вам установить для него другое значение (с помомщью метода setTransactionIsolation объекта Connection ). Однако имейте в виду, что хотя JDBC позволяет вам установить уровень изоляции, он не будет иметь эффекта, если драйвер и ваша база данных его не поддерживают.

Складувается мнение 4то вседгда (4тение/запись) нужно на4инать транзакцию и выставлять TRANSACTION_READ_COMMITTED 4тобы небыло траблов с данными(один изменил другой про4итла, а потом roolback). Вот такие пироги. 


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
LSD
Дата 22.9.2007, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(Tony @  22.9.2007,  15:45 Найти цитируемый пост)
Складувается мнение 4то вседгда (4тение/запись) нужно на4инать транзакцию и выставлять TRANSACTION_READ_COMMITTED 4тобы небыло траблов с данными(один изменил другой про4итла, а потом roolback). Вот такие пироги.

Только если идет чтение данных из нескольких связанных таблиц. Да и тогда это не всегда нужно. Зачем нужно читать устаревшие данные?
Одно дело когда мы делаем экспорт данных, тут непротиворичивость всех данных обязательна. Другое когда просто работаем с системой, тут актуальность данных важней.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Tony
Дата 22.9.2007, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Как я понил TRANSACTION_READ_COMMITTED и есть полная блокировка(на оработку/4тение). Выставив её я буду уверен 4то не будет неразберихи с данными. Тоесть поработал дал другому. А не так один меняет другой 4итает. Или похоже я совсем запутался. smile  smile 

Это сообщение отредактировал(а) Tony - 22.9.2007, 15:04


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
LSD
Дата 22.9.2007, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Что при этом происходит зависит от СУБД. 

Oracle реализует "согласованное чтение" без использования блокировок. Транзацкия будет видеть только то, что было до ее начала, все изменения произошедшие после этого момента она не увидит.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Tony
Дата 22.9.2007, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Ну так какой вывод темы. Я сделал такой всегда транзакция + изоляция: TRANSACTION_READ_COMMITTED.


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
LSD
Дата 22.9.2007, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(Tony @  22.9.2007,  18:53 Найти цитируемый пост)
всегда транзакция + изоляция: TRANSACTION_READ_COMMITTED

Только если есть необходимость получения согласованных данных. Иначе не стоит.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Tony
Дата 22.9.2007, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Разобрался с уровнями изоляции. Может вопрос может не сюда. Но про этоже, а как с хибере поменять изоляцию програмным путём? Нашол 4то можно в маппинге указать левел hibernate.connection.isolation.


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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