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

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

Но вот когда ты сталкиваешься с многопоточкой - то получается полная печаль
сделал коллекцию
Код: java
1.
oncurrentSkipListSet<String> concurrentSkipListSet


но все равно получается не то ,что хочется
сам метод выглядит так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
  if (list.get(0) instanceof List) {
      for (Object mail : list) {
        if (((String) ((List) mail).get(0)).isBlank()) continue;
        EMailingEmail email = new EMailingEmail();
//          var email =eMailingMailRepository.findByEmail((String) ((List) mail).get(0));
        if (concurrentSkipListSet.contains((String) ((List) mail).get(0))) {
          email = eMailingMailRepository.findByEmail((String) ((List) mail).get(0));
        } else {
          email.setEmail((String) ((List) mail).get(0));
          email.setName((String) ((List) mail).get(1));
          email.setUserId(idsMap.get(doc.getString("uid")));

          concurrentSkipListSet.add((String) ((List) mail).get(0));
          eMailingMailRepository.save(email);
        }

        if (mailList.contains(email.getEmail())) continue;
        mailList.add(email.getEmail());



и получаю NullPointer в строчке if (mailList.contains(email.getEmail())) continue;
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40065988
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot asv79#22314517]
Код: java
1.
2.
3.
        if (concurrentSkipListSet.contains((String) ((List) mail).get(0))) {
          email = eMailingMailRepository.findByEmail((String) ((List) mail).get(0));
      




я так понимаю что проблема вот тут - в коллекци этот емайл уже есть,но записаться в бд не успело? и получается объекту присваивается null
при дебаге в переменных email == null
но если сделать evaluate expression этой строчки eMailingMailRepository.findByEmail((String) ((List) mail).get(0)) будет найдено значение

может туда thread.sleep на 10-20 милисекунд или не в этом дело?
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40065991
Очень много кастов, сложно понимать что тут происходит.. Еще и закомментирована строка. Было бы здорово показывать тут чистый код, без лишнего.

Если бросается NPE, то либо email null, либо mailList. Видимо здесь null возвращается:
Код: java
1.
          email = eMailingMailRepository.findByEmail((String) ((List) mail).get(0));

Т.е. в concurrentSkipListSet элемент есть, а в базе уже нет. Добавь еще проверку на null.

А в целом - оправдано ли то, что ты дублируешь БД состояние в памяти?
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40065994
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эх Стас, закидать бы тебя какашками, как ты сам любишь ;) - 6 использований ((List) mail).get(0)) в одном единственном кусочке кода. Про Introduce variable слыхал ;) ?
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40065995
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79,

>есть сущность в которой одно из полей сделано уникальным
= по русски это айди ID?
Констрейнт?
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40065997
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
Очень много кастов, сложно понимать что тут происходит.. Еще и закомментирована строка. Было бы здорово показывать тут чистый код, без лишнего.

Если бросается NPE, то либо email null, либо mailList. Видимо здесь null возвращается:
Код: java
1.
          email = eMailingMailRepository.findByEmail((String) ((List) mail).get(0));

Т.е. в concurrentSkipListSet элемент есть, а в базе уже нет. Добавь еще проверку на null.

А в целом - оправдано ли то, что ты дублируешь БД состояние в памяти?
\
тут ситуация иная в коллекции элемент уже есть,а в бд в тот момент времени его еще нет
получается в случае если в бд у нас лежит такой емайл я прохожу по условию - делаю выборку из бд и ничего там не вижу

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

>есть сущность в которой одно из полей сделано уникальным
= по русски это айди ID?
Констрейнт?

если бы ID ,это наименование почтового ящика- unique constraint
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066001
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha
Эх Стас, закидать бы тебя какашками, как ты сам любишь ;) - 6 использований ((List) mail).get(0)) в одном единственном кусочке кода. Про Introduce variable слыхал ;) ?

