首先是我想要实现的一点。我在流框架库之上构建了一个 django 包装器。有 2 个饲料类 - FlatFeed(RedisFeed)
和 AggregatedFeed(RedisAggregatedFeed)
.显然,这些正在使用 Redis 来存储源数据。我还实现了自己的聚合器类。
错误:生成的汇总 Feed 不包含所有活动,而平面 Feed 包含所有活动。用例是 - 有 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 shell 上测试了我的聚合器类实现。聚合和合并函数的输出包含所有活动。
请帮忙!!
请注意,平面 Feed 的条目正确无误,缺少的条目仅在汇总 Feed 中。
我已经找到了解决方案。我将AggregatedActivity
serialization_id
方法重写为-
def serialization_id(self):
milliseconds = str(int(datetime_to_epoch(self.updated_at)* 1000))
return milliseconds
如果您查看框架的AggregatedActivity
类,您会注意到serialization_id
(即活动的唯一标识符(是根据纪元的秒数计算的。这意味着在一秒钟内执行的活动将被覆盖。
您可以通过重新定义serialization_id
来解决此问题。
serialization_id
= 从纪元开始的毫秒数。
这应该可以正常工作。