powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Как избежать проблем )
25 сообщений из 89, страница 3 из 4
Как избежать проблем )
    #40066108
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov

вернёт заданные поля вставленной записи. Если, конечно, есть поддержка в драйвере.
Если нет, то на первом проходе делаем вставку, а на втором - выбираем искомые идентификаторы для всех исходных значений. Коряво, но вполне работоспособно.


asv79Но вот когда ты сталкиваешься с многопоточкой

Одна сессия вставили и НЕ закомитела

Вторая сессия пытается вставить - получает exceptin
Пытается получить ID-ник SELECT'ом - а облом )))

Первая сессия коммитет, но второй это уже не поможет

p.s. в сообщении 22314707 no_data_found конечно опечатка, скорее всего, что-то типа DUP_VAL_ON_INDEX будет
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066135
Leonid Kudryavtsev
Одна сессия вставили и НЕ закомитела

Вторая сессия пытается вставить - получает exceptin
Пытается получить ID-ник SELECT'ом - а облом )))

Первая сессия коммитет, но второй это уже не поможет
Вторая транзакция не получит exception пока первая не закоммитит, иначе это бы нарушало изоляцию READ COMMITTED. Мол, вставить запись не могу, хоть даже записей с таким значением нет в таблице.

На самом деле так:
1. tx1 началась, вставила запись
2. tx2 началась, при вставке заблокировалась на изменении индекса. Ну а дальше два возможных варианта:
3.a tx1 делает коммит, что разблокирует tx2 и та валится с исключением
3.b tx1 делает rollback, что разблокирует tx2 и та удачно вставляет
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066143
asv79, я тут только счас понял что SELECT делается потому что у Email'ов есть ID. Так вот.. Раз email'ы уникальные, почему бы вообще не избавиться от суррогатного Primary Key и не использовать email в качестве PK? Тогда SELECT вообще не нужен будет. А в Foreign Key можно прям email и писать.

Хотя наверно ты мигрируешь в уже готовую схему, менять ее уже не выйдет..
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066167
Bsplesk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Без классов прям совсем никак (или mybatics?)? Хотя предложенный ранее insert/on conflict retur... выглядит более логичным.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
BEGIN;
-- другие операции
SAVEPOINT sp1;
INSERT INTO wines VALUES('Chateau Lafite 2003', '24');
-- Предполагая, что здесь возникает ошибка из-за нарушения уникальности ключа,
-- мы выполняем следующие команды:
ROLLBACK TO sp1;
UPDATE wines SET stock = stock + 24 WHERE winename = 'Chateau Lafite 2003';
-- Продолжение других операций и в завершение...
COMMIT;
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066180
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
Leonid Kudryavtsev
Одна сессия вставили и НЕ закомитела

Вторая сессия пытается вставить - получает exceptin
Пытается получить ID-ник SELECT'ом - а облом )))

Первая сессия коммитет, но второй это уже не поможет
Вторая транзакция не получит exception пока первая не закоммитит, иначе это бы нарушало изоляцию READ COMMITTED. Мол, вставить запись не могу, хоть даже записей с таким значением нет в таблице.

Получит.
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066184
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79
зато работает быстро - если ввести переменную -замедляется процесс ,так как все это в цикле ,в котром будет куча мусора из под этих временных объектов

Херово жить без профильного образования. Когда ты делаешь 6 раз гет у тебя ничего не выполняется в этот момент? Гет берется из астрала за 0,5 такта цп?
А что я говорил в прошлом треде? Вот, ты опять танцуешь вокруг своей орм с костылями и подпорками, а мы смотрим и смеёмся.
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066206
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
asv79
зато работает быстро - если ввести переменную -замедляется процесс ,так как все это в цикле ,в котром будет куча мусора из под этих временных объектов

Херово жить без профильного образования. Когда ты делаешь 6 раз гет у тебя ничего не выполняется в этот момент? Гет берется из астрала за 0,5 такта цп?
А что я говорил в прошлом треде? Вот, ты опять танцуешь вокруг своей орм с костылями и подпорками, а мы смотрим и смеёмся.

смотри я ж не просто так сделал все эти длинные касты- я протестировал с ними и без них - создание нового объекта очень сильно нагружает процесс - и да - пусть код не очень хорошо читаем,но он быстрее где то на 20%

орм то тут причем? или мне может пойти к руководству и сказать - давайте братцы - выделите бюджет млн 10 -15 на переписку сервисва на ждбси?)))
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066207
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
asv79, я тут только счас понял что SELECT делается потому что у Email'ов есть ID. Так вот.. Раз email'ы уникальные, почему бы вообще не избавиться от суррогатного Primary Key и не использовать email в качестве PK? Тогда SELECT вообще не нужен будет. А в Foreign Key можно прям email и писать.

Хотя наверно ты мигрируешь в уже готовую схему, менять ее уже не выйдет..

да у емайл есть id поэтму до кучи мне пришлось переделать их с identity на sequence иначе селекты вообще не проходили - так как присовоение id идет при записи

пс.да миграция идет в готовую схему - которую никто не даст менять поэтому приходится работать с невалидными данными со стороны монго и с другой постгрес - которая не отвечает даже 1 нф
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066208
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Basil A. Sidorov

