我想在 neo4j 上运行一些测试,并将其性能与其他数据库(在本例中为 postgresql)进行比较。
这个 postgres 数据库有大约 2000000 个“内容”,分布在大约 3000 个“类别”中。(这意味着有一个表“内容”、一个“类别”和一个关系表“内容到类别”,因为一个内容可以属于多个类别)。因此,将其映射到 neo4j 数据库,我正在创建节点“内容”、“类别”及其关系(内容到类别和内容到内容,因为内容可以具有相关内容)。
类别 -> 类别(类别可以有子类别)
内容 -> 类别
内容 -> 内容(相关)
您认为这种“模式”适用于这种类型的域吗?
从 postgresql 迁移所有数据做 neo4j:它需要永远(大约 4、5 天)。这只是对节点的一些搜索并相应地创建/更新。(如果每个节点需要 500 毫秒,则搜索使用索引和插入/更新)我做错了吗?
迁移完成了,所以我去尝试一些查询......我最终得到了大约 2000000 个内容节点、3000 个类别节点和超过 4000000 个关系。
(请注意,我是 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,并自动索引一些节点属性(包括类型、代码、状态、定义代码和发布的戳记 - 标题未自动索引)
此外,在上一个查询中返回“c”( start c = node : node_auto_index( 'type: category AND code : category-code' ) return c; )
很快(同样,不包括第一次运行,这需要大约 20-30 毫秒),我不确定这是否是使用索引的正确方法......
提前谢谢你(对不起,如果有些事情没有意义 - 问我,我会尽力解释得更好)。