【发布时间】:2016-07-16 03:41:55
【问题描述】:
背景
想象一下像 Twitter 这样的发布系统。您有帖子,每个帖子都有一个发布它的用户。我正在尝试做一些与此非常相似的事情,但我找不到正确的方法。
主要问题是缓存所有内容,例如,我不想每 30 秒下载一次所有帖子。为了解决这个问题,我简单地从服务器的最后一篇文章和本地数据库的最后一篇文章中获取日期,如果不同,请更新它。 问题是:如果有人更改了已经在用户本地数据库中的某个帖子的文本,则不会更新。我们称之为问题#1。
下一个问题(也是最成问题的)是用户。每个帖子都显示了发布它的用户的头像,所以我不能简单地缓存帖子,因为如果用户更改了他的头像,缓存的版本将保留最后一个头像(也由于问题 #1)。为了解决这个问题,我使用了一个通用的头像 URL,但是如果帖子有用户名怎么办?这是问题 #2。
到目前为止我的解决方案
为了解决问题 #1,我想在每个帖子中添加版本号,当有人编辑它时,版本号会增加。如果帖子的版本号与数据库不同,则重新下载帖子内容并更新。但是如果我有这么多帖子,如果有多个用户在使用该服务,请求就会变得庞大并导致服务器过载。
为了解决问题 #2,我想到了与问题 #1 类似的事情。我在每个用户配置文件上添加了一个版本号。如果用户更新它,那么版本号就会增加。加载帖子后,我向本地数据库发送请求以检索用户配置文件,然后它检查版本号,如果它与服务器匹配,则返回它,否则,更新并返回。这也会很昂贵,特别是如果用户只是更新了他的名字然后我重新下载了头像,但为此我可以有两个单独的版本号。
问题
处理这类问题的最佳方法是什么,最可扩展的解决方案,不会因请求而使服务器超载,也不会在用户的智能手机上下载大量不必要的东西?
我在用什么
我首先在 Android 上使用 SQLite 存储数据。我使用Socket.IO 与服务器快速通信并接收请求。
【问题讨论】: