可伸缩性

扩展 Redis 向量集合以处理更大的数据集和工作负载

多实例可伸缩性

向量集合可以通过将数据分片到多个 Redis 实例来实现水平扩展。这是通过在键和节点之间手动划分数据集来完成的。

示例策略

您可以使用一致性哈希进行数据分片

key_index = crc32(item) % 3
key = f"vset:{key_index}"

然后将元素添加到不同的键中

VADD vset:0 VALUES 3 0.1 0.2 0.3 item1
VADD vset:1 VALUES 3 0.4 0.5 0.6 item2

要在所有分片上运行相似性搜索,请向每个键发送 VSIM 命令,然后在客户端合并结果

VSIM vset:0 VALUES ... WITHSCORES
VSIM vset:1 VALUES ... WITHSCORES
VSIM vset:2 VALUES ... WITHSCORES

然后合并结果并按得分排序。

关键特性

  • 写操作 (VADD, VREM) 呈线性扩展——您可以在多个实例中并行插入。
  • 读操作 (VSIM) 不呈线性扩展——您必须查询所有分片才能获得完整结果集。
  • 较小的向量集合能带来更快的查询,因此对其进行分发有助于减少每个节点的查询时间。
  • 在客户端合并结果保持逻辑简单,且不会增加服务器端开销。

可用性优势

这种分片模型也提高了容错能力

  • 如果一个实例宕机,您仍然可以从其他实例检索部分结果。
  • 使用超时和部分回退机制来增强弹性。

延迟考量

为避免跨 N 个实例的累加延迟

  • 并行向所有分片发送查询。
  • 等待最慢的响应。

这使得总延迟接近最差情况下的分片时间,而不是所有分片时间的总和。

总结

目标 方法
扩展插入 跨键和实例分割数据
扩展读取 查询所有分片并合并结果
高可用性 当某些分片失败时接受部分结果
保持性能 使用较小的分片以便更快地进行每个节点遍历

另请参阅

评价此页面
回到顶部 ↑