@akdes

Как оптимизировать скорость свезей бд в laravel?

Всем привет
при концепции дб, была предусмотрена таблица "атрибутов", т.е. некоторые таблицы имеют с ней n:m связь.
К примеру Сustomer с данными, имя, время регистрации, номер счёта и т.д. и т.п., раскиданы на таблицу customer {id, created_at, updated_at}

attributes{name,value}:
name: name, value: Alexander
name: register_time, value: 2018-01-23 12:30:29
name: xy, value: 123...
Насколько это было умно или нет, прошу оставить, система стоит и работает в продакшене.
Сейчас если я подгружаю всех клиентов, имеется проблема загрузки по времени,
в связи с подгрузкой атрибутов. Т.е. помимо подгрузки атрибутов, я их подгружаю в сам объект Customer:
т.е. из Customer { id, attributes {...}} собирается customer {id, name, register_time,...}
Для этого написал функцию в php, насколько я понял, в ларе join'a на этом уровне нет, или?

Как вариант "Quick Win" думал писать имя клиента в Customer-Table, ибо оно мне нужно всегда, остально подгружать по надобности доп. запросом. Есть ли более умное,быстрое и логичное решение?

Спасибо
  • Вопрос задан
  • 151 просмотр
Решения вопроса 1
  • @akdes
    Такс, решение найдено, точнее проблема.

    Менее важно в данной проблеме, но факт: join работает быстрее чем жадная загрузка и т.д., не намного но быстрее.
    Проблема в другом, если берётся объект из модели, затем мутируется и отдаётся через
    return $object; //или 
    return response()->json($object);

    то именно return длится в моём случае на локалке 20, дополнительных, секунд, т.е. видать т.к. изначальный, знакомый объект "испорчен" доп. данными, при переводе данных в json происходит магия, стоимость n-Секунд.

    Решение:
    перевод объекта сразу в массив и затем манипуляция.
    $myArray = $customer->get()->toArray(); 
    $myArray = $this->doStuff($myArray);
    return $myArray;

    Может быть решение очевидно, я таких граблей не ожидал.
    Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы