容量规划

在设置集群时,您需要确定 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。

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

计算负载大小

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

  • 文本字段根据长度和编码消耗空间(例如,一大块文本与几个单词)。
  • 浮点数 对于 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 问题。