Потерянные действия в Aggregated Feed

Прежде всего немного о том, чего я пытаюсь достичь. Я построил оболочку Django поверх библиотеки потоковых фреймворков. Есть 2 кормовых класса - FlatFeed(RedisFeed) а также AggregatedFeed(RedisAggregatedFeed), Очевидно, что они используют Redis для хранения данных канала. Я также реализовал свой собственный класс агрегатора.

Ошибка: созданный агрегированный канал не содержит всех действий, в то время как плоский канал имеет все действия. Вариант использования - есть 3 пользователя A, B и C. B и C выполняют некоторые действия, затем пользователь A следует за B и C. Пользователь B и C продолжает выполнять больше действий. Плоская подача A содержит все активности B и C, но агрегированная подача A имеет некоторые потерянные активности.

Например,

B likes products 1, 2, 3, 4
C likes products 5, 6, 7, 8, 9, 10
A follows B
A follows C

flat_feed (A) имеет все действия, но aggregated_feed(A) есть только лайки для 1, 5 и 8. Я повторил этот вариант использования несколько раз, и каждый раз приходили только эти 3 действия.

Я проверил мою реализацию класса агрегатора на оболочке django. Вывод функции агрегирования и слияния содержит все действия.

Пожалуйста помоги!!

Обратите внимание, что в плоском фиде есть правильные записи, пропущенные записи только в агрегированных фидах.

2 ответа

Решение

Если вы посмотрите на AggregatedActivity класс рамок, вы заметите, что serialization_id он же уникальный идентификатор активности рассчитывается на основе количества секунд от эпохи. Это означает, что действия, выполняемые в течение одной секунды, будут перезаписаны.

Вы можете решить эту проблему путем переопределения serialization_id,
serialization_id = количество миллисекунд от эпохи.
Это должно работать нормально.

Я нашел решение. Я переписал serialization_id метод AggregatedActivity как -

def serialization_id(self):
    milliseconds = str(int(datetime_to_epoch(self.updated_at)* 1000))
    return milliseconds
Другие вопросы по тегам