-
Notifications
You must be signed in to change notification settings - Fork 0
Description
Проблема
Текущая реализация дедупликации контента фида приводит к тому, что оригинальные требования (соотношение субфидов, фиксированные места позиционного мержера) могут не выполняться.
Почему так?
Текущая архитектура взаимодействия субфидов и мержеров - жадная (eager), то есть пытается материализовать результаты сразу же, на каждом узле выполнения. Это самая простая для реализации модель, но она конфликтует с идеей дедупликации и приводит к оригинальной проблеме.
Как починить?
Хорошим решением будет переход от однопроходного метода к двухпроходному:
1-й проход: формирование фида в терминах плейсхолдеров конечных субфидов, но без материализации конкретных объектов.
2-й проход: заполнение плейсхолдеров с одновременной дедупликацией.
Пример
Пусть будет два субфида: A = [1, 2, 3, 4, 5, 6, ...] и B = [1, 3, 5, 7, 9, ...], которые должны быть перемешаны 50/50 с дедупликацией.
1-й проход формирует ленту плейсхолдеров [A, B, A, B, A, B, ...]
2-й проход берет итераторы по каждому субфиду и ленту плейсхолдеров и материализует финальную ленту с одновременной дедупликацией
- A: 1
- B (пропуск 1): 3
- A: 2
- B: 5
- A (пропуск 3): 4
- B: 7
- A (пропуск 5): 6
- ...
Реализация
Кажется, что ноды по поведению должны разделиться на eager (те, которые схлопывают плейсхолдеры в материализованную ленту) и lazy, которые составляют ленту из плейсхолдеров.
Корневая нода, сессия просмотра, и дедупликация - eager, остальные lazy.