Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Экзотический батчинг запросов

CUSTIS
April 05, 2019

Экзотический батчинг запросов

Выступление Максима Зинченко, нашего разработчика-эксперта, на конференции JPoint (Москва, 5 апреля 2019).

CUSTIS

April 05, 2019
Tweet

More Decks by CUSTIS

Other Decks in Programming

Transcript

  1. Причины плохой производительности в пресейлах | Быстрая разработка. Код proof-of-concept

    часто остается единственным | Большинство участников привлекается ненадолго Перформанс или инсталляция? 3 16
  2. depSerializer = depSerializer(empByDep, …); depSerializer.apply(dep); Как это выглядит Function<Dep,Json> depSerializer(

    Function<Dep,Collection<Emp>> empByDep, Function<Dep,Collection<Pay>> payByDep, … ) {…} Сериализация узлов одного типа Получение подузлов High latency Кто-то инжектит методы Стартуем сериализацию 6 16
  3. Function<Dep,Json> depSerializer(…) { … emps = empByDep.apply(dep).stream() .map(empSerializer) … }

    Внутри сериализатора Получаем подузлы Сериализуем подузлы другим сериализатором 7 16
  4. Prefetch с эвристикой Предсказываем все значения аргументов Делаем один вызов

    Результат представляем как функцию Больше ничего не меняем 10 16
  5. Function<Dep,Collection<Emp>> empByDep = withPrefetch(()→ empService.findBySomeScope(…)); Как это выглядит в коде

    Интерфейс сохраняется depSerializer = depSerializer(empByDep, …); depSerializer.apply(dep); Вызов ленивый Предсказание Приводим к нужному виду Не изменился ни сериализатор, ни его использование 12 16
  6. Предсказание аргументов | Ни в одном месте стека не известен

    полный скоуп | Для произвольного графа сделать предсказание невозможно | Нет предсказания ⇒ нет prefetch 13 16