170 похожих чатов

Нужно сделать подгрузку через with у огромного кол-ва моделей, из-за

этого падаю с ошибкой General error: 1390 Prepared statement contains too many placeholder
Хочу переделать на join чтобы был один sql запрос а не whereIn с миллионами элементов в массиве. Но тогда все ломается, т.к. запрос сложный и везде нужно указывать префикс основной таблицы. Какие решения есть? Либо чтобы дать указание того чтобы не писать префикс в where а по дефолту использовать основную таблицу либо аналог with/join чтобы подгрузить большое количество связанных записей (аналог - есть 100к постов у каждого по 10 комментариев, надо подгрузить всё)

15 ответов

93 просмотра

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

Денис- Автор вопроса
Egor Gruzdev
что то не так у тебя с выборкой, зачем тебе тянуть...

а как определить проблему? Могу описать один из кейсов, есть импорт, в цикле поданного на вход элементу надо сопоставить элемент из базы, точнее связанный с ним (абстрактный пример - импорт постов, нужно проверить нет ли поста с определенным комментарием. Если уже есть, то взять его и актуализировать)

Денис
а как определить проблему? Могу описать один из ке...

whereIn() на 1кк возникает, т.к. выборка выбирает 1кк записей, а нужно ли это, почему проверку на существование не проверить через sql запрос, а не как сейчас все выбрал а потому по циклу попытка найти соответствие если без этого не как, то как минимум отказаться от жадной загрузки

Денис- Автор вопроса
Egor Gruzdev
whereIn() на 1кк возникает, т.к. выборка выбирает ...

Если sql запрос на каждой итерации - можно, но получается N+1, а если заранее то мы не знаем какое значение искать, оно ведь в импорте. Пришла еще идея, сделать chunk по 10к записей и каждую такую Eloquent/Collection делать load('comments') подгружать нужное и складывать в общую коллекцию. Будет что-то вроде +- 200 запросов на 1млн записей. Это все в конструкторе

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

Денис- Автор вопроса
Glyuk_Skovorodkin
по твоим абстрактным примерам, у тебя посты и коме...

В цикле? Ну это самое простое, да. Но это очень накладно по запросам, нужно оптимизировать. Если импорт на 1млн то это габелла по времени к сожалению

Денис
В цикле? Ну это самое простое, да. Но это очень на...

не стольк накладно как 1кк записаей дергать, 5 мелкиих запросов в 1000 раз быстрее твоего на 1кк

Денис
Если sql запрос на каждой итерации - можно, но пол...

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

Денис
В цикле? Ну это самое простое, да. Но это очень на...

оптимизация в перую очередь производится исключением ORM лары в запросах, на фасад ДБ сначала переносишь все тяжелые запросы, ток потом логику трогаешь

Денис- Автор вопроса
Egor Gruzdev
что значит лучше? у тебя на вход летят данные, ко...

Нет, это же в конструкторе и только один раз

Денис- Автор вопроса
Egor Gruzdev
что значит лучше? у тебя на вход летят данные, ко...

Делаю загрузку в конструкторе всех данных, потом в цикле просто по коллекции ищем нужное через связь

Денис
Нет, это же в конструкторе и только один раз

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

Денис- Автор вопроса
Glyuk_Skovorodkin
оптимизация в перую очередь производится исключени...

Вероятно да, видимо проще обычным DB найти значение, его post_uuid и потом достать модель, не знаю, надо замеры делать что лучше

Денис
Вероятно да, видимо проще обычным DB найти значени...

дело даже не столько в этом, сколько дернуть 1кк строк в виде массива из базы !== сбилдить 1кк объектов модели

Денис- Автор вопроса

Похожие вопросы

Обсуждают сегодня

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Коллеги, я тут для личных нужд пошел ставить MQTT сервер, пощупал mosquitto, но ужаснулся отсутствию такой банальности, как HTTP API для посмотреть список топиков. А тут что,...
Maksim Lapshin
13
#include <stdio.h> #include <stdlib.h> #include <time.h> void mass_first_generate(int mass[5][7]) {     for (int N = 0; N < 5; N++) {         for (int A = 0; A < 7; A++) {   ...
Чувак
6
Всем привет! Решаю 99 OCaml Problems и столкнулся со следующей проблемой (прошу палками не забивать, я OCaml практически не трогал до этого момента): open OUnit2 let create_...
К|/|pи/\/\ 6е3yглbIи
2
https://www.linkedin.com/posts/ugama-benedicta-kelechi-codergirl-103041300_mobiledevelopment-fluttertraining-handsonlearning-activity-7263445699227254784-IdHB?utm_source=share...
CoderGirl
16
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
Точно, оно. У тебя там имена потоков выставляются?
Александр (Rouse_) Багель
11
возможно ли как-то передать в электрон или таури медиа поток с рендера 2д движка? двиг запускается как dll, а дальше надо как-то отправлять рендер кодировать не подходит, зр...
Kyle Nekto
7
Помогите пожалуйста. Делаю систему плагинов. Проблема сейчас в такая: плагины загружаются в основном потоке. FLibHandle := SafeLoadLibrary(FFileName) Но нужно еще выполнить фу...
Илья 🤣
10
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
Карта сайта