向量索引内存配置

向量索引基于 Lucene。Lucene 不使用 Neo4j 页面缓存内存,它使用操作系统内存,如内存配置部分所述。当您拥有向量索引时,您必须确保有足够的内存供 JVM 堆、Neo4j 页面缓存和 Lucene 向量索引以实现最佳性能。如果 Lucene 内存不足,操作系统将执行页面交换并从磁盘读取数据,这将显著降低 Neo4j 向量索引搜索性能。像 IOTOP 这样的工具可以帮助理解磁盘 I/O 使用情况。

向量索引的最佳 Neo4j 内存配置

内存配置建议是 堆 + Neo4j 页面缓存 + .25(向量索引大小) + 额外的操作系统管理内存。

注意事项和警告

如果您不打算将向量返回给用户或调用应用程序,则可以减少 Neo4j 页面缓存,因为向量不需要加载到内存中。例如,一个总大小为 459 GB 的数据库中的向量存储为 402 GB。通过将页面缓存设置为 100 GB,图的重要部分仍在内存中,并且服务器要求降低。内存与存储的比率会很高,但 Neo4j 仍能保持其性能。1:4 的比率应该能很好地运行。

如果您计划将向量返回给用户或调用应用程序并将其用于精细搜索,则必须增加内存。如果您将向量用于进一步搜索或优化搜索结果,则也必须增加页面缓存内存分配。

示例计算

以下示例展示了当向量仅用于搜索且不返回给用户或应用程序时如何计算内存要求。

表 1. 磁盘存储要求

Neo4j 数据库

10M

~40GB

向量索引(单一索引)

(1.1 * (4 * 768 + 8 * 16) * 10M)/1048576000

33.5GB

数据库总大小

73.5GB

表 2. 内存要求

10-20GB

20GB

页面缓存

数据库大小 * 1.2

50GB

索引的操作系统内存

向量索引的 0.4 倍

12GB

总计

82GB

表 3. Aura 向量指定集群内存配置
实例大小 磁盘存储 页面缓存 剩余内存

32GB

64GB

7.58GB

9.01GB

15.41GB

64GB

128GB

16.17GB

17.56GB

30.27GB

128GB

256GB

26.90GB

49.94GB

51.16GB

256GB

512GB

31GB

132.34GB

92.66GB

384GB

768GB

31GB

220.25GB

132.75GB

512GB

1024GB

31GB

308.55GB

172.45GB

表 4. Aura 非向量指定集群内存配置
实例大小 磁盘存储 页面缓存 剩余内存

32GB

64GB

10.39GB

11.13GB

10.48GB

64GB

128GB

20.57GB

23.43GB

20GB

128GB

256GB

29.60GB

70.40GB

28GB

256GB

512GB

31GB

180.20GB

44.8GB

384GB

768GB

31GB

293.20GB

59.8GB

512GB

1024GB

31GB

410.5GB

70.5GB

预热向量索引

Neo4j 向量索引仅在被访问时才加载到内存中。理想情况下,Lucene 向量索引在查询之前预加载到操作系统管理的内存中。但是,您也可以通过运行一些随机查询来预热索引,以帮助操作系统将索引加载到内存中。预热索引所需的查询数量取决于索引的大小和可用内存量。对于较小的索引(最多 100 万条目),五次查询应该足以将索引加载到内存中。

© . All rights reserved.