dp2
dp2 copied to clipboard
dp2library 批处理任务“重建检索点”改进
最近发现 dp2library 批处理任务“重建检索点”无法清除那些已经被删除的记录的检索点。
这是由于原有的算法缺陷造成的。算法遍历数据库内的全部记录,调用 dp2kernel 的 RebuildKey() API,但那些已经被删除掉的记录就没法被处理。并且,即便能处理这些记录,dp2kernel 当前版本的 RebuildKey() API 在发现记录不存在的时候就会报错返回,无法把清理检索点的任务完成。
dp2kernel 目前正在重构阶段。已经改进了 RebuildKey() API,使其可以处理删除了的记录,清理它可能残留的检索点。
dp2library 也改进了重建检索点的代码,增加了一个步骤,将“全部”途径检索命中的 ID 集合,减去"__id"途径检索命中的 ID 集合,得到的结果集就是那些被删除的、依然残留了检索点的记录 ID。遍历这些 ID,调用 RebuildKey() API 把残留的检索点清除。但因为 dp2kernel 重构还没有完成,暂时没有启用此功能。等 dp2kernel 重构完成后,再正式启用此功能。
绕过问题的方法
在目前有问题的 dp2library 版本上,似可以考虑先在已经删除的 ID 位置创建一条记录,然后再进行一次重建检索点。然后再删除这条记录,即可解决检索点残留问题。