Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4 5   вперед  Ctrl      все
 Re: Как лучше сделать  [new]
mayton
Member

Откуда: loopback
Сообщений: 47971
Zzz79
вадя
пропущено...
для mysql есть
ON DUPLICATE KEY UPDATE
и никаких проблем с дубликатами

что то подобное есть и в жуке

getDslContext().insertInto[myTable])).set([myRecord]).onDuplicateKeyIgnore());

Твоя голова не тем занята. Ты сделай сначала просто деревянный работающий JDBC SQL скрипт.
А когда он будет работать - портируешь его на JOOQ.

Это - ТруЪ вей.
16 июн 20, 18:23    [22151883]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 8762
За нахрена для решения данной задачи какие-то жуки и DTO - мне не понятно
16 июн 20, 18:28    [22151887]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
Zzz79
Member

Откуда:
Сообщений: 569
Leonid Kudryavtsev
За нахрена для решения данной задачи какие-то жуки и DTO - мне не понятно

затем что в проекте у нас жук))
16 июн 20, 18:29    [22151890]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
Zzz79
Member

Откуда:
Сообщений: 569
mayton
Zzz79
пропущено...

что то подобное есть и в жуке

getDslContext().insertInto[myTable])).set([myRecord]).onDuplicateKeyIgnore());

Твоя голова не тем занята. Ты сделай сначала просто деревянный работающий JDBC SQL скрипт.
А когда он будет работать - портируешь его на JOOQ.

Это - ТруЪ вей.

ты пойми проект написан и в проде уже давно,но вот ошиблись смежники прислали дубликат в файле и он упал
мы устраняем) никто не будет менять архитектуру,добавлять или убирать таблицы- все что нам разрешили - добавить уникью)

никто не будет менять размеры буфера батча - хотя как по мне 1000 строк для современного сервака ну это просто какая то дичь)но вот не мы все это решаем

по уму я бы вообще убрал батч- так как там под сервис выделяется 4 гига озу и уж явно 2-3 мб в буфере погоды не сделают
16 июн 20, 18:32    [22151892]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
забыл ник
Member

Откуда:
Сообщений: 3370
Zzz79
mayton
пропущено...

Твоя голова не тем занята. Ты сделай сначала просто деревянный работающий JDBC SQL скрипт.
А когда он будет работать - портируешь его на JOOQ.

Это - ТруЪ вей.

ты пойми проект написан и в проде уже давно,но вот ошиблись смежники прислали дубликат в файле и он упал
мы устраняем) никто не будет менять архитектуру,добавлять или убирать таблицы- все что нам разрешили - добавить уникью)

никто не будет менять размеры буфера батча - хотя как по мне 1000 строк для современного сервака ну это просто какая то дичь)но вот не мы все это решаем

по уму я бы вообще убрал батч- так как там под сервис выделяется 4 гига озу и уж явно 2-3 мб в буфере погоды не сделают

В Принципе я с тобой согласен, кто у вас там тим лид он по идее и должен продавливать, если у тебя нету полномочий. Иначе очень похоже на 7 прозрачных перпендикулярных красных линий.
Ну и таки архитектуру иногда можно и переписать, все зависит от сложности задачи и нужности бизнесу. Если эта фича супер-критична, а предыдущая архитектура тупо не поддерживает ее - то что еще остается делать? Были такие случаи у меня, но я думаю что это конечно не твой вариант
16 июн 20, 18:40    [22151893]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
mayton
Member

Откуда: loopback
Сообщений: 47971
Как будет угодно. Я просто акцентирую на том что JOOQ не должен быть помехой
или блокером в твоей задаче. Делай story-first. А лоск и хотелки записывай в Jira
как технические долги и потом полируй хоть всё лето.
16 июн 20, 18:46    [22151898]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
Zzz79
Member

Откуда:
Сообщений: 569
не силен я в скриптах
если я пишу вот так

ALTER TABLE имя схемы.имя таблицы
ADD СONSTRAINT имя контрейнта UNIQUE( имя схемы.имя таблицы.имя колонки)

правильно ли так будет?

и второй вопрос RollBack script

DROP CONSTRAIN IF EXIST имя коснстрейнта

или же нужно в дропе указкать имя схемы.имя таблицы.имя контсрейнта
16 июн 20, 18:51    [22151902]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
забыл ник
Member

Откуда:
Сообщений: 3370
Zzz79
не силен я в скриптах
если я пишу вот так

ALTER TABLE имя схемы.имя таблицы
ADD СONSTRAINT имя контрейнта UNIQUE( имя схемы.имя таблицы.имя колонки)

правильно ли так будет?

и второй вопрос RollBack script

DROP CONSTRAIN IF EXIST имя коснстрейнта

или же нужно в дропе указкать имя схемы.имя таблицы.имя контсрейнта

Ты всегда на глаз делаешь?
Я лично хз как правильно. Если бы у меня встала такая задача - завел бы локально БД и проверил, думаю уже закончил бы полчаса как
16 июн 20, 18:56    [22151909]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
Zzz79
Member

Откуда:
Сообщений: 569
забыл ник
Zzz79
не силен я в скриптах
если я пишу вот так

ALTER TABLE имя схемы.имя таблицы
ADD СONSTRAINT имя контрейнта UNIQUE( имя схемы.имя таблицы.имя колонки)

правильно ли так будет?

и второй вопрос RollBack script

DROP CONSTRAIN IF EXIST имя коснстрейнта

