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

时间:2017-12-12 01:31:49

标签: neo4j graph-databases

我正在研究工作项目的图形数据库。由于我们的数据高度连接,因此图形数据库似乎对我们来说是一个不错的选择。

我遇到的第一个图形DB选项之一是neo4j,在大多数情况下,我喜欢它。但是,我有一个关于neo4j的问题我无法找到答案:我可以让neo4j将整个图存储在内存中吗?如果是这样,如何配置?

我正在设计的应用程序需要闪电般快速。我无法等待数据库转到磁盘来检索我正在搜索的数据。我需要将整个数据库保存在内存中以减少查询时间。

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

谢谢!

2 个答案:

答案 0 :(得分:8)

继Bruno Peres'回答,如果您想运行常规服务器实例,Neo4j 在资源充足时将整个图表加载到内存中。这确实提高了性能。

Manual有一章介绍配置内存。

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

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

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

Memory Configuration

在内存中保存非常大的图

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

答案 1 :(得分:8)

Neo4j并不是为了将整个图形保存在主存储器中而设计的。这给你留下了几个选择。您可以使用配置参数(如Jasper Blues已详细说明)或者您可以配置Neo4j以使用RAMDisk。

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

第二种方法面临的挑战是一切都在内存中,这意味着系统不耐用且写入效率低下。

您可以查看Memgraph(免责声明:我是联合创始人兼首席技术官)。 Memgraph是一个高性能的内存中事务图数据库,它与openCypherBolt兼容。在写入磁盘之前,数据首先存储在主存储器中。换句话说,您可以选择在写入速度和安全性之间进行权衡。