Почему dataloader это не «дата-лоадер»
Как-то раз я получил от переводчика такое предложение из ИТ-книги:
В этом блоге (https://...) описано решение проблемы 1 + n с использованием дата-лоадеров.
Слово «дата-лоадер» аж резануло глаз — слишком уж чужеродно. Было ощущение, что переводчик его не понял, но на всякий случай транскрибировал и пошел дальше. Иду в оригинал:
A solution of the 1 + n problem using dataloaders is described in this blog (https://...).
Так-то вроде все сходится, не раз такое бывало, когда видишь незнакомый термин, он тебе кажется чужеродным, ты начинаешь править до тех пор, пока потом не выясняется, что ты динозавр, у тебя дыра в знаниях и сейчас уже все так переводят. И все же я решил перестраховаться, чтобы потом перед издателем не краснеть за переводчика.
🔑 КЛЮЧ К РЕШЕНИЮ: ПРОБЛЕМА «1 + N»
Ключ к правильному переводу — упоминание «проблемы 1+n».
Представьте, что вы — официант в ресторане. К вам за столик сели пять гостей, и каждый заказал по одному блюду.
- «Наивный» или новичковый подход (он же «проблема 1+n») — это когда вы сначала принимаете заказ у первого гостя, бежите на кухню, отдаете его повару. Потом возвращаетесь ко второму, принимаете заказ, снова бежите на кухню. И так пять раз. Вы совершаете 1 действие (подошли к столику) и еще «n» действий (5 пробежек на кухню). Кухня недовольна, вы устали, гости на взводе.
Тем не менее, именно так и работают приложения без оптимизации: чтобы получить данные о 5 объектах, они делают 5 отдельных запросов к базе данных, перегружая ее.
- А теперь представьте умного официанта. Он обойдет всех пятерых гостей, запишет все заказы в один блокнот и отнесет на кухню один-единственный раз. Э — эффективность!
⚙️ ЧТО ТАКОЕ DATALOADER НА САМОМ ДЕЛЕ
Так вот, DataLoader — это и есть тот самый «умный официант» в мире программирования. Это не программа, а архитектурный шаблон (паттерн), то есть общепринятый способ решения задачи. Его главная задача — бороться с проблемой «1+n».
Как это работает?
- Группировка (Batching). Он накапливает все запросы, которые приходят почти одновременно, собирает их в одну «пачку» и отправляет в базу данных за один раз. Так получаем вместо пяти походов на кухню — один.
- Кэширование (Caching). Если двое гостей за столиком заказали одинаковое блюдо, умный официант не будет записывать его дважды. Он просто поставит галочку «x2». Так же и
DataLoader: если в рамках одного сложного запроса данные (например, профиль одного и того же пользователя) требуются в нескольких местах, он загрузит их только один раз, а для остальных запросов возьмет из своей кратковременной памяти.
Тут нужно понимать, что data loader (любой «загрузчик данных») и DataLoader (конкретный паттерн) — это не одно и то же. В IT есть сотни разных data loader-ов. А DataLoader — это имя собственное для конкретного архитектурного шаблона, решающего конкретную проблему. Назвав его просто «загрузчиком данных», мы бы стерли важную техническую деталь и заставили бы читателя-разработчика гадать, о чем именно идет речь.
Ок, возможно, скажете вы. DataLoader — это паттерн. А есть программы с таким названием? Или это просто идея? Я бы предложил для удобства понимания, считать его «рецептом», как «Наполеон» — в одних случаях это человек, в других торт, но в обоих случаях с большой буквы.
Отмечу и еще один нюанс — в JavaScript есть библиотека dataloader, которая реализует паттерн DataLoader. Вот она пишется с маленькой буквы (напишете с большой — программа выбросит ошибку). Но тут не тот случай, потому что книжка не про JavaScript.
Учитывая все вышеизложенное, я пришел к такому переводческому решению:
«В этом блоге (https://...) описано решение проблемы 1 + n с использованием паттерна DataLoader».И пусть в оригинале было написано со строчной буквы, упоминание «проблемы 1+n» — это железный признак того, что автор говорил именно о паттерне.
Спасибо за внимание! Надеюсь было познавательно.