c++ - 在网络上查找和分发字典更改的最佳方式

标签 c++ c architecture dictionary

问题:您在服务器上有一个很大的字典,并且您正在将它分发给很多客户端。

字典仅在服务器端更新,但您希望通过最小化传输的数据来允许客户端更新字典。

您还可以假设您有大量客户请求更新,可能每天左右。

如果从服务器中删除了一个 key ,您希望它在同步时从客户端中删除。

你会如何解决这个问题?

附加要求:该解决方案应该易于在不同平台 上实现,包括桌面(Windows、Linux、OS X)和移动平台(iOS、Android 等)。如果这要求使用第三方库,则它们的许可必须非常自由,例如 BSD。

最佳答案

如果这是在文件级别,则使用 rsync (或者很棒的 bsdiffxdelta 之类的)。

如果这是在应用程序级别,那么一种方法是将日志更新写入服务器中的字典(键值存储)——您将所有更新、添加和删除的日志按它们发生的顺序写入日志。然后,您的客户会定期访问服务器并说出他们上次收到的日志中的位置,然后服务器向他们发送所有比该位置更新的日志项。服务器也可以跳过被取代的日志项目(例如,后来被删除的添加)。如果服务器跟踪客户端,它可以跟踪最小客户端日志位置,从而摆脱它不再需要的日志项。

如果字典很大但请求很少,客户端可以在每次查找时访问服务器并始终获得最新的键。这通常比您想象的更好。

关于c++ - 在网络上查找和分发字典更改的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5549535/

相关文章:

c++ - 为什么常量的模板特化需要 const 变量

C++动态分配二维数组

linq-to-sql - 使用 Linq-to-SQL、IOC 和存储库模式预取数据

node.js - 架构:有效地计算和维护类似 Reddit 的网站中用户提交的分数

c - 什么是 C 中的 vuint,为什么它在我的微 Controller 中?

php - Zend Framework 2 Architecture(如何降低模块之间的耦合)?

c++ - __builtin_ctz 的 valgrind 错误

c++ - 为什么错误 "invalid conversion from ' char' 到 'const char*"?

c - 如何使用typedef定义函数类型?

c - 使用 ‘-Wcast-qual’ 选项检查编译