我试图建立自己的社交网络/论坛应用程序,人们可以添加和喜欢对方的帖子。我使用DynamoDB作为我的数据库,只有一个表。对于post喜欢的功能,我使用Lambda函数与DynamoDB-Streams相结合,后者聚合了like属性。
目前,我正在为这些用户的帖子制定一个排名机制。有了这一点,我想确保我的用户可以在那个时候在论坛上列出有趣的帖子。
为此,我阅读了reddit如何在此页面上处理其排序算法。
我也阅读这篇文章的问题,堆叠溢出,这是接近我,没有一个好的答案,海事组织。
我的问题是,如何在AWS生态系统的帮助下解决这个问题(甚至仅仅使用DynamoDB和Lambda函数?)
编辑:
我的数据库模式如下所示:
Partitionkey Sortkey likes ...
---------- -------- ------
forum#soccer 01.08.19 13:15
forum#baseball 22.08.19 20:11
post#soccer#Do you think FC Barcelona wins? 05.08.19 10:20 203
post#soccer#Which club is your favorite ? 05.08.19 10:20 2
like#Which club is your favorite ? John Wick
like#Which club is your favorite ? Walter White
...每插入一个以like#开头的条目,就会触发lambdaf散,并在“喜欢”列上更新post条目。
我的目标是查询当前最时髦的帖子。这应该是可能的,与可用的信息,如创建时间和类似计数的帖子。目前,我的查询只是重放最新的帖子。
发布于 2019-10-21 15:10:51
我将提供一个可能的解决方案,只考虑DynamoDB和Lambda (可能还有AWS )。如果它不适合,我们可能会考虑使用其他解决方案,如亚马逊ElastiCache。
算法:
trending#posts的项,只有trending (由您决定)并将键排序为date或post类型(或任何您想排序的内容)。您可能需要分析随时间变化的趋势--使用排序键作为日期-或按post类型筛选趋势)。或者,如果您不需要筛选器,您可以只使用一个值。1. Read all **N** trending posts saved in your table.
2. Read number of likes and post time of those posts.
3. Perform the trending score in the current **N** posts and, if the liked post is different from those, in the new post too.
4. Sort again the posts and save the **N** with greatest score in your table.
注1:你不需要经过一段时间就能得到确切的分数,只需要排名。我的意思是,如果你在上午9点保存趋势,你不需要正确的趋势在下午1点,只是1,2的位置.你只需要新的分数,当一个新的相似发生。
备注2:我说“可能是AWS”,因为用户可能同时喜欢posts,而Lambda将同时执行,一致性问题可能会发生。对于AWS,每个类似的类都会将事件推送到SQS,后者触发Lambda。这样就不会同时执行Lambdas。
https://stackoverflow.com/questions/58401018
复制相似问题