在 RAM 中保存整个 Neo4j 图形数据库?

Hold entire Neo4j graph database in RAM?

我正在为一个工作项目研究图形数据库。由于我们的数据是高度关联的,看来图数据库对我们来说是个不错的选择。

我 运行 使用的第一个图形数据库选项是 neo4j,在大多数情况下,我喜欢它。但是,我有一个关于 neo4j 的问题,我找不到答案:Can I get neo4j to store the entire graph in-memory?如果可以,如何配置?

我正在设计的应用程序需要快如闪电。我不能等待数据库进入磁盘以检索我正在搜索的数据。我需要将整个数据库保存在内存中以减少查询时间。

有没有办法在内存中保存整个 neo4j 数据库?

谢谢!

根据 B运行o Peres 的回答,如果您想 运行 一个常规服务器实例,Neo4j 资源充足时将整个图加载到内存中。这确实提高了性能。

Manual有一章是关于配置内存的。

页面缓存部分保存图形数据和索引 - 这是通过 neo4j.conf 中的 dbms.memory.pagecache.size 属性 配置的。如果足够大,整个图将存储在内存中。

堆 space 部分用于查询执行、状态管理等。这是通过 dbms.memory.heap.initial_sizedbms.memory.heap.max_size 属性。通常这两个属性应设置为相同的值,以便在启动时分配整个堆。

如果服务器的唯一目的是 运行 Neo4j,您可以将大部分内存分配给堆和页面缓存,为操作系统任务留出足够的空间。

在内存中保存非常大的图

在 2016 年旧金山的 Graph Connect 上,Neo4j 的首席技术官 Jim Webber 以他典型的娱乐方式详细介绍了具有大量高性能内存的服务器 - 能够容纳整个大型内存中的图形。他似乎对他们印象深刻。我忘记了机器的名称,但如果您有兴趣,视频档案应该有详细信息。

Neo4j 并非旨在将整个图形保存在主内存中。这给您留下了几个选择。您可以使用配置参数(如 Jasper Blues 已经更详细地解释)或者您可以配置 Neo4j 以使用 RAMDisk。

第一个选项可能不会为您提供最佳性能,因为只有缓存保存在内存中。

第二种方法的挑战在于所有内容都在内存中,这意味着系统不耐用且写入效率低下。

你可以看看Memgraph (DISCLAIMER: I'm the co-founder and CTO). Memgraph is a high-performance, in-memory transactional graph database and it's openCypher and Bolt兼容。数据在写入磁盘之前首先存储在主内存中。换句话说,您可以选择在写入速度和安全性之间进行权衡。