我试图找到一种有效的方法来在服务器和客户端之间传输数据而不会出现一致性错误,同时保持较低的网络利用率。我以前曾多次遇到这种情况,并且总是最终使用以下两个计划之一:
计划 #1: 客户端请求所有可用数据(在连接时或在第一次请求时)。客户端缓存数据并将其用作自己的本地数据库(存储在 RAM 中)。在数据发生任何更改(添加、删除、更新)时,服务器会通知客户端,然后客户端会更新其缓存
优点: 初始传输后网络利用率低(所有数据都被缓存)。数据动态更新
缺点: 服务器可能需要发送大量数据。这可能会导致网络拥塞甚至导致客户端崩溃
计划#2: 客户按需请求一些数据(例如检索列表的前25 个项目)。如果需要更多数据,客户端会请求接下来的 25 个项目,依此类推。
优点: 简单。无需一次传输所有数据
缺点: 服务器无法动态更新客户端的数据,因为它不知道每个客户端拥有什么数据。出于同样的原因,客户端无法缓存任何数据,因为它们可能缓存过时的项目。整个系统使用过程中的高网络利用率。
处理这个问题的最佳方法是什么?