Skip to content

Proposal: Ratios-preserving deduplication #22

Description

@elephantum

Проблема

Текущая реализация дедупликации контента фида приводит к тому, что оригинальные требования (соотношение субфидов, фиксированные места позиционного мержера) могут не выполняться.

Почему так?

Текущая архитектура взаимодействия субфидов и мержеров - жадная (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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions