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

Откуда:
Сообщений: 583
Zzz79
забыл ник

Еще раз, что мешает тебе хранить в памяти промежуточный Set с уникальными айди уже записанными в батчах?
val uniqueIds = Set()
val data = read(1000)
val unique= extractUniqueIds(data)
if(!allIdsUnique(unique, uniqueIds)) {
  throw new Exception("data is invalid")
} else {
  uniqueIds.addAll(unique)
  writeBatch(data)
}

вот это должно подойти ,спасибо щас попробую реализовать

неа не подходит и этот вариант - так как например первый батч не содержал дубли - мы его отправили ,во втором батче оказался дубль но мы уже 1 батч записали- и получается вообще не то не се
16 июн 20, 16:42    [22151779]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
chpasha
Member

Откуда:
Сообщений: 9556
забыл ник
Я так предполагаю что ему нужно найти дубликаты во время единоразовго процесса импорта, допустим за сегодняшнюю дату - это типично для ETL. Если ему нужно глобальный uniqueness - то конечно так не получится

ну я это два раза попытался выяснить, как и то, что по задаче делать, если дубли есть, но без толку :( . дело в том что в ETL таки нередко надо, чтоб данные были глобально уникальны, например если у нас импорты повторяющиеся с историческими данными
16 июн 20, 16:54    [22151790]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
Zzz79
Member

Откуда:
Сообщений: 583
вообщем ничего не подходит будем делать unique и DO NOTHING
16 июн 20, 16:56    [22151793]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
mayton
Member

Откуда: loopback
Сообщений: 47981
Стас!

LevelDb внедряй, воруй убивай грузи, проверяй.
16 июн 20, 16:59    [22151796]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
chpasha
Member

Откуда:
Сообщений: 9556
Zzz79
DO NOTHING

DO NOTHING это при любом кипише лучший вариант
16 июн 20, 17:13    [22151804]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
Zzz79
Member

Откуда:
Сообщений: 583
chpasha
Zzz79
DO NOTHING

DO NOTHING это при любом кипише лучший вариант

покажите пример ,как в ликвибейсе добавить уникальность на колонку и DO Nothing on Conflict ,если таблица уже существует пожалуйста,если не сложно
16 июн 20, 17:25    [22151813]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
забыл ник
Member

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

вот это должно подойти ,спасибо щас попробую реализовать

неа не подходит и этот вариант - так как например первый батч не содержал дубли - мы его отправили ,во втором батче оказался дубль но мы уже 1 батч записали- и получается вообще не то не се

Эмм.. автокоммит чтоли?
Ну так сразу надо говорить что если есть один дубль - то нельзя писать ничего. И все равно непонятно, почему нельзя это обернуть в транзакцию.
16 июн 20, 17:29    [22151816]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
chpasha
Member

Откуда:
Сообщений: 9556
Zzz79
покажите пример ,как в ликвибейсе

это не ко мне

Zzz79
DO Nothing on Conflict ,если таблица уже существует

DO Nothing on Conflict это часть синтаксиса INSERT т.е. DML, а не DDL
16 июн 20, 17:36    [22151823]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
Zzz79
Member

Откуда:
Сообщений: 583
забыл ник
Zzz79
пропущено...

неа не подходит и этот вариант - так как например первый батч не содержал дубли - мы его отправили ,во втором батче оказался дубль но мы уже 1 батч записали- и получается вообще не то не се

Эмм.. автокоммит чтоли?
Ну так сразу надо говорить что если есть один дубль - то нельзя писать ничего. И все равно непонятно, почему нельзя это обернуть в транзакцию.

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

нельзя обернуть в одну транзацию так как буфер худой у нас)
вообщем все что можно это уникью+ do nothing on conflict
16 июн 20, 17:38    [22151826]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
Zzz79
Member

Откуда:
Сообщений: 583
chpasha
Zzz79
покажите пример ,как в ликвибейсе

это не ко мне

Zzz79
DO Nothing on Conflict ,если таблица уже существует

DO Nothing on Conflict это часть синтаксиса INSERT т.е. DML, а не DDL

ликвибейс может читать скрипты в любом формате - мне нужно в формате sql
16 июн 20, 17:39    [22151827]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
забыл ник
Member

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

нельзя обернуть в одну транзацию так как буфер худой у нас)

Кто тебе сказал это? Транзакция никаким боком не относится к буферу и даже к tcp-соединению. Когда менеджер транзакций скажет коммит - тогда и будет коммит. А то что вы не знаете как это написать - ну так это другой вопрос
16 июн 20, 17:46    [22151833]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
забыл ник
Member

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

это не ко мне

пропущено...

DO Nothing on Conflict это часть синтаксиса INSERT т.е. DML, а не DDL

ликвибейс может читать скрипты в любом формате - мне нужно в формате sql

Тебе же говорят, ликвибейс работает с DDL, а DO Nothing это инструкция DML - то есть в рантайме
16 июн 20, 17:47    [22151835]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
Zzz79
Member

Откуда:
Сообщений: 583
забыл ник
Zzz79

