-
Notifications
You must be signed in to change notification settings - Fork 12
/
initTreeData.js
85 lines (78 loc) · 2.02 KB
/
initTreeData.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
const fs = require('fs')
const sqlite3 = require('sqlite3').verbose()
let db
// 连接数据库
function conn () {
if (!db || !db.open) {
db = new sqlite3.Database('base.db')
}
return db
}
// 初始化数据表
function initTable () {
return new Promise((resolve, reject) => {
let db = conn()
db.serialize(() => {
db.run('CREATE TABLE if not exists TreeTable (id int primary key, name varchar(64), fatherId int)')
resolve()
})
})
}
function insertTree (nodes) {
return new Promise((resolve, reject) => {
console.time('insertTree')
let db = conn()
db.serialize(() => {
db.run('BEGIN')
let prepare = db.prepare('replace into TreeTable (id, name, fatherId) values (?, ?, ?)')
nodes.forEach(node => {
prepare.run(node.id, node.name, node.fatherId)
})
prepare.finalize(err => {
if (!err) {
db.run('COMMIT')
console.timeEnd('insertTree')
resolve()
}
})
})
})
}
function queryTree () {
return new Promise((resolve, reject) => {
let db = conn()
db.all('select * from TreeTable', (err, rows) => {
if (!err) {
resolve(rows || [])
}
})
})
}
function initData () {
console.time('initData')
let tree = []
let topNode = {
id: 1,
name: 'node1',
fatherId: 0
}
tree.push(topNode)
while (tree.length < 70000) {
let i = tree.length
let node = {
id: i + 1,
name: `node${i + 1}`,
fatherId: tree[parseInt(Math.random() * i, 10)].id
}
tree.push(node)
}
console.timeEnd('initData')
insertTree(tree)
}
async function writeTree () {
let filename = 'tree.json'
let tree = await queryTree()
fs.writeFileSync(filename, `var nodes = ${JSON.stringify(tree)}`)
console.log(tree.length)
}
writeTree()