基准测试常见问题解答
我们有偏见吗?
可能,是的。即使我们努力做到客观,我们也并非使用所有现有向量数据库的专家。我们构建 Qdrant 并最了解它。因此,我们可能忽略了不同向量搜索引擎的一些重要调整。
然而,我们尽了最大的努力,反复查阅文档,尝试了不同配置的组合,并给了它们平等的突出机会。如果您认为您可以比我们做得更好,我们的基准测试完全开源,欢迎贡献!
我们衡量什么?
在决定使用哪个数据库时,需要考虑几个因素。当然,其中一些支持不同的功能子集,这些功能可能是做出决定的关键因素。但总的来说,我们都关心搜索精度、速度以及实现它所需的资源。
有一件重要的事情 - 只有在实现相同精度的情况下,才能比较向量数据库的速度。否则,它们可能会通过提供不准确的结果来最大化速度因素,这是每个人都宁愿避免的。因此,我们的基准测试结果仅在特定的搜索精度阈值下进行比较。
我们如何选择硬件?
在我们的实验中,我们不关注指标的绝对值,而是关注不同引擎的相对比较。重要的是,我们对所有测试使用了相同的机器。每次启动不同的引擎之间,机器都会被擦除。
我们选择了一台普通的机器,您可以从几乎任何云提供商处轻松租用。不需要额外的配额或自定义配置。
为什么不与 FAISS 或 Annoy 进行比较?
像 FAISS 这样的库为向量搜索实验提供了很好的工具。但它们离生产环境中的实际使用还很远。如果您在生产中使用 FAISS,最好的情况是您永远不需要实时更新它。最坏的情况是,您必须在其周围创建自定义包装器以支持 CRUD、高可用性、水平可伸缩性、并发访问等等。
一些向量搜索引擎甚至在底层使用 FAISS,但搜索引擎远不止一个索引算法。
然而,我们确实使用了与著名的ann-benchmarks 项目相同的基准数据集,因此您可以出于任何实际原因调整您的期望。
为什么我们决定使用 Python 客户端进行测试
在运行基准测试的最佳技术方面没有共识。您可以自由选择基于 Go、Java 或 Rust 的系统。但我们使用 Python 有两个主要原因
- 在生成嵌入时,您很可能使用 Python 和基于 Python 的 ML 框架。
- 根据 GitHub 星标,Python 客户端是所有引擎中最受欢迎的客户端之一。
从用户的角度来看,关键在于使用特定库(在大多数情况下是 Python 客户端)时感知到的延迟。没有人能够也甚至不应该仅仅因为使用特定的搜索工具而重新定义整个技术栈。这就是为什么我们决定主要关注由数据库作者提供的官方 Python 库。这些库在底层可能使用不同的协议,但归根结底,我们不关心数据如何传输,只要它最终到达目标位置即可。
有些向量数据库仅以 SaaS 形式提供,因此我们无法在与其余系统相同的机器上进行测试。这使得比较不公平。这就是为什么我们纯粹专注于测试开源向量数据库,以便每个人都可以轻松重现基准测试。
这不是最终列表,我们将继续对尽可能多的不同引擎进行基准测试。
如何重现基准测试?
源代码可在 Github 上找到,并附带一个README.md文件,描述了为特定引擎运行基准测试的过程。
如何贡献?
我们将基准测试开源是因为我们相信它必须是透明的。我们可能错误配置了其中一个引擎,或者只是效率低下。如果您认为可以帮助我们,请查看我们的基准测试存储库。