gpt4 book ai didi

database - 避免客户端/服务器数据同步间隙

转载 作者:搜寻专家 更新时间:2023-10-30 23:30:42 26 4
gpt4 key购买 nike

我有一个客户端/服务器架构,其中客户端在连接时执行以下操作:

  • 打开到服务器的套接字并请求更改流(“流”)。
  • 从服务器获取所有数据(“快照”)。

所以这里的想法是快照将在连接点获取客户端所有相关数据,并且流将不断发送更改 - 这样客户端就不必一遍又一遍地进行轮询和获取快照.

问题在于快照和流开始之间存在间隙,这可能会导致数据丢失。示例:

  1. 客户端从服务器请求快照和流。
  2. 服务器从数据库中获取快照。
  3. 另一个客户端提交了对数据库的更改(因此快照已过时)。更改已发送到所有流。
  4. 客户端流已启动。

正如您在上面看到的,客户端最终得到了一个过时的快照,并且由于流初始化是异步的,它可能会错过对数据库的更改(它永远不会看到步骤 3 中的更改)。

我对如何解决这个问题有一些想法,但到目前为止我对其中任何一个都不是很满意:

1) 先初始化流,然后获取快照。我不相信这个是安全的,因为它假设流媒体服务器 (rabbitmq/kafka/pulsar) 不会错过传输中的消息。2) 让流也推送在连接时间之前的最后 X 秒内所做的更改。这不是很好,因为它对概率进行了时间假设和赌注。

感谢所有输入!

最佳答案

一些建议:

  1. 让其他人为您处理(例如使用 Google Cloud Firestore)。
  2. 我不确定消息将包含什么,但如果可以的话,数据库的状态就是流中发送的所有事务消息的总和(即,如果您按时间顺序重放所有消息,您总是以相同的状态结束)那么你可以让服务器给每条消息一个单调递增的ID。当客户端重新连接时,它告诉服务器它的最大数量,服务器发送所有具有更高 ID 的消息。

关于database - 避免客户端/服务器数据同步间隙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49439977/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com