Neo4j节点创建速度

2024-06-19

我的笔记本电脑上有一个新的 neo4j 设置,通过 REST API 创建新节点似乎相当慢(平均约 30-40 毫秒)。我在谷歌上搜索了一下,但找不到任何真正的基准来衡量“应该”花多长时间;有这个帖子 https://www.arangodb.com/2015/06/performance-comparison-between-arangodb-mongodb-neo4j-and-orientdb/,但这仅列出了相对性能,而不是绝对性能。 neo4j 本质上仅限于每秒仅添加约 30 个新节点(在批处理模式之外),还是我的配置有问题?

配置详情:

  • Neo4j 版本 2.2.5
  • 服务器位于我的 2014 年中端笔记本电脑上,运行 Ubuntu 15.04
  • OpenJDK 版本 1.8
  • 对服务器的调用也来自我的笔记本电脑(通过 localhost:7474),因此不应该涉及任何网络延迟
  • 我通过 Clojure/Neocons 调用 neo4j;使用的方法是 clojurewerkz.neocons.rest.nodes 类中的“create”
  • 使用 Cypher 似乎更慢;例如。通过 HTML 界面调用“PROFILE CREATE (you:Person {name:"Jane Doe"}) RETURN you”会返回“Cypher 版本:CYPHER 2.2,规划器:RULE。54 毫秒内总共 5 次数据库命中”。

Neo4j 性能特征是一个棘手的领域。

测量性能

首先:这一切都取决于a lot关于如何配置服务器。在笔记本电脑上测量任何东西都是错误的方法。

