【发布时间】: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 驱动程序中。
-
也许这就是我需要的。我会了解的
标签: javascript mysql neo4j bigdata