powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Java [игнор отключен] [закрыт для гостей] / JDBC: блокировка таблиц
33 сообщений из 33, показаны все 2 страниц
JDBC: блокировка таблиц
    #39824074
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!

Использую MariaDB.

JDBC предлагает только connection.setTransactionIsolation
А как блокировать таблицы на разных уровнях?
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824099
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так же, как и в НЕ JDBC. Командами SQL.
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824155
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molasar,
Зачем? Тороза добавить?
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824193
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC SharpMolasar,
Зачем? Тороза добавить?
откуда такой вывод? изоляции же тормозов не добавляют.
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824200
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTPetroNotC SharpMolasar,
Зачем? Тороза добавить?
откуда такой вывод? изоляции же тормозов не добавляют.по умолчанию read commited и трогать не надо
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824212
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кому не надо? кейсы разные бывают.
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824216
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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/
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824223
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
Да. Кейс по смене пола тоже бывает. Ты обосновал.
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824302
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTPetroNotC SharpMolasar,
Зачем? Тороза добавить?
откуда такой вывод? изоляции же тормозов не добавляют.
Да ну? А пацаны то не знают. Попробуй в продакшене поставить serializable и отпиши результаты
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824797
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
public class Event implements Serializable {
    
    private Properties properties;

    public Event() {
        this.properties = new Properties();
    }

    public Event(Properties properties) {
        this.properties = properties;
    }
    
}


Для хранения такой структуры создаю две таблицы:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE TABLE `event_entity` (
	`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
	PRIMARY KEY (`id`)
);
CREATE TABLE `event_property` (
	`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
	`property_key` VARCHAR(255) NULL DEFAULT NULL,
	`property_value` VARCHAR(255) NULL DEFAULT NULL,
	`event_id` BIGINT(20) NULL DEFAULT NULL,
	PRIMARY KEY (`id`),
	INDEX `FKd44ty69o5l0g38jbxgbl9k0y4` (`event_id`),
	CONSTRAINT `FKd44ty69o5l0g38jbxgbl9k0y4` FOREIGN KEY (`event_id`) REFERENCES `event_entity` (`id`)
);


1. Создаю новую запись в таблице event_entity.
2. Получаю последний id в таблице event_entity.
3. Создаю новую запись в таблице event_property, записываю в неё 1 запись из properties и новый id из event_entity.

3-й шаг повторяется столько раз сколько записей в properties.

Блокировка таблицы event_entity нужна для, чтобы другое подключение не успело создать новую запись в таблице event_entity между 1 и 2 шагами. В противном случае я получу не свой id.
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824798
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как ты получаешь последний id?
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824802
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

1. SELECT MAX(id) FROM Table
либо
2. SELECT * FROM Table ORDER BY id DESC LIMIT 1
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824805
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molasar,
Первая табла не нужна. Тогда не нужна и правка уровня изоляции.
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824810
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC SharpMolasar,
Первая табла не нужна. Тогда не нужна и правка уровня изоляции.
Тут правка уровня изоляции в принципе не нужна. Тут и транзакция нужна лишь для того чтобы откатить в случае чего.
Все что здесь надо это правильно использовать jdbc, например вот тут можно почитать https://stackoverflow.com/questions/1915166/how-to-get-the-insert-id-in-jdbc.
А то блокировка таблицы, блокировка таблицы:)
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824813
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя petro прав, на кой здесь вторая таблица тоже непонятно. Ванную, что тс просто не знает как заманить энтити со вложенными пропертис в одну таблицу
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824815
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC SharpMolasar,
Первая табла не нужна. Тогда не нужна и правка уровня изоляции.
Теоретически можно отказаться от 1-ой таблицы event_entity.
Всё равно придется блокировать 2-ю таблицу по этим же причинам.
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824819
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никPetroNotC SharpMolasar,
Первая табла не нужна. Тогда не нужна и правка уровня изоляции.
Тут правка уровня изоляции в принципе не нужна. Тут и транзакция нужна лишь для того чтобы откатить в случае чего.
Все что здесь надо это правильно использовать jdbc, например вот тут можно почитать https://stackoverflow.com/questions/1915166/how-to-get-the-insert-id-in-jdbc.
А то блокировка таблицы, блокировка таблицы:)
Отличное решение!
Спасибо!
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824821
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molasarmayton,

