现有的外存体系是DDR内存+磁盘二级存储结构。磁盘的优点是廉价,在存放大数据背景下的海量数据时扩充容量的代价容易承受。
但是,数据管理的其他操作就有些蛋疼了,很多基本的操作都发现无法避免一个瓶颈:内外存间的通信(Jeffrey Scott Vitter)
基于闪存的高速外存(SSD)没有随机I/O,这对很多ENN(Exact Nearest Neighbor)搜索方法是福音。典型的,va-file, fnn等一众将遍历作为算法搜索框架的方法会收益。这些方法在通过近似计算留下候选集后需要加载原始向量(数据点)精炼出ENN,当候选集内的点往往不是连续的,于是形成了随机I/O,这也成为了其一大短板。现在这一短板没了,Weber在98年的观点又一次焕发出威力:高维空间中任何基于聚类的方法其性能都将衰减到不如线性扫描。
不过,没有了对随机I/O的担忧不代表没有了对I/O的担忧。没有了醒目的随机I/O,新体系下的高维索引在解决ENN的时候考量的各项性能的反而都变得无法忽视,主要有以下几个:加载的候选点的个数、加载的其他数据的规模、昂贵计算的次数(主要是距离度量)、其他辅助量的计算量(例如,Adaptive distance bound, HB中的lower bound计算)。
除此之外,可能还会加上内存开销。
从这个角度,va-file如果放在外存,整个va-file加载进入内存也会伴有一定量的I/O,而聚类的一些方法索引结构体量很小,并且要加载的数据都是随需(计算出要加载的下一个聚类)加载的。并且聚类的方法并没有损失什么(原本外存技术的提高也不应对算法产生副作用)只不过也没有得到太多的促进而已。聚类方法本身的优势依旧存在,例如HB中自适应的边界相对于其他边界的优势。
现在,定义高维和大规模,综合审视ENN搜索方法的表现是否已经尽如人意?可以做一个综述的评价。不顾答案应该不太积极。
进一步提升ENN搜索算法性能的着手点在哪里?