【问题标题】:Neo4j CSV import status updatesNeo4j CSV 导入状态更新
【发布时间】:2015-01-04 07:21:01
【问题描述】:

所以我正在尝试从 Mysql 数据库迁移到 neo4j 数据库。对于新的 neo4j 数据库,我计划了新闻提要功能,如下所述http://neo4j.com/docs/stable/cypher-cookbook-newsfeed.html 这种机制显然与 mysql 不同,后者的新闻提要只是一堆行。那么有没有办法将mysql行以-[status_update]->()-[next]->()-格式快速导入neo4j呢?目前我有 mysql 数据库,如下所示:

user table
+-------+--------------+
| id    | username     |
+-------+--------------+
| 1     | pewpewlasers |
+-------+--------------+

posts table
+-------+----------+------------+
| id    | user_id  | status     |
+-------+----------+------------+
| 1     | 1        | something  |
+-------+----------+------------+
| 2     | 1        | new update |
+-------+----------+------------+

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    如果您将其输出为 CSV,您可以像这样使用 LOAD CSV

    USING PERIODIC COMMIT 1000
    LOAD CSV WITH HEADERS FROM "file:///path/to/file/user.csv" AS line
    CREATE (:User {id: toInt(line.id), username: line.username});
    
    USING PERIODIC COMMIT 1000
    LOAD CSV WITH HEADERS FROM "file:///path/to/file/posts.csv" AS line
    CREATE (:Post {id: toInt(line.id), line.status});
    
    USING PERIODIC COMMIT 1000
    LOAD CSV WITH HEADERS FROM "file:///path/to/file/posts.csv" AS line
    MATCH (user:User {id: toInt(line.user_id)})
    MATCH (post:Post {id: toInt(line.id)})
    CREATE user-[:status_update]->post;
    
    USING PERIODIC COMMIT 1000
    LOAD CSV WITH HEADERS FROM "file:///path/to/file/posts.csv" AS line
    MATCH
      (post:Post {id: toInt(line.id)})
      (previous_post:Post {id: toInt(line.id) - 1})
    CREATE previous_post-[:next]->post;
    

    您也许可以组合其中的一些,但由于此处提到的 EAGER 问题,我总是小心地拆分查询:

    http://www.markhneedham.com/blog/2014/10/23/neo4j-cypher-avoiding-the-eager/

    【讨论】:

    • 不得不改变一些事情,但这是一个不错的想法。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多