有一个名为表A的表格,大约有10^5行,并且每天按顺序添加10^2行。 表B大约有10^6行,每天新增10^3行。从A到B有一对多的关系(A中的某些行对应多个B行)。
我想知道如何对这种数据进行连续聚合。我希望有一个任务每隔约10分钟运行一次,并执行以下操作:对于A中的每一行,在与之相关的B行中找到最近一天、一周和一个月内创建的所有行(然后按计数排序),并将它们保存在不同的DB中或缓存它们。
如果这很令人困惑,这里有一个实际的例子:假设表A有亚马逊产品,表B有产品评论。我们想显示最近4小时、1天、1周等评分最高的产品的排序列表。新产品和评论以快速的速度添加,我们希望所述列表尽可能地更新。
我目前的实现只是一个for循环(伪代码):
result = []
for product in db_products:
reviews = db_reviews(product_id=product.id, create>=some_time)
reviews_count = len(reviews)
result[product]['reviews'] = reviews
result[product]['reviews_count'] = reviews_count
sort(result, by=reviews_count)
return result
我每小时都会执行这个操作,并将结果保存在JSON文件中进行提供。问题在于这种方法并不能很好地扩展,并且计算时间很长。
那么,我应该从哪里着手解决这个问题呢?
更新:
谢谢大家的回答。但最终我学习并使用了Apache Storm。