database-design - 使用 Redis 的通知和新闻区

标签 database-design data-structures architecture redis social-networking

我有一个相册系统,人们可以上传照片并与其他用户互动。我使用 mySql 和 Redis 来处理流量和存储数据。

在我的系统中,用户可以关注其他用户,如照片、评论和上传新照片。

在这种情况下,我想在他们的墙上显示用户关注者的所有事件(如 facebook 时间线)。

比如我关注用户30、40、50、60、70、80id。每当他们添加新照片时,我都希望在我的墙上看到它们。问题是这样的:

用户 30(他的 ID)添加了 3 张新照片,我将此信息添加到 photoevents:30:photoids -> [55,56,57]。 它在我的墙上是这样的:

User 30 added 3 new photos [55,56,57]

然后用户 40 添加了 2 张新照片 [5,6] 它在我的墙上是这样的:

 User 40 added 2 new photos [5,6].     
 User 30 added 3 new photos [55,56,57]

然后用户30又添加了2张照片[58,59]

应该看到什么?

像那样

 User 30 added 5 new photos [55,56,57,58,59].     
 User 40 added 2 new photos [5,6]

或者

 User 30 added 2 new photos [58,59]
 User 40 added 2 new photos [5,6].     
 User 30 added 3 new photos [55,56,57]

对于第二种情况,我怎么知道墙主看到的最后一张照片是什么?根据什么,我应该决定"new"号。哪一个是合理的方法;将此数据保存在服务器端(关注者的整个“最后一次看到”组合(例如:用户 50 等最后一次看到用户 30 的 ID 等)或在客户端处理此数据

最佳答案

在我看来,这个功能应该在服务器端处理,特别是如果您希望用户使用多种类型的客户端(例如,浏览器、电话等)

您的每个事件都应该有一个时间戳,以便了解每个事件发生的时间并能够相应地进行范围搜索,以防您需要获取例如过去 24 小时的事件或之后的事件时间戳 X.

然后,当关注另一个用户的用户查看她的通知时,您可以将时间戳设置为检查点,以了解该用户已经看到的事件,然后仅显示该检查点之后的事件。

我在我们的一个项目中使用 REDIS 实现时间序列的方法是使用排序集 (http://redis.io/topics/data-types#sorted-sets)。在您的情况下,您可以存储:

user1EventsKey -> [{ts1, eventKey1}, {ts2, eventKey2}, {ts3, eventKey3},... ]  
                                                           # This is the sorted set
eventKey1 -> [photo1, photo2, photo3]
eventKey2 -> [photo4, photo5]
...

user2Checkpoint -> tsA   #where  ts2 < tsA < ts3

现在您知道,下次 user2 查看通知时,您只会显示 tsA 之后的任何事件,使用 ZRANGEBYSCORE user1EventsKey ts2 +inf 获取所有事件键,然后一个一个地显示显示事件。

附言。时间戳可以以UNIX格式存储。

希望对您有所帮助。

关于database-design - 使用 Redis 的通知和新闻区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21833700/

相关文章:

mysql - 在不断更新数据库中维护排名顺序

asp.net-mvc - 将 1 个数据库用于帐户信息和内容是否正确

java - Java中如何合并两个对象的属性? (用户定义类的属性和Map的键值)

c# - ASP.NET MVC 体系结构 : ViewModel by composition, 继承还是重复?

java - GWT:应用程序架构问题

mysql - 一对多与多对多关联设计和优势

sql-server - 图像表的数据库设计

java - 递归回溯二维数组(水可以从 map 上掉下来吗)

c++ - 单链表插入和删除的时间复杂度

mysql - 存储多媒体帖子 SQL DB 的最佳实践