我正在研究工作项目的图形数据库。由于我们的数据高度连接,因此图形数据库似乎对我们来说是一个不错的选择。
我遇到的第一个图形DB选项之一是neo4j,在大多数情况下,我喜欢它。但是,我有一个关于neo4j的问题我无法找到答案:我可以让neo4j将整个图存储在内存中吗?如果是这样,如何配置?
我正在设计的应用程序需要闪电般快速。我无法等待数据库转到磁盘来检索我正在搜索的数据。我需要将整个数据库保存在内存中以减少查询时间。
有没有办法将整个neo4j数据库保存在内存中?
谢谢!
答案 0 :(得分:8)
继Bruno Peres'回答,如果您想运行常规服务器实例,Neo4j 将 在资源充足时将整个图表加载到内存中。这确实提高了性能。
Manual有一章介绍配置内存。
页面缓存部分包含图形数据和索引 - 这是通过dbms.memory.pagecache.size
中的neo4j.conf
属性配置的。如果足够大,整个图形将存储在内存中。
堆空间部分用于查询执行,状态管理等。这是通过dbms.memory.heap.initial_size
和设置的
dbms.memory.heap.max_size
属性。通常,这两个属性应设置为相同的值,以便在启动时分配整个堆。
如果服务器的唯一目的是运行Neo4j,您可以将大部分内存分配给堆和页面缓存,留下足够的剩余空间用于操作系统任务。
在内存中保存非常大的图
在2016年旧金山的Graph Connect上,Neo4j的首席技术官Jim Webber以其典型的娱乐方式,详细介绍了具有大量高性能内存的服务器 - 能够持有内存中的整个大图。他似乎对他们印象深刻。我忘记了机器的名称,但如果您有兴趣,视频存档应该有详细信息。
答案 1 :(得分:8)
Neo4j并不是为了将整个图形保存在主存储器中而设计的。这给你留下了几个选择。您可以使用配置参数(如Jasper Blues已详细说明)或者您可以配置Neo4j以使用RAMDisk。
第一个选项可能无法为您提供最佳性能,因为只有缓存保存在内存中。
第二种方法面临的挑战是一切都在内存中,这意味着系统不耐用且写入效率低下。
您可以查看Memgraph(免责声明:我是联合创始人兼首席技术官)。 Memgraph是一个高性能的内存中事务图数据库,它与openCypher和Bolt兼容。在写入磁盘之前,数据首先存储在主存储器中。换句话说,您可以选择在写入速度和安全性之间进行权衡。