记录知识森林中遇到的问题及解决方法

所需功能:给定一个课程名,获得该课程下所有的主题、分面以及碎片,并且以RDF的形式组织。即主题-分面-碎片。分面就相当于主题与碎片文本之间的一个关系。思考之后,返回数据可以以树型组织,根节点是主题名,然后往下是各级分面,一级分面下面挂对应的二级分面,直到三级分面。只有叶子节点分面才会给挂碎片。

由于数据库特别大。在一开始实现的时候,采用的是多次读数据库的方式,每次需要查父分面或子分面时,都是去查数据库。每次给叶子分面节点挂碎片的时候,也是根据分面id去查碎片表。这样的性能特别特别慢,我记得查一个课程的数据用了快半个小时。

优化方法:减少多次去查数据库,因为每次去查数据库导致整体性能特别低。尽量一次读出数据之后就将数据保存着,以便后面使用。

解决方法:
根据课程id查数据库主题表,获得该课程下所有的主题,并保存在list中。

根据课程id查数据库碎片表,获得该课程下所有的碎片,并保存在list中。然后对碎片进行处理。将所有碎片保存在Map<Long, List>中,键值是分面id,值是该分面下所有的碎片。即将所有的碎片都挂在了分面下,并保存在map中,方便后续可直接根据分面id取出该分面下所有的碎片。

对分面进行处理。
根据主题id,获得该主题下所有分面(包含一级、二级、三级分面)。然后将一级、二级、三级分面分别放在不同的list中。
遍历一级分面:根据一级分面id,从二级分面list中判断该一级分面下是否有二级分面。如果有二级分面,再接着从三级分面list中判断该二级分面下是否有三级分面。有三级分面的话直接根据分面id从map中取出该分面下所有的碎片。一级、二级分面同理,如果下面没有子分面了的话,就直接根据分面id从map中取出所有碎片。

所有的结果都是保存在map中。

最后的结果是,键为主题名,接下来每一级是分面是键,值是子分面或者是碎片…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值