нельзя обернуть в одну транзацию так как буфер худой у нас)

Кто тебе сказал это? Транзакция никаким боком не относится к буферу и даже к tcp-соединению. Когда менеджер транзакций скажет коммит - тогда и будет коммит. А то что вы не знаете как это написать - ну так это другой вопрос

мб они и знают,у нас жук же,хер его знает как там все это происходит
16 июн 20, 17:47    [22151836]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
Zzz79
Member

Откуда:
Сообщений: 583
забыл ник
Zzz79
пропущено...

ликвибейс может читать скрипты в любом формате - мне нужно в формате sql

Тебе же говорят, ликвибейс работает с DDL, а DO Nothing это инструкция DML - то есть в рантайме

пля вот это очень плохо)
у нас жук ,там черт ногу сломит где все это там ппц....
16 июн 20, 17:49    [22151837]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17915
Zzz79
осталось понять как это узнать,что есть дубликаты
для mysql есть
ON DUPLICATE KEY UPDATE
и никаких проблем с дубликатами
16 июн 20, 17:54    [22151844]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
mayton
Member

Откуда: loopback
Сообщений: 47981
Zzz79
chpasha
пропущено...

DO NOTHING это при любом кипише лучший вариант

покажите пример ,как в ликвибейсе добавить уникальность на колонку

Из двух частей состоит.

1)

2020-05-07_create_fucken_index
create unique index index_fucken_name on fucken_table_name(unq_field);



2)

    <changeSet id="2020-05-07_create_fucken_index" author="Stas" context="ddl">
        <sqlFile path="sql/2020-05-07_create_fucken_index.sql" relativeToChangelogFile="true"/>
    </changeSet>
16 июн 20, 17:54    [22151845]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
mayton
Member

Откуда: loopback
Сообщений: 47981
вадя
Zzz79
осталось понять как это узнать,что есть дубликаты
для mysql есть
ON DUPLICATE KEY UPDATE
и никаких проблем с дубликатами

Этот синтаксис не везде поддерживается. Надо смотреть документацию на реляционную DBMS.
16 июн 20, 17:55    [22151846]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
Zzz79
Member

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

покажите пример ,как в ликвибейсе добавить уникальность на колонку

Из двух частей состоит.

1)

2020-05-07_create_fucken_index
create unique index index_fucken_name on fucken_table_name(unq_field);



2)

    <changeSet id="2020-05-07_create_fucken_index" author="Stas" context="ddl">
        <sqlFile path="sql/2020-05-07_create_fucken_index.sql" relativeToChangelogFile="true"/>
    </changeSet>


там что то типо вот такого должно быть

ALTER TABLE table_name 
ADD CONSTRAINT MyUniqueConstraint UNIQUE(column1, column2...)
16 июн 20, 17:59    [22151852]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
забыл ник
Member

Откуда:
Сообщений: 3370
Zzz79, что такое жук?
16 июн 20, 18:01    [22151857]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
Zzz79
Member

Откуда:
Сообщений: 583
забыл ник
Zzz79, что такое жук?

JooQ
16 июн 20, 18:02    [22151858]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
mayton
Member

Откуда: loopback
Сообщений: 47981
Можно и так. Констрейнт уникальности - это макрос который автоматически создаст индекс.

Попробуй оба варианта я не против.

Но у тебя сложность будет не с индексом. А с опциональным insert и с отслеживанием статуса ошибки.
16 июн 20, 18:02    [22151859]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
chpasha
Member

Откуда:
Сообщений: 9556
не ясны ключевые моменты задачи: как то глобальная/локальная уникальность и стратегия разрешения конфликта. от этого зависит направление и сложность решения
16 июн 20, 18:02    [22151860]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
Zzz79
Member

Откуда:
Сообщений: 583
mayton
Можно и так. Констрейнт уникальности - это макрос который автоматически создаст индекс.

Попробуй оба варианта я не против.

Но у тебя сложность будет не с индексом. А с опциональным insert и с отслеживанием статуса ошибки.

это да- надо будет смотреть как это сделать средствами жука
16 июн 20, 18:08    [22151863]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
mayton
Member

Откуда: loopback
Сообщений: 47981
Не покидает ощущение жуткого велосипеда. Еслиб я делал то создал-бы сет staging-tables
которые по форме шапки совпадают с destination tables. Грузил бы в них сырые сведенья с csv.
Потом 1 запросом смёрживал с проверкой на дедубликацию.

Скорость гарантирована.

После этого staging area trunk-атится.
16 июн 20, 18:10    [22151865]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать  [new]
Zzz79
Member

Откуда:
Сообщений: 583
вадя
Zzz79
осталось понять как это узнать,что есть дубликаты
для mysql есть
ON DUPLICATE KEY UPDATE
и никаких проблем с дубликатами

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

getDslContext().insertInto[myTable])).set([myRecord]).onDuplicateKeyIgnore());
16 июн 20, 18:21    [22151879]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4 5   вперед  Ctrl      все
Все форумы / Java Ответить