| 
 | 
| 
 
JDBC: блокировка таблиц 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Всем привет! Использую MariaDB. JDBC предлагает только connection.setTransactionIsolation А как блокировать таблицы на разных уровнях? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 07.06.2019, 14:45 | 
  
  
  
   | 
||
| 
 
JDBC: блокировка таблиц 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Так же, как и в НЕ JDBC. Командами SQL. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 07.06.2019, 15:08 | 
  
  
  
   | 
||
| 
 
JDBC: блокировка таблиц 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Molasar, Зачем? Тороза добавить? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 07.06.2019, 16:20 | 
  
  
  
   | 
||
| 
 
JDBC: блокировка таблиц 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  PetroNotC SharpMolasar, Зачем? Тороза добавить? откуда такой вывод? изоляции же тормозов не добавляют. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 07.06.2019, 17:17 | 
  
  
  
   | 
||
| 
 
JDBC: блокировка таблиц 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  andreykaTPetroNotC SharpMolasar, Зачем? Тороза добавить? откуда такой вывод? изоляции же тормозов не добавляют.по умолчанию read commited и трогать не надо ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 07.06.2019, 17:24 | 
  
  
  
   | 
||
| 
 
JDBC: блокировка таблиц 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  кому не надо? кейсы разные бывают. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 07.06.2019, 17:47 | 
  
  
  
   | 
||
| 
 
JDBC: блокировка таблиц 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  MolasarВсем привет! Использую MariaDB. JDBC предлагает только connection.setTransactionIsolation А как блокировать таблицы на разных уровнях? Тема блокировок интересная и сложная. И тут надо выделить несколько поинтов. 1. Блокировка таблиц в современных DBMS - это моветон. Никто так не делает потому - что это ломает обычную бизнес логику работы с такой системой. Нет пользы от важного справочника к примеру если кто-то его заблочит. Это равносильно HTTP 503. Сервис недоступен. Обычно применяют строчные блокировки. Этого достаточно. Загрузки-выгрузки и ETL регламентируются плановыми заданиями которые работают к примеру ночью и грузят bulk-mode в специальные свеже-созданные Staging tables инфу из внешних источников. А потом другими джобами переносят в основную схему. Так делают в правильных системах. 2.Теория различает 5-6 уровней (если мне не изменяет память) изоляций. JDBC определяет 5 констант https://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html для режимов транзакций. Практические реализации DBMS могут часть этих уровней просто игнорировать. Тоесть КАК блокировать таблицы - это тоже вопрос не в тему Java. Это опять-же в тему MariaDb. Если брать Oracle - то там 99% работает в режиме READ_COMMITED. И еще чуть-чуть в SERIALIZABLE. Остальные режимы - игнорятся. Как реализовано в Maria - надо читать. Правильне сказать - надо читать - какую пользу принесет к примеру такая-то блокировка для таблички maria db с опцией InnoDb или MyIsam или прочее... я не знаю сколько там еще этих опций. Вот это будет правильный вопрос. Но поскольку в этом топике никто не является знатоком MariaDb - то говорить пока неочём. Используя голые знания JDBC мы не сможем решать задачи перформанса эффективно. Для ответа по сабжу - по табличным блокировкам посмотрите https://mariadb.com/kb/en/library/lock-tables/ ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 07.06.2019, 17:51 | 
  
  
  
   | 
||
| 
 
JDBC: блокировка таблиц 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  andreykaT, Да. Кейс по смене пола тоже бывает. Ты обосновал. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 07.06.2019, 17:58 | 
  
  
  
   | 
||
| 
 
JDBC: блокировка таблиц 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  andreykaTPetroNotC SharpMolasar, Зачем? Тороза добавить? откуда такой вывод? изоляции же тормозов не добавляют. Да ну? А пацаны то не знают. Попробуй в продакшене поставить serializable и отпиши результаты ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 07.06.2019, 19:57 | 
  
  
  
   | 
||
| 
 
