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

问题描述 投票:10回答:2

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

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

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

有没有办法将整个neo4j DB保存在内存中?

谢谢!

neo4j graph-databases
2个回答
8
投票

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

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

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

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


8
投票

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

Manual有一章关于配置内存。

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

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

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

Memory Configuration

在内存中持有非常大的图形

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

© www.soinside.com 2019 - 2024. All rights reserved.