{ "columns": [ { "name": "username", "type": "String" }, { "name": "age", "type": "String" } ], "rows": [ [ "zhao", "11" ], [ "qian", "12" ], [ "sun", "11" ], [ "li", "14" ], [ "zhou", "11" ] ], "cursor": "DIXPnoOPhGJSDOIPANhnnaioHVNgyuyBKMLLYURrghoivpvptFTyguhuiOHIPBVGIYGFUYGFFYVfuvyhubiOHIOHIoht78t78t786rt6r7RFFYVJVHJVHJbkjbkj==" } ======================================================================================= { "rows": [ [ "wu", "9" ], [ "zheng", "11" ], [ "wang", "11" ] ] } ====================================== 普通策略: 1. 进行第一次访问,然后获取 columns ,rows 和 cursor。 2. 转化我们的第一次结果为 map 形式的 json 3. 拿第一次的 corsor id,进行第二次访问。 4. 用第一次记录的 columns 组装第二次的 rows结果为 map 形式的json 以此类推。 5. 把所有的转化结果存储到 一个 对象(数据量太大,占用内存)里,返回给调用者 (数据量太大,带宽受不了)。 升级策略:迭代器模式 1. 将我们访问封装到我们的迭代器中;(第一次访问以迭代器的构造函数访问,初始化我们的columns供 后续使用;将第一次的结果转化为 map 形式的json 供 迭代器使用) 2. hasnext 方法里,进行我们的后续的多次访问。 1. DB 存储 id parentId name 1 0 书籍 -------------------------- 2 1 技术书籍 --------------------------- 3 1 历史书籍 --------------------------- 4 2 并发编程 --------------------------- 5 2 JVM 2. 当我们的项目进行初始化的时候,就会将我们的DB里的这些目录进行如下的查询转化为如下对象存储: { "id": 1, "itemName": "书籍", "pid": 0, "childItems": [{ "id": 2, "itemName": "技术书籍", "pid": 1, "childItems": [{ "id": 4, "itemName": "并发编程", "pid": 2, "childItems": null }, { "id": 5, "itemName": "JVM", "pid": 2, "childItems": null }] }, { "id": 3, "itemName": "历史书籍", "pid": 1, "childItems": null }] } 3. 将这个对象存储到我们的 Nginx 本地缓存,并设置为永不过期。 4. App 、 页面进行调用的时候,从 Nginx 获取这份儿目录。并且 APP 端进行缓存,每隔 24小时进行一次 标记位的访问(如果业务对我们的目录结构有增删,标记位(序号)就会有所变化,前端会再次对数据进行重新的同步) 5. 如果有修改,后端是先 修改缓存,只针对缓存中需要修改的部分进行修改,然后更新缓存(目录层结构+标志位)。 缓存更新成功后,再更新DB.