JDBC: блокировка таблиц 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  maytonMolasarВсем привет! Использую MariaDB. JDBC предлагает только connection.setTransactionIsolation А как блокировать таблицы на разных уровнях? Тема блокировок интересная и сложная. И тут надо выделить несколько поинтов. 1. Блокировка таблиц в современных DBMS - это моветон. Никто так не делает потому - что это ломает обычную бизнес логику работы с такой системой. Нет пользы от важного справочника к примеру если кто-то его заблочит. Это равносильно HTTP 503. Сервис недоступен. Обычно применяют строчные блокировки. Этого достаточно. Загрузки-выгрузки и ETL регламентируются плановыми заданиями которые работают к примеру ночью и грузят bulk-mode в специальные свеже-созданные Staging tables инфу из внешних источников. А потом другими джобами переносят в основную схему. Так делают в правильных системах. 2.Теория различает 5-6 уровней (если мне не изменяет память) изоляций. JDBC определяет 5 констант https://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html для режимов транзакций. Практические реализации DBMS могут часть этих уровней просто игнорировать. Тоесть КАК блокировать таблицы - это тоже вопрос не в тему Java. Это опять-же в тему MariaDb. Если брать Oracle - то там 99% работает в режиме READ_COMMITED. И еще чуть-чуть в SERIALIZABLE. Остальные режимы - игнорятся. Как реализовано в Maria - надо читать. Правильне сказать - надо читать - какую пользу принесет к примеру такая-то блокировка для таблички maria db с опцией InnoDb или MyIsam или прочее... я не знаю сколько там еще этих опций. Вот это будет правильный вопрос. Но поскольку в этом топике никто не является знатоком MariaDb - то говорить пока неочём. Используя голые знания JDBC мы не сможем решать задачи перформанса эффективно. Для ответа по сабжу - по табличным блокировкам посмотрите https://mariadb.com/kb/en/library/lock-tables/ Есть класс Event Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Для хранения такой структуры создаю две таблицы: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 1. Создаю новую запись в таблице event_entity. 2. Получаю последний id в таблице event_entity. 3. Создаю новую запись в таблице event_property, записываю в неё 1 запись из properties и новый id из event_entity. 3-й шаг повторяется столько раз сколько записей в properties. Блокировка таблицы event_entity нужна для, чтобы другое подключение не успело создать новую запись в таблице event_entity между 1 и 2 шагами. В противном случае я получу не свой id. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 10.06.2019, 09:54 | 
  
  
  
   | 
||
| 
 
JDBC: блокировка таблиц 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Как ты получаешь последний id? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 10.06.2019, 09:58 | 
  
  
  
   | 
||
| 
 
JDBC: блокировка таблиц 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  mayton, 1. SELECT MAX(id) FROM Table либо 2. SELECT * FROM Table ORDER BY id DESC LIMIT 1 ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 10.06.2019, 10:07 | 
  
  
  
   | 
||
| 
 
JDBC: блокировка таблиц 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Molasar, Первая табла не нужна. Тогда не нужна и правка уровня изоляции. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 10.06.2019, 10:17 | 
  
  
  
   | 
||
| 
 
JDBC: блокировка таблиц 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  PetroNotC SharpMolasar, Первая табла не нужна. Тогда не нужна и правка уровня изоляции. Тут правка уровня изоляции в принципе не нужна. Тут и транзакция нужна лишь для того чтобы откатить в случае чего. Все что здесь надо это правильно использовать jdbc, например вот тут можно почитать https://stackoverflow.com/questions/1915166/how-to-get-the-insert-id-in-jdbc. А то блокировка таблицы, блокировка таблицы:) ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 10.06.2019, 10:24 | 
  
  
  
   | 
||
| 
 
JDBC: блокировка таблиц 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Хотя petro прав, на кой здесь вторая таблица тоже непонятно. Ванную, что тс просто не знает как заманить энтити со вложенными пропертис в одну таблицу ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 10.06.2019, 10:26 | 
  
  
  
   | 
||
| 
 
