Neo4j表现 - 真的很快吗?

时间:2013-09-13 22:00:30

标签: neo4j

我想在neo4j上运行一些测试,并将其性能与其他数据库进行比较,在本例中为postgresql。

这个postgres数据库有大约2000000'内容分布在3000'类别'。 (这意味着有一个表'内容',一个'类别'和一个关系表'内容到类别',因为一个内容可以在一个以上的类别中)。 因此,将其映射到neo4j数据库,我正在创建节点“内容”,“类别”及其关系(内容到类别,内容到内容,导致内容可以包含相关内容)。

类别 - >类别(类别可以有子类别)

内容 - >类

内容 - >内容(相关)

您认为这种“架构”适用于此类域名吗?

  1. 从postgresql迁移所有数据做neo4j:它需要永远(约4天,5天)。这只是一些搜索节点并相应地创建/更新。 (搜索使用索引和插入/更新,如果每个节点花费500毫秒) 我做错了吗?

  2. 迁移已经完成,所以我去尝试一些查询...... 我最终得到了大约2000000个内容节点,3000个类别节点和超过4000000个关系。

  3. (请注意我是所有这个neo4j世界的新手,所以我不知道如何优化密码查询......)

    我想测试的一个查询是:获取给定类别中给定“定义”的10个最新发布内容(包括给定类别的子类别中的内容)

    尝试了一点,我最终得到了这样的东西:

    START 
      c = node : node_auto_index( 'type: category AND code: category_code' ),
      n = node : node_auto_index( 'type: content AND state: published AND definitionCode: definition_name' )
    MATCH (c) <- [ r:BELONGS_TO * ] - (n)
    RETURN n.published_stamp, n.title
    ORDER BY n.published_stamp DESC
    LIMIT 6
    

    这需要大约3秒,不包括第一次运行,这需要更多......这是正常的吗?

    我做错了什么?

    请注意我正在使用neo4j 1.9.2,并自动索引一些节点属性(包括类型,代码,状态,definitionCode和published_stamp - 标题未自动编入索引)

    同样,在前一个查询( start c = node : node_auto_index( 'type: category AND code : category-code' ) return c; )上返回“c”的速度很快(再次排除第一次运行,需要20-30毫秒) 另外,我不确定这是否是使用索引的正确方法......

    提前谢谢(对不起,如果事情没有意义 - 请问我,我会尝试更好地解释)。

3 个答案:

答案 0 :(得分:2)

您是否查看了批量导入工具:http://www.neo4j.org/develop/import?你真的应该看一下初次导入 - 它需要几分钟而不是几天。

我会请一些技术人员回复你的其他一些事情。你真的不应该看到这个。

里克多维

答案 1 :(得分:1)

这返回了多少个节点?

START 
  n = node : node_auto_index( 'type: content AND state: published AND definitionCode: definition_name' )
RETURN count(*)

我会尝试让图表完成工作。 你的等级通常有多深? 通常,您将任意长度关系限制为不具有组合爆炸: 我也会在内容和类别之间使用与类别树不同的关系类型。 你能指出你目前的关系类型吗?

START 
  c = node : node_auto_index( 'type: category AND code: category_code' ),
MATCH (c) <- [:BELONGS_TO*5] - (n)
WHERE n.type = 'content' AND n.state='published' and n.definitionCode = 'definition_name'
RETURN n.published_stamp, n.title
ORDER BY n.published_stamp DESC
LIMIT 6

你能试试吗?

对于导入,最简单的方法是从SQL生成CSV并使用http://github.com/jexp/batch-import

导入

答案 2 :(得分:0)

您是在运行Linux,也许是在ext4文件系统上运行?

您可能需要设置barrier = 0挂载选项,如下所述:http://structr.org/blog/neo4j-performance-on-ext4

对此主题的进一步讨论:https://groups.google.com/forum/#!topic/neo4j/nflUyBsRKyY