Добавить в корзинуПозвонить
Найти в Дзене

Почему dataloader это не «дата-лоадер» // Байки ИТ-редактора

Как-то раз я получил от переводчика такое предложение из ИТ-книги: В этом блоге (https://...) описано решение проблемы 1 + n с использованием дата-лоадеров. Слово «дата-лоадер» аж резануло глаз — слишком уж чужеродно. Было ощущение, что переводчик его не понял, но на всякий случай транскрибировал и пошел дальше. Иду в оригинал: A solution of the 1 + n problem using dataloaders is described in this blog (https://...). Так-то вроде все сходится, не раз такое бывало, когда видишь незнакомый термин, он тебе кажется чужеродным, ты начинаешь править до тех пор, пока потом не выясняется, что ты динозавр, у тебя дыра в знаниях и сейчас уже все так переводят. И все же я решил перестраховаться, чтобы потом перед издателем не краснеть за переводчика. Итак, разберемся. Ключ к решению — упоминание «проблемы 1+n». Представьте, что вы — официант в ресторане. К вам за столик сели пять гостей, и каждый заказал по одному блюду. «Наивный» или новичковый подход (он же «проблема 1+n») — это когда вы сн

Как-то раз я получил от переводчика такое предложение из ИТ-книги:

В этом блоге (https://...) описано решение проблемы 1 + n с использованием дата-лоадеров.

Слово «дата-лоадер» аж резануло глаз — слишком уж чужеродно. Было ощущение, что переводчик его не понял, но на всякий случай транскрибировал и пошел дальше. Иду в оригинал:

A solution of the 1 + n problem using dataloaders is described in this blog (https://...).

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

Итак, разберемся.

Ключ к решению — упоминание «проблемы 1+n». Представьте, что вы — официант в ресторане. К вам за столик сели пять гостей, и каждый заказал по одному блюду.

«Наивный» или новичковый подход (он же «проблема 1+n») — это когда вы сначала принимаете заказ у первого гостя, бежите на кухню, отдаете его повару. Потом возвращаетесь ко второму, принимаете заказ, снова бежите на кухню. И так пять раз. Вы совершаете 1 действие (подошли к столику) и еще «n» действий (5 пробежек на кухню). Кухня недовольна, вы устали, гости на взводе.

Тем не менее, именно так и работают приложения без оптимизации: чтобы получить данные о 5 объектах, они делают 5 отдельных запросов к базе данных, перегружая ее.

А теперь представьте умного официанта. Он обойдет всех пятерых гостей, запишет все заказы в один блокнот и отнесет на кухню один-единственный раз. Э — эффективность!

Так вот, DataLoader — это и есть тот самый «умный официант» в мире программирования. Это не программа, а архитектурный шаблон (паттерн), то есть общепринятый способ решения задачи. Его главная задача — бороться с проблемой «1+n».

Как это работает?

  1. Группировка (Batching). Он накапливает все запросы, которые приходят почти одновременно, собирает их в одну «пачку» и отправляет в базу данных за один раз. Так получаем вместо пяти походов на кухню — один.
  2. Кэширование (Caching). Если двое гостей за столиком заказали одинаковое блюдо, умный официант не будет записывать его дважды. Он просто поставит галочку «x2». Так же и DataLoader: если в рамках одного сложного запроса данные (например, профиль одного и того же пользователя) требуются в нескольких местах, он загрузит их только один раз, а для остальных запросов возьмет из своей кратковременной памяти.
-2

Тут нужно понимать, что data loader (любой «загрузчик данных») и DataLoader (конкретный паттерн) — это не одно и то же. В IT есть сотни разных data loader-ов. А DataLoader — это имя собственное для конкретного архитектурного шаблона, решающего конкретную проблему. Назвав его просто «загрузчиком данных», мы бы стерли важную техническую деталь и заставили бы читателя-разработчика гадать, о чем именно идет речь.

Ок, возможно, скажете вы. DataLoader — это паттерн. А есть программы с таким названием? Или это просто идея? Я бы предложил для удобства понимания, считать его «рецептом», как «Наполеон» — в одних случаях это человек, в других торт, но в обоих случаях с большой буквы.

Отмечу и еще один нюанс — в JavaScript есть библиотека dataloader, которая реализует паттерн DataLoader. Вот она пишется с маленькой буквы (напишете с большой — программа выбросит ошибку). Но тут не тот случай, потому что книжка не про JavaScript.

Учитывая все вышеизложенное, я пришел к такому переводческому решению:

В этом блоге (https://...) описано решение проблемы 1 + n с использованием паттерна DataLoader.

И пусть в оригинале было написано со строчной буквы, упоминание «проблемы 1+n» — это железный признак того, что автор говорил именно о паттерне.

Спасибо за внимание. Надеюсь было познавательно.

P.S. При подготовке заметки я использовал эти статьи: