我是Neo4j和图形数据库的新手。说,我有大约40000个独立的图表使用批量插入上传到neo4j数据库,到目前为止一切顺利。我当前的数据库文件夹大小是180Gb,问题是查询,这太慢了。只需计算节点数,就需要永远。我使用的是1TB内存和40个内核的服务器,因此我想将整个数据库加载到内存中并对其执行查询。
我已经查看了配置但不确定我应该将整个数据库缓存到内存中的更改。所以请建议我应该修改的属性。
我也注意到大多数时候Neo4j只使用一个或两个核心,我怎样才能增加它?
我正在使用大学研究项目的免费版本因此我无法使用高性能缓存是否有免费版本的替代品?
我的解决方案: 我在我的数据库中添加了更多图表,现在我的数据库大小为400GB,节点数超过10亿。我接受了Stefan的评论并使用java API访问我的数据库并将我的数据库移动到RAM磁盘。遍历所有节点并从每个节点收集信息需要3个小时。
RAM磁盘和Java API大大提升了性能。
答案 0 :(得分:0)
对图中的节点进行计数是一项全局操作,显然需要触及每个节点。如果未填充缓存(或未根据数据集进行配置),则硬盘的驱动器是影响最大的因素。
要加快速度,请确保有效配置缓存,请参阅http://neo4j.com/docs/stable/configuration-caches.html。
使用当前版本的Neo4j,Cypher查询以单线程模式遍历图形。由于大多数图形应用程序同时被多个用户使用,因此该模型使可用内核饱和。
如果要运行单线程多线程查询,则需要使用Java API。
一般来说,Neo4j社区版在超过4个核心的扩展方面存在一些限制(由于企业版中更高性能的锁管理器实现)。企业版中的HPC(高性能缓存)也显着降低了完整垃圾收集的影响。
答案 1 :(得分:0)
您使用的是什么Neo4j版本?
请分享您当前的配置(conf / *和data / graph.db / messages.log),您可以使用Neo4j企业的个人版。
您想要运行哪些用例?
计算所有节点可能不是您的主要操作(Java API中有一些方法可以使它更快)。
为了实现高效的多核使用,请运行多个客户端或编写在使用ThreadPools进行遍历期间使用更多核心的java代码。