или же нужно в дропе указкать имя схемы.имя таблицы.имя контсрейнта

Ты всегда на глаз делаешь?
Я лично хз как правильно. Если бы у меня встала такая задача - завел бы локально БД и проверил, думаю уже закончил бы полчаса как


а чо бы и нет ) если скрипт кривой его ликви не пропустит)
16 июн 20, 19:01    [22151911]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
chpasha
Member

Откуда:
Сообщений: 9552
Zzz79
если скрипт кривой его ликви не пропустит

так тем более чего ты тут спрашиваешь
16 июн 20, 19:07    [22151914]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
Zzz79
Member

Откуда:
Сообщений: 569
chpasha,
да чтобы покачественней получилось))
16 июн 20, 19:10    [22151916]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
Zzz79
Member

Откуда:
Сообщений: 569
все скрипт взлетел,только теперь проблема - что у меня уже в таблице есть дубликаты) и естетсвенно индекс уникью не хочет добавляться и что делать ? сносить таблицу нельзя
16 июн 20, 19:15    [22151920]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
mayton
Member

Откуда: loopback
Сообщений: 47971
Удали дубликаты.
16 июн 20, 19:28    [22151928]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
mayton
Member

Откуда: loopback
Сообщений: 47971
Вот как тут https://stackoverflow.com/questions/18390574/how-to-delete-duplicate-rows-in-sql-server
16 июн 20, 19:30    [22151930]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
Zzz79
Member

Откуда:
Сообщений: 569
mayton
Вот как тут https://stackoverflow.com/questions/18390574/how-to-delete-duplicate-rows-in-sql-server

есть более легкий способ созать темп таблу - туда все заисать и обратно в таблу с уникью

а вообще мне разрешили truncate
16 июн 20, 19:44    [22151938]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
Zzz79
Member

Откуда:
Сообщений: 569
вобщем какая то шляпа получается

я инсерчю в таблу рекорды

dslContext.insertInto(TABLE_NAME)
set(record)
.onConflictDoNothing()
.execute()


и шляпа получается - в логах ошибка ,в бд пусто
16 июн 20, 21:19    [22151985]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
Zzz79
Member

Откуда:
Сообщений: 569
я так понимаю DO nothing тупо отменяет все сразу при конфликте что помечено execute()
а как сделать чтобы онменялась только запись которая уникальна и на нее есть дубликат - вопрос)
16 июн 20, 21:44    [22151998]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
chpasha
Member

Откуда:
Сообщений: 9552
ты бы все-таки читал иногда мануалы или хоть смотрел, какой sql генерит очередная вундервафля (это вообще полезно). 15 сек. гугления говорят мне о том, что onConflictDoNothing делает не то, что тебе надо, а то что надо (говорят) делает
ctx.insertInto(MY_TABLE)
    .columns(...)
    .values(...)
    .onConflictOnConstraint(Keys.MY_UNIQUE_KEY)
    .doUpdate() <--- здесь наверное doNothing() если такое есть
16 июн 20, 21:58    [22152003]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
Zzz79
Member

Откуда:
Сообщений: 569
chpasha
ты бы все-таки читал иногда мануалы или хоть смотрел, какой sql генерит очередная вундервафля (это вообще полезно). 15 сек. гугления говорят мне о том, что onConflictDoNothing делает не то, что тебе надо, а то что надо (говорят) делает
ctx.insertInto(MY_TABLE)
    .columns(...)
    .values(...)
    .onConflictOnConstraint(Keys.MY_UNIQUE_KEY)
    .doUpdate() <--- здесь наверное doNothing() если такое есть

ровно все тоже самое - в базе пусто+ошибка

воощем конфликт оменяет целиком тразакцию -хотя странно же если я делал цикл forEach и execute
16 июн 20, 22:23    [22152013]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
mayton
Member

Откуда: loopback
Сообщений: 47971
Zzz79, ты commit не забываешь делать?
16 июн 20, 22:24    [22152014]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
Zzz79
Member

Откуда:
Сообщений: 569
mayton
Zzz79, ты commit не забываешь делать?


в жуке такого нет -скорей всего вшито в терминальные операции
16 июн 20, 22:31    [22152018]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
Zzz79
Member

Откуда:
Сообщений: 569
мб это сраный стрим тупит ,щас попробую олд скул циклом
16 июн 20, 22:33    [22152020]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
mayton
Member

Откуда: loopback
Сообщений: 47971
Ну тыже понимаешь что если жук получает объект java.sql.Connection то у этого объекта
уже установлено свойство auto-commit={true|false} то ты обязан тогда явно фиксировать
транзакцию если авто-фиксация была в false.

Проверь на всякий случай.

Сообщение было отредактировано: 16 июн 20, 22:32
16 июн 20, 22:34    [22152021]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
mayton
Member

Откуда: loopback
Сообщений: 47971
Не понял при чем тут стрим. Стрим к технологии JDBC вообще не имеет ниакого отношения.
16 июн 20, 22:35    [22152022]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
Zzz79
Member

Откуда:
Сообщений: 569
mayton
Не понял при чем тут стрим. Стрим к технологии JDBC вообще не имеет ниакого отношения.

хрен его знает честно я хочу чего - есть лись с рекордами - записать все кроме дубликатов
пока не получается ничего - так как все мои действия отменяют целиком транзакцию( мб это происходит в рамках стрима )
16 июн 20, 22:39    [22152027]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4 5   вперед  Ctrl      все
Все форумы / Java Ответить