OrientDB vs Neo4j,简单的压力测试

时间:2015-12-11 09:15:07

标签: neo4j orientdb stress-testing

我发帖是因为我在强调Neo4j 2.2.7和OrientDB 2.1.4时遇到了奇怪的结果而我正在寻找解释(我很确定没有错误代码,但如果有人感兴趣,我很乐意分享它)。 以下是事实:

  1. 我不断向DB发送以下OSql和Cypher查询,这些查询是等效的(属性名称除外)

    • SELECT both('Meets').email FROM Employee WHERE nt_account = '<employeeid>'
    • MATCH (e: Employee {Nt_Account: '<employeeid>'}) -[:MEETS]- (y: Employee) RETURN y.E_Mail
  2. nt_accountNt_Account都已编入索引。

  3. 查询的执行时间,平均超过100次重复,是:

    • OrientDB:4.4ms
    • Neo4j:7.6ms
  4. 使用AKKA演员

  5. 并行执行
  6. 尽管有以前的观点,当我从一个线程连续拍摄上述查询时,我测量到Neo4j可以提供约59k的请求,而OrientDB可以提供~16k的请求。

  7. OrientDB可以提供的请求数量始终比Neo4j低3到5倍。

  8. 你可以想象,第5点和第6点让我感到震惊,因为我期待OrientDB提供的请求数量最多,因为它可以在几乎一半的时间内执行查询。

    有没有人知道发生了什么? 在返回查询结果后,OrientDB是否正在执行某些操作? 我没有正确使用API​​吗?

    更详细信息:

    以下是我在OrientDB中执行查询的方法(我找到了这个here):

    val start = System.currentTimeMillis()
    graph.command(new OCommandSQL(<the_query>)).execute()
    val ellapsedTime = System.currentTimeMillis() - start
    

    graph是一个OrientGraphNoTx实例,每个actor都有一个这样的实例。 通过使用OrientGraph和使用REST API稍微降低了一些请求,我得到了可比较的结果。

    这是我用来执行Neo4j查询的方法(注意我关闭了JSON流):

    def queryRest(query: String): Unit = {
      val reqData = s"""{"statements" : [ { "statement" : "$query" } ] }"""
      val response = Http("http://localhost:7474/db/data/transaction/commit")
        .postData(reqData)
        .header("content-type", "application/json")
        .header("accept", "application/json;stream=false")
        .asString.body.length
    }
    

    以下是测量结果(两个表格的最后一行没有太大意义,因为我实现的并行度的有效水平computation_time / 1minute仅为~12)。 my results

0 个答案:

没有答案