Database design 使用Redis的通知和新闻区域

Database design 使用Redis的通知和新闻区域,database-design,data-structures,architecture,redis,social-networking,Database Design,Data Structures,Architecture,Redis,Social Networking,我有一个相册系统,人们可以上传照片并与其他用户互动。我使用mySql和Redis来处理流量和存储数据 在我的系统中,用户可以跟踪其他用户,如照片,对其进行评论,并上传新照片 在这个场景中,我想在用户的墙上显示用户关注的所有事件(如facebook timeline) 例如,我跟踪用户30、40、50、60、70和80 ID。每当他们添加一张新照片时,我都想在我的墙上看到他们。问题是: 用户30(他的id)添加了3张新照片,我将此信息添加到photoevents:30:PhotoID->[55,5

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

在我的系统中,用户可以跟踪其他用户,如照片,对其进行评论,并上传新照片

在这个场景中,我想在用户的墙上显示用户关注的所有事件(如facebook timeline)

例如,我跟踪用户30、40、50、60、70和80 ID。每当他们添加一张新照片时,我都想在我的墙上看到他们。问题是:

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

User 30 added 3 new photos [55,56,57]
 User 40 added 2 new photos [5,6].     
 User 30 added 3 new photos [55,56,57]
然后用户40添加了2张新照片[5,6] 我在墙上看到的是这样的:

User 30 added 3 new photos [55,56,57]
 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]


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

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

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

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

在我们的一个项目中,我在REDIS中实现timeseries的方法是使用排序集()。在您的情况下,您可以存储:

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
user1EventsKey->[{ts1,eventKey1},{ts2,eventKey2},{ts3,eventKey3},…]
#这是已排序的集合
eventKey1->[photo1,photo2,photo3]
eventKey2->[照片4,照片5]
...
用户2检查点->tsA#其中ts2
现在您知道,下次user2查看通知时,您将仅显示tsA之后的事件,使用
ZRANGEBYSCORE user1EventsKey ts2+inf
获取所有事件键,然后逐个显示事件

时间戳可以以UNIX格式存储


我希望这能有所帮助。

我决定使用类似于您的建议。谢谢