2016-02-10 59 views
2

首先是我想要实现的一点。我已经在stream-framework库之上构建了一个django包装器。有2个饲料级别 - 和AggregatedFeed(RedisAggregatedFeed)。显然,这些正在使用Redis来存储Feed数据。我也实现了我自己的聚合器类。聚集饲料中的活动丢失

错误:生成的聚合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中。

回答

0

如果您查看框架的AggregatedActivity类,您会注意到活动的唯一标识符serialization_id是基于从epoch开始的秒数来计算的。这意味着在一秒内执行的活动将被覆盖。

你可以通过重新定义serialization_id来解决这个问题。
serialization_id =来自时代的毫秒数
这应该很好。

+0

谢谢。这工作! –

1

我找到了解决方案。我重写了方法AggregatedActivity as-

def serialization_id(self): 
    milliseconds = str(int(datetime_to_epoch(self.updated_at)* 1000)) 
    return milliseconds