考虑到文章、题目类型进行分类会提高便利性,故设置了分类目录。[1]Monika Handayani,Muhammad Hendra,Muhammad Bahit,Noor Safrina. Traversal Tree Implementation in Chart of Account Design[P]. 1st Annual Management, Business and Economic Conference (AMBEC 2019),2020.
在有向图G中进行DFS。记节点发现时间为、节点结束搜索时间为,对于搜索过程中的任意两个节点和满足三种情况之一:
3.1 所有目录#
由于目录是查询较多、改动较少的数据。每次查询时重新组织目录树结构会带来不必要的时间消耗,故使用Cache Aside机制,将目录树结构存储至Redis。先从缓存中读取数据,如果没有就再去数据库里面读数据,然后把数据放回缓存中,如果缓存中可以找到数据就直接返回数据;更新数据的时候先把数据持久化到数据库,然后再让缓存失效。100个线程循环10次,JMeter测试结果如下,可以看出使用Redis缓存数据的性能要远优于重复使用MySQL查询与组织数据。生成目录树,通过parentID找到该节点的所有子节点,再递归找到子节点的所有子节点:注意:categoryID才是分类的唯一标识,因为name仍然有可能出现重名的情况,比如“操作系统->其他”、“数据库->其他”,若以“其他”作为标识进行查询,有可能出现重复。3.2 删除目录#
设category左右坐标为,则所有坐标范围在内的节点都需要删除。令,对所有目录节点,若左坐标大于,则令其减、右坐标大于,也令其减。即对于在category之后的节点坐标,减去了category节点的宽度。3.3 插入分类路径#
对形如['计算机网络'、'传输层'、'TCP协议']的List<String>数据,将其插入至目录树中。3.4 插入子分类#