JDBC: блокировка таблиц 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  PetroNotC SharpMolasar, Первая табла не нужна. Тогда не нужна и правка уровня изоляции. Теоретически можно отказаться от 1-ой таблицы event_entity. Всё равно придется блокировать 2-ю таблицу по этим же причинам. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 10.06.2019, 10:26 | 
  
  
  
   | 
||
| 
 
JDBC: блокировка таблиц 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  забыл никPetroNotC SharpMolasar, Первая табла не нужна. Тогда не нужна и правка уровня изоляции. Тут правка уровня изоляции в принципе не нужна. Тут и транзакция нужна лишь для того чтобы откатить в случае чего. Все что здесь надо это правильно использовать jdbc, например вот тут можно почитать https://stackoverflow.com/questions/1915166/how-to-get-the-insert-id-in-jdbc. А то блокировка таблицы, блокировка таблицы:) Отличное решение! Спасибо! ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 10.06.2019, 10:33 | 
  
  
  
   | 
||
| 
 
JDBC: блокировка таблиц 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Molasarmayton, 1. SELECT MAX(id) FROM Table либо 2. SELECT * FROM Table ORDER BY id DESC LIMIT 1 Категорически нельзя так делать. В базах данных обычно для таких целей создаётся выделенный объект sequence и ты из него получаешь значения для id, event_id в двух таблицах. Все другие подходы - неверны. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 10.06.2019, 10:35 | 
  
  
  
   | 
||
| 
 
JDBC: блокировка таблиц 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  MolasarPetroNotC SharpMolasar, Первая табла не нужна. Тогда не нужна и правка уровня изоляции. Теоретически можно отказаться от 1-ой таблицы event_entity. Всё равно придется блокировать 2-ю таблицу по этим же причинам.зачем блокировать? ЛЮБАЯ блокировка это тормоза. Тут даже цель непонятна. Ты же поток сообщений просто пишешь. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 10.06.2019, 10:35 | 
  
  
  
   | 
||
| 
 
JDBC: блокировка таблиц 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  maytonMolasarmayton, 1. SELECT MAX(id) FROM Table либо 2. SELECT * FROM Table ORDER BY id DESC LIMIT 1 Категорически нельзя так делать. В базах данных обычно для таких целей создаётся выделенный объект sequence и ты из него получаешь значения для id, event_id в двух таблицах. Все другие подходы - неверны. Понял. Спасибо. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 10.06.2019, 10:36 | 
  
  
  
   | 
||
| 
 
JDBC: блокировка таблиц 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  одному мне не хватает в таблице событий версии и таймстампа? про еав ничего говорить не буду, ибо адепты могут и возненавидеть. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 10.06.2019, 11:18 | 
  
  
  
   | 
||
| 
 
JDBC: блокировка таблиц 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Озверин, Что за версия? Метка времени это обычно свойство поля default values. Согласен. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 10.06.2019, 11:28 | 
  
  
  
   | 
||
| 
 
JDBC: блокировка таблиц 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Индекс, первичный и фореген кей убрать.  Если скорость хотим. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 10.06.2019, 11:31 | 
  
  
  
   | 
||
| 
 
JDBC: блокировка таблиц 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  PetroNotC SharpОзверин, Что за версия? Метка времени это обычно свойство поля default values. Согласен. версия события, т.к. со временем события могут расширяться новыми полями, в старых версиях событий некоторые поля искать - не имеет смысла. Ну и для старых событий могут существовать старые обработки, для новых - новые. Это как версия rest api ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 10.06.2019, 11:34 | 
  
  
  
   | 
||
| 
 | 

start [/forum/topic.php?fid=59&msg=39824805&tid=2121263]:  | 
    0ms | 
get settings:  | 
    11ms | 
get forum list:  | 
    15ms | 
check forum access:  | 
    3ms | 
check topic access:  | 
    3ms | 
track hit:  | 
    56ms | 
get topic data:  | 
    8ms | 
get forum data:  | 
    2ms | 
get page messages:  | 
    61ms | 
get tp. blocked users:  | 
    1ms | 
| others: | 231ms | 
| total: | 391ms | 

| 0 / 0 | 

    Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
    
    
    «На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
    
    
    ... ля, ля, ля ...