容量规划

在设置集群时,您需要找到 RAM磁盘存储 的合适平衡点。最佳设置取决于几个因素

  • 您拥有的向量数量及其维度。
  • 您使用的载荷数据量及其索引。
  • 您希望将哪些数据存储在内存中,哪些存储在磁盘上。
  • 您的集群的复制设置。
  • 您是否使用了量化以及如何设置的。

计算 RAM 大小

您应将频繁访问的数据存储在 RAM 中,以实现更快的检索。如果您想将所有向量保存在内存中以获得最佳性能,可以使用这个粗略的公式进行估算

memory_size = number_of_vectors * vector_dimension * 4 bytes * 1.5

最后,我们将所有内容乘以 1.5。这额外的 50% 考虑了元数据(如索引和点版本)以及优化期间创建的临时段。

假设您想存储 100 万个维度为 1024 的向量

memory_size = 1,000,000 * 1024 * 4 bytes * 1.5 

memory_size 大约为 6,144,000,000 字节,或约 5.72 GB。

根据用例的不同,大型数据集可以通过量化减少内存需求从而获益。

计算载荷大小

这总是不同的。载荷的大小取决于数据的结构和内容。例如

  • 文本字段 根据长度和编码消耗空间(例如,一大段文本 vs 几个单词)。
  • 浮点数 的大小固定,int64float64 占 8 字节。
  • 布尔字段 通常消耗 1 字节。

计算总载荷大小与向量类似。我们需要将其乘以 1.5 用于后端索引过程。

total_payload_size = number_of_points * payload_size * 1.5 

假设您想存储 100 万个 JSON 载荷大小为 5KB 的点

total_payload_size = 1,000,000 * 5KB * 1.5 

total_payload_size 大约为 5,000,000 字节,或约 4.77 GB。

选择磁盘而非 RAM

为了获得最佳性能,您应该只将频繁访问的数据存储在 RAM 中。其余数据应卸载到磁盘。例如,不用于过滤的额外载荷字段可以存储在磁盘上。

只有索引字段应该存储在 RAM 中。您可以在存储部分阅读更多关于载荷存储的信息。

以存储为中心的配置

如果您的优先事项是以平均搜索延迟处理大量向量,建议配置内存映射(mmap)存储。在此设置中,向量存储在磁盘上的内存映射文件中,而只有最常访问的向量被缓存到 RAM 中。

可用 RAM 的大小极大地影响搜索性能。通常来说,如果将向量存储在 RAM 中的数量减半,搜索延迟大约会翻倍。

磁盘速度也非常关键。如果您在我们的云服务中有针对大容量搜索的特定需求,请联系我们

以子组为中心的配置

如果您的用例涉及根据载荷值将向量分成多个集合或子组(例如,为多个用户提供搜索服务,每个用户都有自己的向量子集),则建议使用内存映射存储。

在这种情况下,只有活动的向量子集会被缓存到 RAM 中,从而为最新和活跃的用户提供快速搜索。您可以估算所需的内存大小如下

memory_size = number_of_active_vectors * vector_dimension * 4 bytes * 1.5

请参考我们的多租户文档,了解更多关于 Qdrant 中数据分区的信息。

在 Qdrant Cloud 中扩展磁盘空间

支持向量搜索的集群需要比其他搜索系统更大的磁盘空间。如果您的磁盘空间不足,可以使用 cloud.qdrant.io 上的 UI 来扩展您的集群。

当磁盘空间不足时,考虑扩展的以下好处

  • 更大的数据集:支持更大的数据集,这可以提高搜索结果的相关性和质量。
  • 改进的索引:支持使用 HNSW 等高级索引策略。
  • 缓存:通过增加 RAM 来提高速度,允许缓存更频繁访问的数据。
  • 备份和冗余:有助于更频繁的备份,这对数据安全来说是一个关键优势。

请始终记住增加向量大小的 50%。这用于存放索引和在向量插入、删除、搜索等操作期间使用的辅助数据。因此,包含元数据的估计内存大小为

total_vector_size = number_of_dimensions * 4 bytes * 1.5

免责声明

以上计算至多是估算。如果您需要更准确的数字,应始终在实践中测试您的数据集。

此页面有帮助吗?

感谢您的反馈! 🙏

很抱歉让您失望了。😔 您可以在 GitHub 上编辑此页面,或创建一个 GitHub Issue。