我有一个照片应用程序,用户可以将相册添加到队列中,以便以后可以观看。
在每个专辑页面上,他们将会看到"稍后观看"按钮。
我的问题是如何在Cassandra中设计我的表格。
我只需要在WatchLater表中存储相册ID,专辑作者,专辑标题,显示顺序和日期。
选项1: 在ClickLater表中单击并写入时复制这些值
优点: 1)当显示用户的观察列表时,只需从该表中读取
缺点:
1)用户可以随时删除相册或更改标题。许多用户可以添加特定的专辑来观看列表。在更新标题期间,我还需要更新WatchLater表条目。
2)需要另一个索引来查找要更新的行
选项2: 只保留WatchLater表中的ID,日期和订单 在显示用户的watchList时,首先从WatchLater表中获取ID,然后使用这些ID从专辑表中提取专辑标题,作者
优点: 无需担心专辑标题的更新
缺点: 我需要运行2个查询。所以它会慢一些。
假设更新标题的频率不高。
您推荐哪个选项?
答案 0 :(得分:0)
您似乎已正确识别出这两个选项。真正的问题是平衡两者的痛苦。
对于选项1,您是否有一个系统可以异步迭代各种监视列表并进行更新?您可能还需要另一个将专辑ID映射到用户/监视列表的表,以便您快速找到要更新的监视列表。这听起来令人生畏吗? Scheduled / cron任务可能有效,但异步工作者(排队列表要处理,可能是kafka / rabbitmq / spark),每次更新时都会更新相册 - 如果你有框架就不难了。
对于选项2,您只需添加一个额外的读数。它可能需要更低的努力才能走出困境,如果你想要推出一款产品/功能,那么它的速度更快,而且重要性更高。就你以后需要解决的事情而言,#34;
就个人而言,我可能倾向于2,因为额外的阅读可以很容易地缓存以用于后续页面加载,而快速阅读可能不会太痛苦。