|
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 |
|
JDBC: блокировка таблиц
|
|||
---|---|---|---|
#18+
Озверин, По метки времени ... field_stamp default (systimestamp) not null, .... А по версии, я думаю что он сразу раскидывает эту таблу в другую базу и там версия. По этой сложно запросы строить. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 11:37 |
|
JDBC: блокировка таблиц
|
|||
---|---|---|---|
#18+
PetroNotC SharpИндекс, первичный и фореген кей убрать. Если скорость хотим. Скорость нужна!!! Объясните, пожалуйста, подробнее, что нужно убрать. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 11:44 |
|
JDBC: блокировка таблиц
|
|||
---|---|---|---|
#18+
MolasarPetroNotC SharpИндекс, первичный и фореген кей убрать. Если скорость хотим. Скорость нужна!!! Объясните, пожалуйста, подробнее, что нужно убрать. оставить одну таблицу, убрать еав, подумать над тем, а зачем вам вообще хранить отдельные свойства каждого евента, может в блок\json\прочуб хрень? Почитать, как работают с паттерном event sourcing. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 11:47 |
|
JDBC: блокировка таблиц
|
|||
---|---|---|---|
#18+
MolasarPetroNotC SharpИндекс, первичный и фореген кей убрать. Если скорость хотим. Скорость нужна!!! Объясните, пожалуйста, подробнее, что нужно убрать.ты тесты вроде делал? Или нет? Тут уже написали. Все убрать кроме тупой вставки строк как в двоичный файл на диске. Потом сда тесты и время записи. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 12:00 |
|
JDBC: блокировка таблиц
|
|||
---|---|---|---|
#18+
У меня дежа-вю. Мне кажтеся мы уже обсуждали задачу сохранения пропертей. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 12:01 |
|
JDBC: блокировка таблиц
|
|||
---|---|---|---|
#18+
PetroNotC SharpПотом сда тесты и время записи.потом сюда в форум тесты и время записи ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 12:01 |
|
JDBC: блокировка таблиц
|
|||
---|---|---|---|
#18+
mayton, Это ТС за пол года уже забыл)) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 12:02 |
|
JDBC: блокировка таблиц
|
|||
---|---|---|---|
#18+
Вот по автору можно найти Запись Properties в БД ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 12:05 |
|
JDBC: блокировка таблиц
|
|||
---|---|---|---|
#18+
забыл никandreykaTпропущено... откуда такой вывод? изоляции же тормозов не добавляют. Да ну? А пацаны то не знают. Попробуй в продакшене поставить serializable и отпиши результаты если для каких то конкретных задач это будет приелмлмо и нужно - не сомневайся, включу. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 12:07 |
|
|
start [/forum/topic.php?all=1&fid=59&tid=2121263]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
151ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 261ms |
0 / 0 |