首先,为我在这方面的知识不足道歉,我的激情是开发新的有用的应用程序而不是配置云服务器:)我花了一天的时间试图找出在Windows上运行Neo4j服务器的最佳配置,但没有任何成功:(我正在使用这篇优秀的博客文章中的方法将简单的节点写到一个空的数据库中:
http://maxdemarzi.com/2013/02/14/neo4j-and-gatling-sitting-in-a-tree-performance-t-e-s-t-ing/
模拟40个用户,每个用户发布250个新节点,我得到了下面的结果(很糟糕?)不同机器上的结果:
Windows Azure虚拟机A1 1,75 ms 1CPU核心: 41请求/秒814毫秒平均响应时间
Windows Azure虚拟机A2 3,50 ms 2CPU核心: 41请求/秒971毫秒平均响应时间
Windows本地计算机8 8GB英特尔B950 2.10 175 : 181请求/秒175毫秒平均响应时间
Windows本地计算机4 4GB i7-3537U 2.00 280 : 140 req/s 280 ms平均响应时间
因此,这提出了一些显而易见的问题。为什么A1和A2有相似的结果?为什么我的本地4 4GB机器的性能比A2好这么多?
我已经尝试在没有任何重大性能变化的情况下将wrapper.java.initmemory和wrapper.java.maxmemory更改为1024、2048和3072。我还尝试调整内存映射的缓冲区大小,但没有成功。我的问题是我在Windows上运行吗?难道我不能用这些机器得到更好的结果吗?真的不知道从哪里开始,任何建议都将不胜感激!
发布于 2014-10-06 07:54:36
关于你的问题,你可以期待什么:
对于仅仅创建节点(尽管每次创建都是一个单独的事务),如果您使用带参数的cypher,您应该可以轻松地远程达到1k到2k请求/秒。
如果你批量,你应该很容易得到更多,这是我最近做的一个测试。
JSON数据生成器:https://dl.dropboxusercontent.com/u/14493611/cypher.rb
执行1000个请求,每个请求100个节点,4个并发用户。
ab -H "X-Stream: true" -k -n 1000 -c 4 -p cypher_100.json \
-T 'application/json' -H "Accept: application/json" \
http://127.0.0.1:7474/db/data/transaction/commit100k节点为18秒
发布于 2014-10-06 23:29:31
按照迈克尔斯的建议,我在一台Azure A2 Linux机器上设置了ne4j-enterprise-2.1.5,并测试了同样简单的10000个节点的创建:
class CreateSimpleNodes extends Simulation {
val httpConf = httpConfig
.baseURL("http://xxxxx.cloudapp.net:7474")
.acceptHeader("application/json")
val createNode = """{"query": "create me"}"""
val scn = scenario("Create Nodes")
.repeat(250) {
exec(
http("create node")
.post("/db/data/cypher")
.body(createNode)
.asJSON
.check(status.is(200)))
.pause(0 milliseconds, 1 milliseconds)
}
setUp(
scn.users(40).protocolConfig(httpConf)
)
}实际上,它的性能比微软的A2还要差。它仅管理24个请求/秒,平均为1655毫秒。现在我感觉比以前更困惑了:)尤其是看到上面的迈克尔斯基准数字,测试代码有什么问题吗?显而易见的问题仍然是一个谜,为什么A1和A2的结果是相似的,为什么我的本地4 4GB机器的性能比A2好得多?
https://stackoverflow.com/questions/26205521
复制相似问题