зато работает быстро - если ввести переменную -замедляется процесс ,так как все это в цикле ,в котром будет куча мусора из под этих временных объектов - я проверял с переменными и без - на 15 к записей я почти 3 минуты проигрываю .
Это касается лишь списков ,видимо в силу того что при присвоении значения списку идет дорогое копирование- которое замедляет процесс
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066004
Как бы ты не пытался обойти проблему со списками - все равно будет вероятность что два INSERT'а пойдут одновременно. Как правило все делают SELECT, а потом INSERT. Но между этими двумя запросами может еще многое произойти. И всегда есть вероятность ошибки. Обычно все забивают.

В нативном SQL некоторые СУБД поддерживают insert ignore. Вставит только если такой записи нет. Но с ORM'ом прийдется все-таки ожидать иногда ConstraintViolationException. Правда после этого еще желательно Session/EntityManager закрыть или хотя бы очистить..
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066005
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
убрал касты для наглядности
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
  if (list.get(0) instanceof List) {
      for (Object mail : list) {
        if ( mail.get(0).isBlank()) continue;
        EMailingEmail email = new EMailingEmail();
//          var email =eMailingMailRepository.findByEmail(mail.get(0));
        if (concurrentSkipListSet.contains(mail.get(0)) {
          email = eMailingMailRepository.findByEmail( mail.get(0));
        } else {
          email.setEmail((String) (mail.get(0));
          email.setName((String) (mail.get(1));
          email.setUserId(idsMap.get(doc.getString("uid")));

          concurrentSkipListSet.add(mail.get(0));
          eMailingMailRepository.save(email);
        }

        if (mailList.contains(email.getEmail())) continue;
        mailList.add(email.getEmail());
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066009
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
Как бы ты не пытался обойти проблему со списками - все равно будет вероятность что два INSERT'а пойдут одновременно. Как правило все делают SELECT, а потом INSERT. Но между этими двумя запросами может еще многое произойти. И всегда есть вероятность ошибки. Обычно все забивают.

В нативном SQL некоторые СУБД поддерживают insert ignore. Вставит только если такой записи нет. Но с ORM'ом прийдется все-таки ожидать иногда ConstraintViolationException.

так и что делать - выпиливать эту коллекйию и делать запрос в бд на предмент наличия такой записи- если какой то поток обогнал и записал в это время это значение- второй поток получит эксепшн - и не сможет дальше с этим емайл рабоать- вот этого бы очень не хотелось - хотелость бы отловить ConstraintViolationException но при этом все равно выудить этот емайл и продолжить с ним работу
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066010
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
Как бы ты не пытался обойти проблему со списками - все равно будет вероятность что два INSERT'а пойдут одновременно. Как правило все делают SELECT, а потом INSERT. Но между этими двумя запросами может еще многое произойти. И всегда есть вероятность ошибки. Обычно все забивают.

В нативном SQL некоторые СУБД поддерживают insert ignore. Вставит только если такой записи нет. Но с ORM'ом прийдется все-таки ожидать иногда ConstraintViolationException. Правда после этого еще желательно Session/EntityManager закрыть или хотя бы очистить..

Я вообще не очень понимаю, чем могут помочь какие-то списки/мапы и прочее....

Если программа многопотоковая ))), то рано или поздно ее могут захотеть запустить на другом компьютере/ноде и так далее. И все списки/мапы и прочее - пойдут лесом и велосипед полностью оквадроколесится

Насчет SELECT так же не понял. SELECT FOR UPDATE - для отсутвующей записи сделать вроде не получится, а делать просто SELECT для проверки и на что-то расчитывать - то как-то ну больно наивно. IMHO единственный нормальный РСУБД вариант INSERT + проверка exception'а.

p.s. Проблему автора не понял. Ну собрал велосипед с квадратными колесами - какой смысл спрашивать, что ездить не удобно?
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066013
asv79
Stanislav Bashkyrtsev
Как бы ты не пытался обойти проблему со списками - все равно будет вероятность что два INSERT'а пойдут одновременно. Как правило все делают SELECT, а потом INSERT. Но между этими двумя запросами может еще многое произойти. И всегда есть вероятность ошибки. Обычно все забивают.

В нативном SQL некоторые СУБД поддерживают insert ignore. Вставит только если такой записи нет. Но с ORM'ом прийдется все-таки ожидать иногда ConstraintViolationException.

так и что делать - выпиливать эту коллекйию и делать запрос в бд на предмент наличия такой записи- если какой то поток обогнал и записал в это время это значение- второй поток получит эксепшн - и не сможет дальше с этим емайл рабоать- вот этого бы очень не хотелось - хотелость бы отловить ConstraintViolationException но при этом все равно выудить этот емайл и продолжить с ним работу
Отлавливай исключение, а затем по этому email'у делай снова SELECT в БД. Т.е. теперь-то он точно уже там есть.

Еще вопрос - я верно понимаю что это какой-то ETL процесс? Нельзя ли сделать разделение задач по потокам такое, чтоб одни и те же пользователи не создавались в разных потоках?
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066015
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
Отлавливай исключение, а затем по этому email'у делай снова SELECT в БД. Т.е. теперь-то он точно уже там есть.

Еще вопрос - я верно понимаю что это какой-то ETL процесс? Нельзя ли сделать разделение задач по потокам такое, чтоб одни и те же пользователи не создавались в разных потоках?

Спасиб за совет ,сейча попробую ,но это видимо затормозит процесс процентов на 30,что печально очень.

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

...это миграция списка рассылок- тоесть у одного клиента вася@mai.ru
и у другого может быть такой же ящик в списке

Если из реляционной субд в реляционную - то вообще не понятно, нафига нужна Java и многопоток.
Смигрировать сначала справочники, потом смигрировать основную таблицу

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

Я вообще не очень понимаю, чем могут помочь какие-то списки/мапы и прочее....

Если программа многопотоковая ))), то рано или поздно ее могут захотеть запустить на другом компьютере/ноде и так далее. И все списки/мапы и прочее - пойдут лесом и велосипед полностью оквадроколесится
p.s. Проблему автора не понял. Ну собрал велосипед с квадратными колесами - какой смысл спрашивать, что ездить не удобно?

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

