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

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

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for CUSTIS CUSTIS
April 05, 2019

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

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

Avatar for CUSTIS

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