1

我正在为我的应用程序创建一个简单的活动流。

目前的技术层和逻辑如下:

** 与活动相关的所有数据都存储在 MYSQL 中,所有活动 ID 的数组都保存在 Redis 中,供每个用户使用。**

  1. 用户执行操作,活动直接存储在 MYSQL 的“活动”表中,并返回唯一的“活动ID” 。
  2. 从数据库中检索该用户的“关注者”数组,对于每个关注者,我将这个新的activity_id推送到他们在Redis中的列表中。

当用户查看他们的流时,我根据他们的用户 ID 从 redis 检索活动 ID 数组。然后我执行一个简单的 MYSQLWHERE IN($ids)查询来获取所有这些活动 ID 的实际活动数据。

我相信这种设置是相当可扩展的,因为查询总是非常简单的 IN 查询。然而,它提出了几个问题。

  1. Removing a Follower- 如果用户停止关注某人,我们需要从他们的Redis列表中删除与该用户对应的所有 activity_id 。这需要遍历 Redis 列表中的所有 ID,并删除与已删除用户对应的 ID。这让我觉得很不雅,有没有更好的方法来管理这个?
  2. 'archiving'- 我想将 Redis 列表的最大长度保持为 1000 个 activity_id,并经常从 MYSQL 活动表中删除旧数据,以防止其增长到无法管理的大小。显然,这可以通过在我们添加新 ID 时从用户流列表中删除旧 ID 来实现。但是,我不确定如何归档这些数据,以便用户可以选择查看非常旧的活动数据。最好的方法是什么?还是我最好完全执行此限制并阻止用户查看非常旧的活动数据?

总结一下:我真正想知道的是我当前的设置/逻辑是好还是坏。我需要重新思考吗?如果是这样,您推荐的型号是什么?如果你觉得一切都好,我应该如何解决上述两个问题?我意识到这个问题非常广泛,所有答案都将基于意见,但这正是我正在寻找的。形成良好的意见。

提前谢谢了。

4

1 回答 1

1

1 似乎并不难执行(没有循环):

delete Redis from Redis
 join activities on Redis.activity_id = activities.id
                and activities.user_id = 2 
                and Redis.user_id = 1
;

2 我不太确定存档。您可以在每个时期创建存档表,并定期将旧活动从主表移动到存档表。似乎一个正确规范化的活动表应该能够变得相当大。(确保任何“大”活动将活动数据存储在单独的表中,主活动表应该是“窄”的,因为它预计会有很多条目)

于 2013-01-02T15:12:43.247 回答