...это миграция списка рассылок- тоесть у одного клиента вася@mai.ru
и у другого может быть такой же ящик в списке

Если из реляционной субд в реляционную - то вообще не понятно, нафига нужна Java и многопоток.
Смигрировать сначала справочники, потом смигрировать основную таблицу

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

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

Проблема начинается в самом начале, в непонятной постановке

Если в сущности более одного поля и уникальное поле не является PK в исходной системе - то в общем случае, никто не может гарантировать, что одному и тому же e-mail'у будут соответствовать одни и те же данные в других полях

Можно, конечно, разрабатывать программы по методу "первое попавшееся", но потом готовьтесь к ошибка "первое попавшееся не попало" ( C )

Если в исходной системе это PK - то проблемы нет. Сначала мигрируем справочник, потом таблицы ссылающиеся на данный справочник
Если в исходной системе это не PK - то должны быть критерии, как должно быть выполнено объединение в случае противоречивых данных

В крайнем случае, на момент переноса можно данные положить в "плоскую" таблицу , а потом уже из нее с помощью команды SELECT DISTINCT нарезать справочники и смотреть коллизии.

IMHO & AFAIK
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066035
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выключить констрейнты и ключи. Всосать данные. Потом провалидировать.
Так решают без ОРМ и... потоков)))
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066036
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
asv79,
Какая миграция если данные не валидные.

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

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

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

а что это даст? дубляж может быть и в начале и в конце и в середине
для понимания это большая монго колеккия где то 4 млн записей ,каждая запись содержит от 1 до 30 к ящиков- ящики должны быть уникальны в постгрес ,но в монго нет .
получается что 8 потоков к примеру начинают бррать эти записи и писать их в бд,и тут хоть с начала хоть с конца ,хоть снизу или сверху - потоки будут писать дубляж- так как сам понимаешь такого количества уникальных ящиков нет в нашей стране,а записи есть)
там процентов 40% наверно дубликаты
...
Рейтинг: 0 / 0
Как избежать проблем )
    #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
