容量规划

在设置集群时,您需要找到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 

内存大小约为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问题。