Нужно максимально оптимизировать запрос по времени выполнения, условия следующие: - Есть здоровенная коллекция (может достигать и 5к+ объектов, но в основном где-то ~500-1000) с маленькими объектами (айди + 6 стринг полей). - Есть метод, который рекурсивно проходится по коллекции стримом stream().filter() и фильтрует для каждой итерации нужные документы (это где-то от 5 до 20 документов за итерацию) из всей этой здоровенной коллекции. Всего около 8ми итераций. В конце работы метода выходит 100+ объектов, которые более никогда не будут использоваться.
Вопрос: будет ли пизже после каждого прогона метода удалять все более не нужные объекты из коллекции? Мои размышления: Чисто логически - т.к. коллекция становиться меньше, все операции над ней становятся быстрей. Но само удаление этого мусора это сама по себе тяжёлая опреация будет, особенно на первых итерациях.
Было бы найс, если кто поделится опытом оптимизации больших залуп. Мб особые коллекции для больших объёмов использовать, etc. Мб вы можете поделиться какими-то микрофишечками?
Теперь тут тред Конохи. Двач, оправдывайся как вы проебали видос минета некогда королевы двача? Всего 60$ стоил. Разве тяжело было столько всем двачем насобирать? А теперь уже и не купить наверное. Ныне только свиней постить можете, думерско-бумерско-зумерские дегенераты.
>>250365641 (OP) Нихуя не понял, но помоему ты делаешь какую-то залупу. Если ты юзаешь стримы то у тебя на выходе уже должны быть только необходимые данные. Если ты после каждого пука сохраняешь в коллекцию то ты задрачиваешь хип мусорными объектами, которые через 10 наносекунд уже не понадобятся.
>>250365641 (OP) >здоровенная коллекция >5к+ объектов уебище-трейни залетел на проект >рекурсивно проходится по коллекции стримом тупое-уебище-трейни >В конце работы метода выходит 100+ объектов, которые более никогда не будут использоваться. на кой хуй тогда ты выборку их делаешь? >само удаление этого мусора гугли про IDX индекс, уебан. И не задавай тупорылых вопросов
>>250366539 Чет глаза вытекли. Вне контекста хуй пойми чего ты достичь пытаешься. Иф в 1 строку это пиздец. parentFolder.getType() - потенциальный нульпоинтер. Подозреваю это можно все рефакторнуть в 1 -2 стрима максимум, но изначальная архитектура и решение похоже говно. Давай с sql запроса пойдем. Откуда ты свой сет берешь?
>>250366997 В общем по логике задачи: Есть папка корневая, надо рекурсивно пройтись. Т.к. у папки единственное поле указывающее на родителя это parentId. Потом надо сгруппировать по типу документа, и вернуть пары Родительская папка -> детишки, сгруппированные по folderType.
Одним из агрументов есть folderList - в ней может быть дохуя объектов. Все сгруппированные папочки добавляются в треш. Вопрос: стоит ли удалять эти треш объекты из folderList, учитывая то, что нигде дальше эти треш объекты использоваться не будут.
>>250367948 >>250368102 Дополню. Тебе не надо ВСЕ AllByUserId. Тебе явно нужен только конкретный parentFolderId по которому ты фильтруешь свое говно. Сделай запрос нормальный. Ты бы наверное с нашими объемами по 200+кк строк в БД ахуел.
>>250368223 Я чуть выше отписал, что пишу большой апдейт скрипт, ёпту. Нужны именно все папочки для всех юзеров обновить. Поэтому и достаю все для юзера.
>>250366539 Сконвертируй коллекцтю в Map где ключ ID парента, а значение список детей. Лучше циклом, там можно сразу и корень найти. Если нужно просто дерево построить, то в качестве значения можно ноду со списком детей держать.
>>250368689 Хотя бы гет на пут в мапу перепиши если он там должен быть. На нуль проверок добавь даже если уверен. Алгоритм явно не оптимален. Так сложно без понимания кейса, но если такая лапша пошла явно что то не так. Попахивает графами если честно, каким нибудь вариантом поиска в глубину. Если еще папка может содержать папку и т д в глубь это точно оно.
>>250369123 Да хуй знает у меня ничего нет больше. Я сижу переписываю кор легаси приложения чтобы потоки нормально стартовали и с контекстом спринга воюю параллельно.
>>250369044 В этом и прикол, нужно по файловой системе ездить, найти 3 вида папок, сгруппировать, а потом им некоторые свойства добавить и сохранить. А что можно по графам заюзать? Ты имеешь в виду библиотеки какие-то?
>>250365641 (OP) Пагинация, параллельные стримы, изменение порядка фильтров, начиная с тех, которые убирают больше всего объектов. Алсо, 5к это совсем немного. >будет ли пизже после каждого прогона метода удалять все более не нужные объекты из коллекции? Не будет, по идее после каждого фильтра уже отфильтрованная коллекция идет на следующий, но это нужно уточнить. Если к тому же у тебя всё льется в БД, то вообще пиздец будет с удалениями.
>>250366539 Мб вместо циклов внизу можно через flatten линеаризовать коллекцию, чтоб не париться с рекурсиями, и тогда всё в один вызов stream уложится. Рекурсия тут опасна тем, что если у тебя в графе ВДРУГ возникнет цикл, будет очень больно. А для обнаружения циклов всё равно придется линеаризовать. https://www.baeldung.com/java-flatten-nested-collections
>>250370241 Да я понимаю, что 5к совсем немного. У меня просто в сумме 500к папок, у каждого юзера от 500 до 5к+. Я для каждого юзера думал делать отдельный запрос шоб только его папочки обновлять, а не с 500к сразу. Вообще алгоритм простой: беру всех юзеров, для каждого группирую папки по критерию и сохраняю А вопрос лишь в том, как саму группировку ускорить. Один из прошлых апдейт скриптов не мой 9 часов работал с этими папками ебучими
>>250370452 Удаление не из бд, а из кеша папок с которым работаем. Псевдокодом бля напишу: for (user : usersList) { allFolders = getFoldersForUser() - тут их 5к + может быть folders = filterRootFolders() for (folder : folders) { Map<BatyaFolder, List<ChildFolder>> = FolderUtils.groupFoldersByCriteria() - внутри группировки удаляем ненужные папки из allFolders, т.к. они уже сгруппированы и больше не будут участвовать нигде } }
>>250370452 Если у него 8 фильтров, то получается 8 запросов на удаление, когда можно обойтись одним в конце, нахуа? >>250370575 >Я для каждого юзера думал делать отдельный запрос шоб только его папочки обновлять, а не с 500к сразу. Ну либо так, либо пагинация. >9 часов работал с этими папками ебучими Это ж немного, если одноразово. У меня БД рабочая наливалась в виртуалку почти сутки, кек.
>>250370682 Это мы ожидаем, но в общем случае мы не можем гарантировать выполнение этого контракта внешним кодом. Если где-то косячные данные (вдруг), то у него всё зависнет.
>>250371171 От миддла до синьора по идее несложно, разницы в требованиях особой и нет, как спрашивали про хешмапы на собеседованиях, так и спрашивают, лол. Просто больше БАЗЗВОРДОВ в резюме и лычек с прошлой работы. Я б даже сказал, на крайней работе проще было, чем на прошлых, где приходилось и алгоритмы, и во фронт вкатиться, а тут просто рест-контроллеры и сервисы высирал по шаблону и всё Да хуй там отдохнешь, с кибергулагом этим ебаным в депру впал и не хочется уже нихуя, никакого светлого будущего, чтобы ради него работать.
>>250371171 >>250371124 Аноны, расскажите мне молодому, как вам работается? Не заёбует? На удалёночке хоть? Я-то всего 9 месяцев работаю, пока всё нравится. Учитывая, что вы ещё джависты вдвойне интересно.
>>250371469 Рано или поздно может заебать всё. На удаленке заебись, сам себе господин, свободного времени много (можно справиться с работой за 2-3 часа и гуляй вася, или вообще хуй забить, если сегодня настроения нет). Минус удаленки в том, что нет поводов выходить из дома и можно заплесневеть и прирасти к стулу и забить на социализацию, спорт, хобби и развлечения, как я сейчас, если специально не вытаскивать себя наружу.
>>250371814 Всё самое обычное, жаба ЕЕ, WS RS, спринг, гибернейт, сваггер, мавен\грэдл. Кафка и AWS тоже была, но я даже хз, стоит ли включать в резюме, че там, АПИ из либы дернул двумя строками, сообщение пнул, вот и вся кафка, лол. На одной из работал реакт был, где-то еще че-то, если всё перечислять, то дохуя можно набрать, но я как-то хз, добавлять ли то, что на уровне "юзал, но не разбираюсь"
>>250372214 А с многопоточностью много проектов повидал? Мне свои челики рассказывали, что все должны знать что это, но только 5% челов вообще юзают это где-то. И я сейчас не просто про paralelStream говорю
>>250372410 Ни одного, лол. Максимум экзекутор запустить или вот параллельный стрим, а так всем спринг и так рулит. Но да, на собесах иногда спрашивают зачем-то.
>>250372588 >>250372587 А с тестами у тебя как? У меня команда маленькая, пришёл я не с нуля на проект. Тестами тут и не пахнет чисто. В одном из бугурт тредов нашёл очень хорошо описывающую мой проект пасту
>хуярят трёхмесячные лендинги с анимациями и 10 роутовые круды, не пишут тесты, выкидывают проекты дальше, иногда берут в поддержку адовое гавно от других атусорсеров и аккуратно перекрашивают кнопки боясь сломать уже работающую хероту. На запрос про рефакторинг, переход на микросервисы или просто нормальную реализацию фичи получают от прожекта «не ну ребят вы все правильно говорите, но ЗОКАЗЧИК сказал сами понимаете, надо просто булочки напрячь и доставить эти фичи сейчас, потом получим полный контракт и сможем все переделать».
>>250372587 Вот да, я вообще слабо представляю, где сейчас прям нужно вручную пердолить потоки, кроме игр и какой-то системщины, но это уже не про джаву какбе. Джава это веб, а веб это фреймворки и дрочение рест-контроллеров, перекладывающих данные из запросов в БД за 300кк\нс.
>>250372793 >У меня команда маленькая, пришёл я не с нуля на проект. Тестами тут и не пахнет чисто Когда пришел джуном на первое место, я там как раз ввел тесты, кек. А так, стараемся делать, но прямо жесткого ТДД и ДДД нигде не было, больше по личной инициативе.
>>250372793 Если заказчик платит за тесты - то будут тесты, а так стараюсь говнецо обложить, но без фанатизма, код среднего по больнице проекта живет полгода отсилы.
>>250373070 Тогда сам(а) понимаешь что тестов толком там не будет уже, метриками и алертами обложим, админам инструкцию напишем куда ткнуть абы что и айда на след спринт
>>250373434 Последние несколько лет ровно этим и занимался. А синьорство заключалось в пердолинге легаси (подпаять к новому, выделить в микросервисы, исправить баги) и самостоятельном гуглении на стековерфлоу при возникновении каких-то неожиданностей, грубо говоря, что не ныл, а пытался сам решить проблемы и\или подсказывать команде, кек.
>>250373832 Да по сути, никак, кек. Ни курсов, ни книг. Выучил вопросы, сделал тестовое (алгоритмическое было, ответ тоже в инете нашелся), и вперед. На техническом собесе, пока отвечал за хешмапы и джоины, параллельно гладил попку своей тогдашней тян, заснувшей на фоне всей этой аутичной болтовни. Вот неплохой список вопросов, например: https://github.com/enhorse/java-interview/
>>250374259 Я именно по этому репозиторию к первому собесу подготовился и прошел с первого раза. А ты не менял место работы? Просто интересно чем мидл/сеньёр собес отличается от джунов? Прям так же с хэшмапом пердолинг на всех уровнях?
>>250365641 (OP) Блядь, пока ты не покажешь исходники своих объектов и действий над ними, иди просто соси хуй.
Ты, блядь, на своем родном языке не можешь сформулировать, что у тебя есть, и что тебе надо. Ща мы начнем думать, как тебе помочь. В школу сперва сходи.
>>250374476 >А ты не менял место работы? Просто интересно чем мидл/сеньёр собес отличается от джунов? Менял, я по сути три и сменил. Джун, миддл, синьор, последовательно. А собес, я даже хуй знает, уже плохо помню, но будто бы чем дальше, тем проще. Типа на джуна был самый сложный, там во время интервью задачки на алгоритмы и логику решал и т.п. (хотя это был Яндекс, кек). На синьора вопросы про хешмапы и джоины точно были.
>>250370660 У меня есть. Но вы, пидорасы, проебали возможность купить фулл вот того видео >>250369121, даже превьюха в говнокачестве у вас. Фу, хуесосы, ни на что неспособные, недолегион.