比较JSON文档
好吧,我的问题有点复杂,但我还是试试:
我有一个用Python写的服务器,它负责存储客户端(用JavaScript写)的会话,并且完全知道客户端当前存储了什么数据。
服务器会不断从数据库中获取数据,并检查这些数据与客户端的状态是否有变化。这些数据是JSON格式的,主要由列表和字典组成。我需要一种方法,向客户端发送响应,告诉它要修改自己的数据,以便与服务器的数据保持一致。
我考虑过以下几种方法:
- 发送一个经过JSON序列化的、递归比较后的字典,里面包含了变化的元素,并且不使用列表——这个方法还不错,但我不能用列表。
- 把服务器上客户端状态的整个版本发送给客户端——这样做成本高且效率低。
- 找一种复杂的方法来比较列表——这太麻烦了。
- 把两个状态转成JSON后进行文本比较——这简直太傻了。
我对此感到很困惑,希望能得到一些帮助。
更新
我在考虑向客户端发送空值,以便移除那些服务器已经从客户端状态中删除的数据。
1 个回答
3
相关问题
请查看
- http://ajaxian.com/archives/json-diff-released
- http://michael.hinnerup.net/blog/2008/01/15/diffing_json_objects/
这里有几种可能的方法:
- 进行实际的树形解析递归差异比较;
- 将你的JSON更新封装起来,这样它们可以同时生成差异;
- 直接从你的数据中生成仅包含变化的JSON。
你期望的客户端状态JSON的平均和最大大小是多少?
你期望的差异更新的平均和最大大小是多少?
更新请求的频率是多少?
基础数据变化的速度有多快?
为什么不能使用列表?
你可以只存储一个最后已知的客户端状态时间戳,然后查询数据库中自那时以来发生变化的项目——实际上,让数据库为你做差异比较。这需要在每个表项上有一个最后更改时间戳和一个项目删除标志;而不是直接删除项目,设置项目删除标志,并有一个清理查询,删除所有在两个完整更新周期之前设置了项目删除标志的记录。
查看一些示例数据可能会很有帮助——两组JSON客户端状态数据及其之间的差异。