容量规划
在设置集群时,您需要找到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。
根据使用情况,大型数据集可以通过量化减少内存需求。
计算有效载荷大小
这总是不同的。有效负载的大小取决于数据的结构和内容。例如:
- 文本字段根据长度和编码占用空间(例如,一大段文本与几个单词)。
- 浮点数对于
int64或float64有固定的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
免责声明
上述计算最多只是估计。如果您正在寻找更准确的数字,您应该始终在实践中测试您的数据集。
