本地数据库和聊天应用中的新消息同步



当谈到这个话题时,我有点困惑。这是我的情况,我有一个不和谐风格的应用程序,你可以加入聊天室。我现在有了如何处理和使用本地DB与远程DB的问题。因为我只加载当前DB的最新X条消息,然后如果用户滚动,则获取其他X条消息,依此类推。但是,本地DB从何而来呢?例如,我从上午10点到上午12点存储在DB消息中,我是否应该从本地DB获取最旧的消息,并在请求数据时跳过远程DB中的时间框架?如果有人删除/编辑了一条消息怎么办?从我目前的观点来看,似乎只有拥有一个远程数据库才是可行的方法

使用Nodejs Typescript和MongoDB为服务器和客户端是一个Kotlin多平台应用程序,我可以访问客户端上的SQL DB,如果需要的话。

也无论如何我接近这个,因为这是一个聊天应用程序,我已经建立了一个Websocket连接,将加载消息并通过Websocket接收它们有意义,还是我应该做一个REST端点?

您的localdb实际上是一个缓存,您应该这样对待它。现在有了缓存,还有另一个问题,缓存无效。更糟糕的是,由于每个客户端都有自己的缓存,因此会出现分布式缓存失效问题。

你可以通过使消息不可变,并有一个REPLACES_ID和一个IS_DELETED字段来允许"编辑"来避免很多这样的问题。从UI的角度来看,这是一个真正的添加,取代了另一个现有的消息…从游标的角度来看,这至少会给你一些相当可计算的东西。

理想情况下,你的ID字段是一个递增的数字序列,允许简单的查询,如"给我这个房间的X条消息,ID大于[[缓存中的最后一个ID]]";如果没有返回数据,则您的本地DB拥有所有数据,否则从查询中获取数据并填充本地数据库以引入这些消息。

滚动更复杂,但一般可以忽略,没有人滚动(统计上无关的人去第2页)。我建议,如果有人滚动只是擦除本地数据库过去的第一页,并回到远程服务器的X记录之前,你的当前页面的第一条记录。

最新更新