1. SELECT MAX(id) FROM Table
либо
2. SELECT * FROM Table ORDER BY id DESC LIMIT 1
Категорически нельзя так делать. В базах данных обычно для таких целей создаётся выделенный объект sequence
и ты из него получаешь значения для id, event_id в двух таблицах.

Все другие подходы - неверны.
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824823
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MolasarPetroNotC SharpMolasar,
Первая табла не нужна. Тогда не нужна и правка уровня изоляции.
Теоретически можно отказаться от 1-ой таблицы event_entity.
Всё равно придется блокировать 2-ю таблицу по этим же причинам.зачем блокировать?
ЛЮБАЯ блокировка это тормоза.
Тут даже цель непонятна.
Ты же поток сообщений просто пишешь.
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824824
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonMolasarmayton,

1. SELECT MAX(id) FROM Table
либо
2. SELECT * FROM Table ORDER BY id DESC LIMIT 1
Категорически нельзя так делать. В базах данных обычно для таких целей создаётся выделенный объект sequence
и ты из него получаешь значения для id, event_id в двух таблицах.

Все другие подходы - неверны.
Понял. Спасибо.
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824848
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
одному мне не хватает в таблице событий версии и таймстампа? про еав ничего говорить не буду, ибо адепты могут и возненавидеть.
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824856
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверин,
Что за версия?
Метка времени это обычно свойство поля default values.
Согласен.
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824860
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Индекс, первичный и фореген кей убрать.
Если скорость хотим.
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824861
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC SharpОзверин,
Что за версия?
Метка времени это обычно свойство поля default values.
Согласен.

версия события, т.к. со временем события могут расширяться новыми полями, в старых версиях событий некоторые поля искать - не имеет смысла. Ну и для старых событий могут существовать старые обработки, для новых - новые. Это как версия rest api
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824864
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверин,
По метки времени
...
field_stamp default (systimestamp) not null,
....
А по версии, я думаю что он сразу раскидывает эту таблу в другую базу и там версия.
По этой сложно запросы строить.
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824866
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC SharpИндекс, первичный и фореген кей убрать.
Если скорость хотим.
Скорость нужна!!! Объясните, пожалуйста, подробнее, что нужно убрать.
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824870
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MolasarPetroNotC SharpИндекс, первичный и фореген кей убрать.
Если скорость хотим.
Скорость нужна!!! Объясните, пожалуйста, подробнее, что нужно убрать.

оставить одну таблицу, убрать еав, подумать над тем, а зачем вам вообще хранить отдельные свойства каждого евента, может в блок\json\прочуб хрень? Почитать, как работают с паттерном event sourcing.
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824877
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MolasarPetroNotC SharpИндекс, первичный и фореген кей убрать.
Если скорость хотим.
Скорость нужна!!! Объясните, пожалуйста, подробнее, что нужно убрать.ты тесты вроде делал?
Или нет?
Тут уже написали. Все убрать кроме тупой вставки строк как в двоичный файл на диске.
Потом сда тесты и время записи.
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824878
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня дежа-вю. Мне кажтеся мы уже обсуждали задачу сохранения пропертей.
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824879
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC SharpПотом сда тесты и время записи.потом сюда в форум тесты и время записи
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824880
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Это ТС за пол года уже забыл))
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824882
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот по автору можно найти Запись Properties в БД
...
Рейтинг: 0 / 0
JDBC: блокировка таблиц
    #39824886
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никandreykaTпропущено...

откуда такой вывод? изоляции же тормозов не добавляют.
Да ну? А пацаны то не знают. Попробуй в продакшене поставить serializable и отпиши результаты
если для каких то конкретных задач это будет приелмлмо и нужно - не сомневайся, включу.
...
Рейтинг: 0 / 0
33 сообщений из 33, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / JDBC: блокировка таблиц
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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