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

Почему просто не сделать условный
Код: plsql
1.
2.
3.
INSERT INTO таблица(email, name, userId)
VALUES (?, ?, ?)
ON CONFLICT (email, userId /* или что там у тебя за констраинт */) DO NOTHING 
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066057
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch,
Он не умеет без классов
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066058
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79,
>там процентов 40% наверно дубликаты
И..... что с ними делает комп и причем потоки?
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066061
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
asv79,
>там процентов 40% наверно дубликаты
И..... что с ними делает комп и причем потоки?
просто не записывать дубляж а брать сущесвующие значние и присваивать его рассылке)
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066065
Если хочется просто закешировать пользователей, то можно обычную ConcurrentHashMap<Email, User> завести. И проверять там прежде чем делать insert или select. Вставлять в эту мапку всякий раз когда прошел удачный INSERT или не-null SELECT. Что-то такое:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
        ConcurrentMap<String, User> cache = new ConcurrentHashMap<>();
        ...
        if(!cache.containsKey(email)) {
            try {
                User user = new User();
                userDao.save(user);
                cache.put(email, user);
            }catch (ConstraintViolationException e) {
                //ignore
            }
        } 
        User user = cache.computeIfAbsent(email, () -> userDao.findById(email));
        ...
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066066
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79
PetroNotC Sharp
asv79,
>там процентов 40% наверно дубликаты
И..... что с ними делает комп и причем потоки?
просто не записывать дубляж а брать сущесвующие значние и присваивать его рассылке)
блин. Ну создай список имен ОБРАБОТАННЫХ и потом
if (обработали) continue;
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066068
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79
PetroNotC Sharp
asv79,
>там процентов 40% наверно дубликаты
И..... что с ними делает комп и причем потоки?
просто не записывать дубляж а брать сущесвующие значние и присваивать его рассылке)

1. Дай DDL "присваивать рассылке"))))
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066069
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79,

Есть дубляж строки. Есть дубляж бизнес сущности. Есть дубляж "рассылки".
Модель короче давай.
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066079
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
asv79
пропущено...
просто не записывать дубляж а брать сущесвующие значние и присваивать его рассылке)
блин. Ну создай список имен ОБРАБОТАННЫХ и потом
if (обработали) continue;

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

1. Дай DDL "присваивать рассылке"))))

не могу я сюда никакие ддл выкладывать сам понимаешь почему
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066082
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
Если хочется просто закешировать пользователей, то можно обычную ConcurrentHashMap<Email, User> завести. И проверять там прежде чем делать insert или select. Вставлять в эту мапку всякий раз когда прошел удачный INSERT или не-null SELECT. Что-то такое:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
        ConcurrentMap<String, User> cache = new ConcurrentHashMap<>();
        ...
        if(!cache.containsKey(email)) {
            try {
                User user = new User();
                userDao.save(user);
                cache.put(email, user);
            }catch (ConstraintViolationException e) {
                //ignore
            }
        } 
        User user = cache.computeIfAbsent(email, () -> userDao.findById(email));
        ...


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

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

1. Дай DDL "присваивать рассылке"))))

не могу я сюда никакие ддл выкладывать сам понимаешь почему

Табла user и табла Рассылка из трех полей секретна?
Жжешь!))))
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066085
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Накал бреда возрастает
)))))))
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066087
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Четвертая тема автора про бд..... Которая секретна
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066088
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
asv79
пропущено...

не могу я сюда никакие ддл выкладывать сам понимаешь почему

Табла user и табла Рассылка из трех полей секретна?
Жжешь!))))

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

от вас да- то используй кешированый список ,то зачем дублировать состояние бд))
ладно закройте тему,тут толк есть только от Станислава реальный
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066092
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79,
Слив 4ой темы ТС.
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066094
asv79
Stanislav Bashkyrtsev
Если хочется просто закешировать пользователей, то можно обычную ConcurrentHashMap<Email, User> завести. И проверять там прежде чем делать insert или select. Вставлять в эту мапку всякий раз когда прошел удачный INSERT или не-null SELECT. Что-то такое:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
        ConcurrentMap<String, User> cache = new ConcurrentHashMap<>();
        ...
        if(!cache.containsKey(email)) {
            try {
                User user = new User();
                userDao.save(user);
                cache.put(email, user);
            }catch (ConstraintViolationException e) {
                //ignore
            }
        } 
        User user = cache.computeIfAbsent(email, () -> userDao.findById(email));
        ...


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

ну и ты сам выше сказал зачем дублировать состояние бд- я тоже думаю нет смысла в этом списке - надо в бд ходить ,ибо в спике уже запись имеется а в бд еще нет.
Дак в общем-то не важно, логика та же. Надо просто добавить try/catch для insert'a. У тебя изначально почти все готово было. Я правда не понял зачем ты вообще SELECT делаешь, если у тебя и так email есть.. Получается какой-то бесполезный
Код: java
1.
select email from USERS where email = ?



С Set'ом прийдется все равно много значений хранить. Если это недопустимо, то можно Bloom Filter использовать, но не знаю есть ли многопоточные реализации. Ибо если лочить весь фильтр, то все потоки в него и будут утыкаться постоянно.
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066096
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79проблема видимо в том ,что он быстрей работает чем бд и получается конфликт

1. Жесть и бред

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

2. И при чем тут БД ?

Блок
Код: java
1.
2.
3.
if (  ! somthing.containts( ... ) ) {
somthing.add( ... )
}



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

IMHO
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066097
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMHO

Миграция - сложное явление.
ETL - тут как бы попроще. В самом слове уже содержится 3 (ТРИ!) разных действия:

Extract
Transformation
Load (insert)

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

1. Вычитали данные из помойки, залили их в том виде, как они есть в нормальную СУБД
2. Дальше банальными SELECT'ами проанилизировали и преобразовали в нужный вид

Ну или если Java наше все и SELECT'ами не умеем и данных не много (помещаются в память).
1. Вычитали все данные в память/коллекции Java
2. for'ами, for'ами.... прошлись по коллекциям и подготовили новые "корректные" справочники в виде тех же коллекций
3. Пакетной вставкой все вставили в новую базу

IMHO
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066101
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
insert into таблица(поля)
values (значения)
where not exist (select null from таблица where условие)

?
Или это слишком банально и содержит мало объектных типов?
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066103
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov

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

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

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

может не помочь, при обычном Read committed )))
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066106
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
insert ... returning ...

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

P.S.
Многопоточная вставка это то, что не надо делать с базой.
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066107
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
ID шник пусть сам ставит. Простой счетчик.
Впрочем он DDL засекретил))
...
Рейтинг: 0 / 0
25 сообщений из 89, страница 2 из 4
Форумы / Java [игнор отключен] [закрыт для гостей] / Как избежать проблем )
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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