Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform Neo4j本地与云的性能差异_Google Cloud Platform_Neo4j_Virtual Machine - Fatal编程技术网

Google cloud platform Neo4j本地与云的性能差异

Google cloud platform Neo4j本地与云的性能差异,google-cloud-platform,neo4j,virtual-machine,Google Cloud Platform,Neo4j,Virtual Machine,在VirtualBox托管的VM上运行的本地Neo4j实例与Google Cloud(GCP)中托管的基本相同的Neo4j实例之间,我遇到了巨大的性能差异。该任务涉及从同样位于GCP中的Postgres实例执行简单加载。整个加载过程在VirtualBox托管的VM实例上需要1-2分钟,在GCP VM实例上需要1-2小时。本地硬件设置是一个运行VirtualBox 6.1的10年的8核16GB桌面 通过VirtualBox和GCP,我可以执行以下类似任务: 提供一个4核8GB Ubuntu 18

在VirtualBox托管的VM上运行的本地Neo4j实例与Google Cloud(GCP)中托管的基本相同的Neo4j实例之间,我遇到了巨大的性能差异。该任务涉及从同样位于GCP中的Postgres实例执行简单加载。整个加载过程在VirtualBox托管的VM实例上需要1-2分钟,在GCP VM实例上需要1-2小时。本地硬件设置是一个运行VirtualBox 6.1的10年的8核16GB桌面

通过VirtualBox和GCP,我可以执行以下类似任务:

  • 提供一个4核8GB Ubuntu 18 LTS实例

  • 安装Neo4j社区版4.0.2

  • 使用wget将最新的apoc和postgresjdbcjar下载到pluginsdir中

  • (只有在GCP中,neo4j.conf文件才从默认值更改。我取消了“dbms.default\u listen\u address=0.0.0”行的注释,以允许非本地主机连接。还创建了相应的GCP防火墙规则)

  • 重新启动neo4j服务

  • 安装并启动硬件监控的htop和iotop

  • 通过broswer控制台登录到空的neo4j实例

  • 加载jdbc驱动程序并运行load语句

  • load语句使用apoc.periodic.iterate调用apoc.load.jdbc。我在这两种环境中都改变了“batchSize”参数,从100到10000,但在这两种系统中都只看到了细微的变化。“parallel”参数设置为false,因为true会导致锁定错误

    观察网络I/O,两种方法都需要15-25秒的时间从数据库表中提取700k行(8列)。观察CPU,两者都将一个内核的最大值保持在100%,而另一个内核的最大值在0-100%之间。查看内存时,两者都不会占用超过4GB的内存,并且交换保持在0。起初,我确实使用了“neo4j admin memrec”中的配置建议,但这些建议似乎并没有显著改变mem的使用情况或总体执行时间

    看磁盘,那是有区别的地方。但我认为这些是症状,而不是根本原因:本地VM在整个执行时间(1-2分钟)内始终写入1-2MB/s。GCP VM突发每20-30秒写入300-400 KB/s,持续1秒。但我不认为GCP磁盘速度慢或有问题(我已经试过使用GCP的标准磁盘和SSD磁盘)。如果GCP磁盘速度较慢,我希望看到持续的写入活动和巨大的磁盘写入队列。似乎每当有什么东西应该写入磁盘时,它就会在GCP中快速完成。似乎瓶颈在磁盘写入之前


    我所能想到的是,我10年前的内核比当前的GCP vCPU快得多,或者是内存堆问题。我对java了解不多,除了堆很重要而且很挑剔。

    两个系统上的模式是否完全相同?如果您缺少负载查询中使用的关键索引,该索引可以很容易地解释您所看到的差异


    例如,如果使用某个属性对节点进行匹配或合并,则通过索引快速查找节点,或对该标签的所有节点执行标签扫描,检查每个节点是否存在或是否是正确的节点,两者之间存在差异。还要了解,此过程对每一行都重复,因此在最坏的情况下,它不是单个标签扫描,而是n倍的扫描。

    两个系统上的模式是否完全相同?如果您缺少负载查询中使用的关键索引,该索引可以很容易地解释您所看到的差异


    例如,如果使用某个属性对节点进行匹配或合并,则通过索引快速查找节点,或对该标签的所有节点执行标签扫描,检查每个节点是否存在或是否是正确的节点,两者之间存在差异。还要了解,此过程对每一行都重复,因此在最坏的情况下,它不是单个标签扫描,而是n倍。

    两个系统上的模式是否完全相同?如果您缺少负载查询中使用的关键索引,该索引可以很容易地解释您所看到的差异。例如,如果使用某个属性对节点进行匹配或合并,则通过索引快速查找节点,或对该标签的所有节点执行标签扫描,检查每个节点是否存在或是否是正确的节点,两者之间存在差异。还要了解,这个过程会对每一行重复,所以在最坏的情况下,它不是单个标签扫描,而是n倍。1。您的VirtualBox虚拟机和GCP虚拟机上是否有相同数量的内核和相同数量的RAM?2.您是否在本地计算机上使用SSD或HDD?请看一看“持久磁盘性能是可预测的,并随着配置的容量线性扩展,直到达到实例配置的VCPU的限制”,以及“当您需要更多磁盘空间或更好的性能时,请调整磁盘大小,并可能添加更多VCPU,以增加更多存储空间、吞吐量和IOPS”也请选中。选择proper@InverseFalcon,我相信您是对的,我的本地实例确实有几个索引(我认为我早就放弃了这些索引)。GCP实例不会。我今天会证明你的理论。如果我有选择的话,然后接受你的答案。我是新来的,所以我看不到接受答案功能。@InverseFalcon你的建议奏效了。将这些索引应用到GCP云中会使它与本地实例同时完成。我会接受你的答案,但我不会o似乎没有权限。两个系统上是否有完全相同的:架构?如果您缺少负载查询中使用的关键索引,该索引可以轻松解释您看到的差异。例如,如果您使用某个属性对节点进行匹配或合并,则通过索引