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

jtc*_*n63 11 neo4j graph-databases

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

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

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

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

谢谢!

bud*_*uda 9

Neo4j并非设计用于将整个图形保存在主存储器中.这给你留下了几个选择.你可以使用配置参数(正如Jasper Blues已经详细解释过的那样)或者你可以配置Neo4j来使用RAMDisk.

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

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

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

  • Memgraph默认将数据存储在主存储器中.无需额外配置.如果您想试用Memgraph,请注册早期访问. (4认同)
  • @ jtcotton63目前,v0.8可用.v0.9支持预写日志,UNION将于下周发布. (3认同)
  • 实际上,这是错误的*.如果内存可用,Neo4j将整个数据库保存在RAM中.贾斯帕是对的.此外,Neo4j的数据处理始终是安全的,因为它是事务性的磁盘. (2认同)

Jas*_*ues 8

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

手册有一章介绍配置内存.

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

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

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

内存配置

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

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

  • 对于启动后的初始加载,您可以运行“call apoc.warmup.run()”,将数据库加载到内存中。 (2认同)