在测量性能之前,您应该检查以下内容:

  1. 您有适当的服务器硬件(要求 http://neo4j.com/docs/stable/deployment-requirements.html)
  2. 客户端和服务器都在本地网络中。
  3. Neo4j 已正确配置(内存映射、Web 服务器线程池、Java 堆大小等)
  4. 服务器配置正确(Linux tcp 堆栈、最大可用打开文件数等)
  5. 服务器已预热。 Neo4j 是用 Java 编写的,因此您应该在测量数字之前进行适当的预热(即进行约 15 分钟的负载)。

最后一个 - 企业版。 Neo4j企业版有一些高级功能,可以大大提高性能(即高性能计算缓存 http://neo4j.com/docs/stable/configuration-caches.html).

Neo4j 内部

Neo4j 内部是:

  • Storage
  • Core API
  • 遍历API
  • 密码API

一切都是在没有任何额外网络请求的情况下执行的。新4jserver是建立在这个坚实的基础之上的。

因此,当您向 Neo4j 服务器发出请求时,您正在测量:

  • 客户端和服务器之间的延迟
  • JSON 序列化成本
  • 网络服务器(码头)
  • 用于管理锁、事务等的附加模块
  • 还有 Neo4j 本身

所以,这里的底线是 - 如果在嵌入模式下使用,Neo4j 本身相当快。但处理 Neo4j 服务器需要额外的成本。

Numbers

我们进行了内部 Neo4j 测试。我们测量了几个案例。

创建节点

在这里,我们使用普通的 Transactional Cypher REST API。

线程:2

Node per transaction: 1000  
Execution time: 1635  
Total nodes created: 7000000  
Nodes per second: 7070  

线程:5

Node per transaction: 750  
Execution time: 852  
Total nodes created: 7000000  
Nodes per second: 8215  

庞大的数据库同步

这个使用定制开发的非托管扩展 http://neo4j.com/docs/stable/server-unmanaged-extensions.html,服务器和客户端之间采用二进制协议以及一定的并发性。

但这仍然是 Neo4j 服务器(实际上 - Neo4j 集群)。

Node count: 80.32M (80 320 000)
Relationship count: 80.30M (80 300 000)
Property count: 257.78M (257 780 000)
Consumed time: 2142 seconds

Per second:
Nodes - 37497
Relationships - 37488
Properties - 120345

这个数字显示了 Neo4j 真正的力量。

我的号码

我现在尝试衡量性能

全新且未配置的数据库 (2.2.5),Ubuntu 14.04 (VM)。

Results:

$ ab -p post_loc.txt -T application/json -c 1 -n 10000 http://localhost:7474/db/data/node
This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Jetty(9.2.4.v20141103)
Server Hostname:        localhost
Server Port:            7474

Document Path:          /db/data/node
Document Length:        1245 bytes

Concurrency Level:      1
Time taken for tests:   14.082 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      14910000 bytes
Total body sent:        1460000
HTML transferred:       12450000 bytes
Requests per second:    710.13 [#/sec] (mean)
Time per request:       1.408 [ms] (mean)
Time per request:       1.408 [ms] (mean, across all concurrent requests)
Transfer rate:          1033.99 [Kbytes/sec] received
                        101.25 kb/s sent
                        1135.24 kb/s total

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.2      0      19
Processing:     1    1   1.3      1      53
Waiting:        0    1   1.2      1      53
Total:          1    1   1.3      1      54

Percentage of the requests served within a certain time (ms)
  50%      1
  66%      1
  75%      1
  80%      1
  90%      2
  95%      2
  98%      3
  99%      4
 100%     54 (longest request)

这个使用 REST API 创建 10000 个节点,1 个线程中没有属性。

正如您所看到的,在我的 Linux VM 笔记本电脑上发生的事件,使用默认设置 - Neo4j 能够在 4 毫秒或更短的时间内创建节点 (99%)。

Note:我之前已经预热过数据库(创建和删除了100K节点)。

Bolt

如果您正在寻找最佳的 Neo4j 性能,您应该遵循Bolt发展。这是 Neo4j 服务器的新二进制协议。

更多信息:here https://github.com/neo4j/neo4j-java-driver, here https://github.com/neo4j/neo4j-java-driver and here http://alpha.neotechnology.com.s3-website-eu-west-1.amazonaws.com/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Neo4j节点创建速度 的相关文章

随机推荐

  • 如何从spark中的hbase表中获取所有数据

    我在 hbase 中有一个大表 名称为 UserAction 它具有三个列族 歌曲 专辑 歌手 我需要从 歌曲 列族中获取所有数据作为 JavaRDD 对象 我尝试了这段代码 但效率不高 有更好的解决方案来做到这一点吗 static Spa
  • 如何在 *nix 中登录时运行脚本?

    我知道我曾经知道如何做到这一点 但是 如何在 unix 中登录时运行脚本 bash 可以 From 维基百科 Bash http en wikipedia org wiki Bash 28Unix shell 29 当 Bash 启动时 它
  • openApi schema 中不区分大小写的字符串参数

    我有一个开放的 API 规范 其参数如下 name platform in query description Platform of the application required true schema type string enu
  • 编写自定义 Eclipse 调试器

    EDIT 一定有某种方法可以解决这个问题 而无需编写全新的调试器 我目前正在研究在现有 java 调试器之上构建的方法 如果有人对如何获取 Java 调试器已有的信息 有关堆栈帧 变量 原始数据等 有任何想法 那将非常有帮助 我想要做的是我
  • 将 bignum 类型结构转换为人类可读字符串的有效方法是什么?

    我有一点问题 为了增长我的 C 知识 我决定尝试实现一个基本的 bigint 库 bigint 结构的核心将是一个 32 位整数数组 选择它们是因为它们适合寄存器 这将允许我在数字之间进行操作 这些操作将在 64 位整数中溢出 这也将适合寄
  • Windows CE 6.0 注册表中的时间设置

    我有一台装有 Windows CE 6 0 的 Motorola MC3100 移动条码扫描设备 现在我想让设备在启动时使用我创建的一些注册表文件与我们的域控制器同步其日期 时间 我使用了下面这两个注册表文件来接近我的需要 REG 1 HK
  • 是否有适用于 Haskell 或 Scala 等函数式语言的 LL 解析器生成器?

    我注意到明显缺乏用函数式语言创建解析器的 LL 解析器 我一直在寻找但没有成功的理想发现是为 ANTLR 风格的 LL 语法生成 Haskell 解析器 语法的模小数重新格式化 并且令我惊讶的是 每个最后一个解析器生成器都具有函数我发现的语
  • 无法通过usb调试安装android应用程序

    我知道这是一个老问题 但我第一次尝试在 Redmi note 4 上安装我的应用程序 每当我尝试安装时 它都会显示一个对话框 安装失败 并显示消息无法建立会话 通过卸载现有版本的 apk 如果存在 然后重新安装 可能可以解决此问题 警告 卸
  • 随机定位的 div,不重叠

    所有 div 都像我需要的那样 随机 放置 但它们偶尔会重叠 这只是一个机会问题 我怎样才能防止这种情况发生 理想情况下我能够设置它们之间的最小距离 我可以通过进一步开发当前的 javascript 来实现这一目标吗 我需要考虑完全不同的方
  • 核心数据:重命名属性,而不会导致用户及其当前数据出现问题

    我只想为我的应用程序的新版本重命名并在表上添加属性 并且如果应用程序已安装 我想保留数据 首先我只是设置选项 let options NSMigratePersistentStoresAutomaticallyOption true NSI
  • Laravel 迁移错误 :: PDOException,找不到驱动程序

    我正在尝试制作 Laravel 但在迁移时卡住了 当我在终端中输入 php artisan migrate 时 显示 PDOException 错误 附上我的终端和 phpinfo 的屏幕截图 这是什么问题 我该如何解决这个问题 我正在使用
  • 使用标志来识别口语

    在我正在做的网络应用程序中 我需要识别人们所说的语言 我想使用标志来做到这一点 但我有一些问题 例如 如果您说法语 则可以放置法国国旗 但如果您说英语 您可以放置 美国或英国国旗或两者的混合 阿拉伯语选择哪个标志 沙特阿拉伯国旗 阿尔及利亚
  • 响应式导航栏隐藏其下方的元素

    我创建了一个响应式导航栏 但它使下面的元素 Flexslider 插件 消失 在我制作导航栏之前 下面的 Flexslider 可以正常显示 但现在不行 导航栏的 z index 为 2 所以我不知道问题是什么 我应该如何 更改什么才能允许
  • 单元测试术语概述(存根与模拟、集成与交互)?

    我在我的项目中使用了更多的单元测试 并阅读了我可以在网上找到的所有信息 并且对很多术语感到困惑 因此 我可能在对话和谷歌搜索中错误地使用了这些术语 有人可以概述所有单元测试术语 例如 假 类型以及测试类型 交互与集成 吗 当谈到模拟 假货和
  • Angular 2访问组件内的ng-内容

    我怎样才能访问 content 来自组件类本身的组件 我想做这样的事情
  • 1.2.840.113556.1.4.1941 (LDAP_MATCHING_RULE_IN_CHAIN) 存在性能问题?

    LDAP 搜索有一些内置规则 其中之一是LDAP MATCHING RULE IN CHAIN From MSDN https msdn microsoft com en us library aa746475 v vs 85 aspx 1
  • 如何从 Laravel 中的表中选择所有列名称?

    我试图从表中获取所有列名Teller 功能 public function getTableColumns tables return DB select DB raw SELECT COLUMN NAME DATA TYPE COLUMN
  • 跨浏览器:禁用输入字段的不同行为(文本可以/不能复制)

    我有一个被禁用的输入 html 字段 在某些浏览器 Chrome Edge Internet Explorer 和 Opera 中可以选择并复制文本 但至少在 Firefox 中这是不可能的 您可以通过在不同浏览器中执行以下代码来测试
  • CKEditor 类被剥离

    我有一个自定义插件 它添加了一个带有附加类的链接 当我使用 源 按钮查看此内容时 它会显示该类并且看起来应有的样子 但是 当我返回 WYSYWIG 视图并再次查看源代码时 该类已被删除 知道如何阻止这种情况发生吗 在此先感谢您的帮助 Che
  • Neo4j节点创建速度

    我的笔记本电脑上有一个新的 neo4j 设置 通过 REST API 创建新节点似乎相当慢 平均约 30 40 毫秒 我在谷歌上搜索了一下 但找不到任何真正的基准来衡量 应该 花多长时间 有这个帖子 https www arangodb c