我之前用套接字做过一些非常基础的实时应用程序,并出于好奇而阅读了更多相关内容。我读到了一篇非常有趣的操作转换文章,学到了一些新东西。在阅读完后,我一直在思考如果我要保存这些数据,它们是如何真正保存到数据库中的。我有两个假设/理论,但我不确定它们是否正确和/或解决此问题的最佳方案。它们如下所示:
(以实时协作白板为例:)
(以实时协作白板为例:)
- 每次发生编辑行为(例如画一条线),套接字都会向所有协作者发送消息。但是同时,我也将数据存储在我的数据库中。我看到这种解决方案的问题在于我需要访问数据库的时间。对于用户画的每一条线,我都需要访问数据库进行存储。
- 使用轮询。对于这个理论,我考虑将每个数据保存在服务器的临时存储中,然后在“x”时间之后,它将从临时存储中获取所有数据并将它们保存在数据库中。这个理论的问题是可能会出现临时存储的故障(例如电力故障)。如果临时存储在保存到数据库之前丢失其数据,则我将永远无法恢复它们。
类似Google Doc、Slides等实时协作应用程序如何将数据存储在它们的数据库中?他们是否遵循我提到的其中一种理论或者有完全不同的方式来存储数据?