...Или это слишком банально и содержит мало объектных типов?

IMHO скорее всего не поможет. Ему еще ID'шник из базы получить нужно. А тут даже

try {
INSERT ...
} exception WHEN_NO_DATA_FOUND {
SELECT ...
}

может не помочь, при обычном Read committed )))

такая схема работает
инсерт в try ->exeption ->catch ->select
правда скорость оставляет желать лучшего ,но по крайне мере я добился чего и хотел
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066211
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev


Скорее всего должен быть обернут в synchronized.
А если мы хотим еще данный список еще и с БД поддерживать в корректном состоянии, то и insert и commit так же должен быть в этом же блоке synchronized.

IMHO

посмотри сюда на первое сообщение

Код: java
1.
СoncurrentSkipListSet<String> concurrentSkipListSet
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066212
Leonid Kudryavtsev
Stanislav Bashkyrtsev
пропущено...
Вторая транзакция не получит exception пока первая не закоммитит, иначе это бы нарушало изоляцию READ COMMITTED. Мол, вставить запись не могу, хоть даже записей с таким значением нет в таблице.

Получит.
Может проверишь? Я вот проверил.
asv79орм то тут причем? или мне может пойти к руководству и сказать - давайте братцы - выделите бюджет млн 10 -15 на переписку сервисва на ждбси?)))В целом-то сервис не обязательно трогать, только миграцию писать на JDBC.
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066213
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Stanislav Bashkyrtsev#22314670 Я правда не понял зачем ты вообще SELECT делаешь, если у тебя и так email есть.. Получается какой-то бесполезный
Код: java
1.
select email from USERS where email = ?



/quot]
все очень просто - там три сущности - первая это ящик- далее рассылка и третья M2M
тоесть я пишу рассылку далее в цикле прогоняю ящики и м2м
для чего нужен такой селект - чтобы у меня на руках был id емайл которй я могу записать в м2м
вообщем трай кетч работает - большего и не требуется
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066221
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79,
>там три сущности - первая это ящик- далее рассылка и третья M2M
=незачет. След топик начинай с DDL)))))
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066223
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79,
Новые сущности, в эксклюзивном режиме, можно писать без генерации айди в бд. Джун ты наш.
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066231
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79
орм то тут причем?

Притом, что ты пляшешь вокруг него с подпорками и приседаешь.
asv79
создание нового объекта

Ссылки ты хотел сказать? Нагружает процесс, да?
asv79
или мне может пойти к руководству и сказать

Да не надо тебе ничего менять, всё нормально. Ты же сам его выбрал и рассказываешь, какой он крутой.
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066238
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
asv79,
Новые сущности, в эксклюзивном режиме, можно писать без генерации айди в бд. Джун ты наш.

вот это новость ) а кто то утверждал что нельзя?
а вот если сущнность содержит ссылку на другую сущность - то вроде как уже нужен id)
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066241
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov

Многопоточная вставка это то, что не надо делать с базой.

в одном потоке слишком долго,хотя SLA на процессы нет - то может и придется писать в однопоточке
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066242
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79
PetroNotC Sharp
asv79,
Новые сущности, в эксклюзивном режиме, можно писать без генерации айди в бд. Джун ты наш.

вот это новость ) а кто то утверждал что нельзя?
а вот если сущнность содержит ссылку на другую сущность - то вроде как уже нужен id)
эх джун.
Вставляем мастер с айди 123 и потом в детайль с этим же 123.
Ничего запрашивать не надо.
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066243
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79
Basil A. Sidorov

Многопоточная вставка это то, что не надо делать с базой.

в одном потоке слишком долго,хотя SLA на процессы нет - то может и придется писать в однопоточке
для этого нужно 3 страницы?
Ты с работающей однопоточки начать должен был.
Потом тюнинг.
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066252
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
asv79
пропущено...

вот это новость ) а кто то утверждал что нельзя?
а вот если сущнность содержит ссылку на другую сущность - то вроде как уже нужен id)
эх джун.
Вставляем мастер с айди 123 и потом в детайль с этим же 123.
Ничего запрашивать не надо.

ааа вот оно чо ,а айди то ты где возьмешь)
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066254
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79,
Выше писал. Счетчик на клиенте. Хоть до миллиарда. Потом вкл индекс PK
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066256
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79,
Есть куча решений. Но:
- ты не дал DDL
- ты слился
- ты не сделал однопоточку и не дал цифры
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066289
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
asv79Но вот когда ты сталкиваешься с многопоточкой
Одна сессия вставили и НЕ закомителаЭто типа, прикол такой - наступать на элементарные грабли??? Или хочется как в анекдоте: "А вы на шкаф залезьте".
И даже если не касаться азов устройства СУБД, то задлянафига в сугубо последовательном процессе многопоточка? Чтобы оно сразу было и сразу глючило?
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066292
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79
в одном потоке слишком долго
Если вставка в два потока работает быстрее вставки в один поток, то, скорее всего, "ваш код - отстой".
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066308
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для больших объемов в PostgreSQL есть команда COPY, на порядки быстрее INSERT'ов.

AFAIK
...
Рейтинг: 0 / 0
25 сообщений из 89, страница 3 из 4
Форумы / Java [игнор отключен] [закрыт для гостей] / Как избежать проблем )
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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