从 MySQL 导出到 Neo4j
Posted
技术标签:
【中文标题】从 MySQL 导出到 Neo4j【英文标题】:Export from MySQL to Neo4j 【发布时间】:2013-11-20 19:55:10 【问题描述】:我有这样的问题。 我在 mysql 中有大数据库 - ***的所有页面。 我想构建所有页面的图表(近 100 万个页面是真实页面,而不是重定向等)以及指向其他页面的链接。 所以为此我想使用neo4j。 我试图用这样的代码来做到这一点
var neo4j = require('neo4j');
neo4j = new neo4j.GraphDatabase('http://localhost:7474');
var mysql = require('mysql');
var connection = mysql.createConnection(
host: 'localhost',
user: 'root',
password: '******',
database: 'wiki-wizualizer'
);
connection.connect();
var numberOfPages = 0;
// Number of pages from DB
connection.query("SELECT COUNT(1) AS number FROM page WHERE page.page_is_redirect = false AND page.page_namespace = 0", function (err, rows, fields)
numberOfPages = rows[0].number;
var per_page = 10;
var n = numberOfPages;
var k = 0;
for (var i = 0; i < parseInt((n + per_page - 1) / per_page) && i < parseInt((numberOfPages + per_page - 1) / per_page); i++)
// Query for selecting vertices
var q = "SELECT page.page_id AS page_id, page.page_title AS title FROM page " +
"WHERE page.page_id > " + per_page * i + " AND page.page_id <= " + per_page * (i + 1) + " AND page.page_is_redirect = false AND " +
"page.page_namespace = 0 ORDER BY page_id LIMIT " + per_page;
connection.query(q, function (err, rows, fields)
// Progress
console.log('' + (k / parseInt((n + per_page - 1) / per_page) * 100).toFixed(2) + '%');
k += 1;
for (var j = 0; j < rows.length; j++)
var node = neo4j.createNode(title: rows[j].title); // instantaneous, but...
node.save(function (err, node)
);
);
);
connection.end();
但这需要太多时间(它每分钟只创建 700 个顶点)。 我将所有数据(MySQL 和 neo4j)存储在单个 HDD 上。 有什么方法可以加快速度吗? 如果我将 neo4j 移到 SSD 会有帮助吗?
【问题讨论】:
你看过批量插入吗?我不确定这是否存在于 node.js 驱动程序中。 也许这就是我需要的。我会了解的 【参考方案1】:查看:http://neo4j.org/develop/import
特别是。 CSV 批量导入器,它可以帮助您轻松生成代表节点和关系的 csv 文件,然后直接导入它们。
有关使用密码导入数据的更多信息,请查看:http://jexp.de/blog/2013/05/on-importing-data-in-neo4j-blog-series/
【讨论】:
以上是关于从 MySQL 导出到 Neo4j的主要内容,如果未能解决你的问题,请参考以下文章
ArangoDB - 如何将neo4j数据库导出导入ArangoDB