【发布时间】:2021-02-13 02:31:42
【问题描述】:
我以前使用套接字的帮助完成了一些非常基本的实时应用程序,并且出于好奇而一直在阅读有关它的更多信息。我读到的一篇非常有趣的文章是关于 Operational Transformation 的,我学到了一些新东西。读完之后,我一直在想,如果我要保留这些数据,何时或如何真正将其保存到数据库中。我对可能发生的事情有两个假设/理论,但我不确定它们是否正确和/或解决此问题的最佳解决方案。它们如下:
(对于这个例子,我们假设它是一个实时协作白板:)
- 对于发生的每一次编辑(例如画一条线),套接字都会向所有协作的人发送一条消息。但同时,我会将数据存储在我的数据库中。 我看到这个解决方案的问题是我需要访问数据库的时间量。对于用户绘制的每一行,我都需要访问数据库来存储它。
- 使用轮询。对于这个理论,我想将每个数据保存在服务器的临时存储中,然后在“x”时间后,它将从临时存储中获取所有数据并将它们保存在数据库中。 这个理论的问题是暂时存储失败的可能性(例如电气故障)。如果临时存储在保存到数据库之前丢失了数据,那么我将永远无法再次恢复它们。
Google Doc、Slides 等类似的实时协作应用程序如何将数据存储在其数据库中?他们是否遵循我提到的一种理论,或者他们有完全不同的数据存储方式?
【问题讨论】:
标签: database canvas socket.io real-time