Как избежать проблем )
    #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
Как избежать проблем )
    #40066325
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Для больших объемов в PostgreSQL есть команда COPY, на порядки быстрее INSERT'ов.

AFAIK
да.
Он просто не врубается, что в бд можно залить вообще без PK так как его нет в источнике данных!
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066363
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Leonid Kudryavtsev
Для больших объемов в PostgreSQL есть команда COPY, на порядки быстрее INSERT'ов.

AFAIK
да.
Он просто не врубается, что в бд можно залить вообще без PK так как его нет в источнике данных!

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

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

чему обучать - ты не знаешь вообще ничего - везде во всех темах тебя посылают на три буквы)))
учитель нашелся )
уж кто из нас джун - так это ты )
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066377
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79,
А чего тогда слился уже 4ую тему про бд?
Тяжело задачу обрисовать?
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066380
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79,
Третья твоя тема 22310872
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066383
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТС,
Если не будешь _давать_ когда попросят код\логи/стек\DDL, то останешься вечной нецелованной девочкой до старости" (с)
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066387
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev

...
Может проверишь? Я вот проверил.

Да, был не прав.

INSERT при вставке в уникальный индекс блокирует запись. Блокировка будет висеть до тех пор, пока первый вставивший не сделает commit и только тогда придет exception.
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066394
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообщем сделал через паралельные стримы задачу)
пошел путем декомпозиции сначала разбил монго на группы - группы на юзеров и далее уже миграция по каждому юзеру отдельно
это позволило мне вместо MongoCursor затягивать в память кусками данные из монго в виде списка и не уйти в ООМ
далее на откуп паралельному стриму
нигде нет конфликтов по записи- причем что я убрал все блоки трай кетч
работает достаточно быстро ,даже быстрей чем я ожидал

так что пока петро тут зубоскалил я таску закрыл)
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066396
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
ТС,
Если не будешь _давать_ когда попросят код\логи/стек\DDL, то останешься вечной нецелованной девочкой до старости" (с)

я ж те сказал уже по этому поводу - нельзя ,я под подпиской - не имею права ничего никуда выкладывать,поэтому извините
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066474
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79
PetroNotC Sharp
ТС,
Если не будешь _давать_ когда попросят код\логи/стек\DDL, то останешься вечной нецелованной девочкой до старости" (с)

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

1) ну тут от тебя не всю структуру БД просят, а 2-3 связанные таблицы
2) Можно переименовать поля и таблицы + убрать поля, которые не затрагиваются в рамках того, что ты делаешь
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066480
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch,
Разумеется. Я ему выше предложил два потока навстречу.
Понятно, если есть сущности, то можно навстречу по сущностям идти. Или параллельно.
Как был он джуном, так и останется.
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40066481
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79
я ж те сказал уже по этому поводу - нельзя ,я под подпиской - не имею права ничего никуда выкладывать,поэтому извините
Нет, не извиним.
Если уж вы обсуждаете рабочие проблемы на публичном форуме, то будьте добры прикладывать минимально воспроизводимые примеры.
Не имеете права копипастить - постирайте пальчики о клавиши и набейте "такое же, но без перламутровых пуговиц".
...
Рейтинг: 0 / 0
Как избежать проблем )
    #40067001
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
asv79
я ж те сказал уже по этому поводу - нельзя ,я под подпиской - не имею права ничего никуда выкладывать,поэтому извините
Нет, не извиним.
Если уж вы обсуждаете рабочие проблемы на публичном форуме, то будьте добры прикладывать минимально воспроизводимые примеры.
Не имеете права копипастить - постирайте пальчики о клавиши и набейте "такое же, но без перламутровых пуговиц".

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


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