datafolder 1.0.2 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +34 -31
- package/index.js +1 -3
- package/package.json +5 -3
- package/sample.js +37 -37
- package/scripts/airbnb.js +10 -11
- package/scripts/airbnb2.js +10 -11
- package/scripts/airbnb2_queries.js +20 -22
- package/scripts/airbnb_queries.js +23 -22
- package/scripts/downloadFile.js +29 -31
- package/scripts/express.js +7 -5
- package/scripts/fastify.js +12 -11
- package/scripts/flights.js +9 -9
- package/scripts/flights2.js +9 -9
- package/scripts/flights2_queries.js +107 -105
- package/scripts/flights_queries.js +113 -109
- package/src/QyAcl.js +153 -152
- package/src/QyAclSaver.js +16 -10
- package/src/QyAclSaver_Worker.js +21 -15
- package/src/QyAclWriter.js +23 -13
- package/src/QyBatch.js +298 -263
- package/src/QyBinWriter.js +49 -37
- package/src/QyCD.js +13 -14
- package/src/QyCache.js +177 -140
- package/src/QyCompressor.js +71 -45
- package/src/QyCompressor_Worker.js +17 -9
- package/src/QyDB.js +67 -12
- package/src/QyDefaultOptions.js +13 -10
- package/src/QyDir.js +89 -53
- package/src/QyFetch.js +27 -24
- package/src/QyFile.js +89 -77
- package/src/QyFileContentUtils.js +129 -132
- package/src/QyFileLogger.js +63 -41
- package/src/QyIndex.js +175 -197
- package/src/QyIndexPropTree.js +25 -25
- package/src/QyIntersectNode.js +34 -31
- package/src/QyItem.js +54 -52
- package/src/QyJsonSaver.js +12 -6
- package/src/QyKVData.js +279 -245
- package/src/QyKVDataCleaner.js +12 -6
- package/src/QyKVDataCleaner_Worker.js +77 -59
- package/src/QyKVDataLoader.js +67 -46
- package/src/QyKVDataSaver.js +15 -9
- package/src/QyKVDataSaver_Worker.js +83 -60
- package/src/QyLogFileSaver.js +12 -6
- package/src/QyLogFileSaver_Worker.js +24 -14
- package/src/QyLogger.js +51 -40
- package/src/QyMessageWorker.js +43 -29
- package/src/QyMessager.js +74 -54
- package/src/QyMessager_Run.js +20 -7
- package/src/QyMod.js +15 -11
- package/src/QyOpRunner.js +58 -41
- package/src/QyQueue.js +35 -30
- package/src/QySaver.js +52 -29
- package/src/QySnapshotCompactor.js +15 -9
- package/src/QySnapshotCompactor_Worker.js +131 -110
- package/src/QySnapshotSaver.js +15 -9
- package/src/QySnapshotSaver_Worker.js +125 -110
- package/src/QySnapshots.js +264 -242
- package/src/QyStructure.js +35 -27
- package/src/QyTrigger.js +62 -55
- package/src/QyUnionNode.js +54 -56
- package/src/QyUtils.js +170 -158
- package/src/QyWorker.js +34 -20
- package/src/hackernews.js +63 -71
- package/src/rpc/getFileContent.js +7 -7
- package/src/rpc/getSubItems.js +12 -28
- package/src/rpc/queryFiles.js +2 -25
- package/src/simulate.js +85 -80
- package/src/simulate2.js +77 -78
- package/src/soc_pokec.js +44 -32
- package/static/datafolderui/QyStyledElement.js +12 -12
- package/static/datafolderui/QyUIFolderTree.js +20 -20
- package/static/datafolderui/QyUIUtils.js +8 -8
- package/static/datafolderui/explore-tree.js +31 -31
- package/static/datafolderui/folder-tree.js +2 -2
- package/static/datafolderui/hscrpt.js +9 -17
- package/static/datafolderui/json-view.js +3 -5
- package/static/datafolderui/kv-input.js +15 -15
- package/static/datafolderui/list-input.js +17 -17
- package/static/datafolderui/main-page.js +18 -18
- package/static/datafolderui/num-input.js +5 -5
- package/static/datafolderui/query-editor.js +6 -1
- package/static/datafolderui/querySelectorShadowRoot.js +15 -19
- package/static/datafolderui/resizable-input.js +18 -18
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
let
|
|
1
|
+
let o = new Error("No such file");
|
|
2
2
|
|
|
3
3
|
module.exports = ({
|
|
4
4
|
filePath: e,
|
|
5
5
|
cChangeId: n
|
|
6
6
|
}) => {
|
|
7
|
-
var
|
|
7
|
+
var t, l, i, e = qyDB.fileP(e);
|
|
8
8
|
return e ? ({
|
|
9
9
|
fileContent: e,
|
|
10
|
-
cChangeId:
|
|
11
|
-
fileContentKey:
|
|
12
|
-
} = e,
|
|
10
|
+
cChangeId: t,
|
|
11
|
+
fileContentKey: l
|
|
12
|
+
} = e, i = {}, n != t && (Object.assign(i, {
|
|
13
13
|
fileContent: e,
|
|
14
|
-
cChangeId:
|
|
15
|
-
}), null == n) && (
|
|
14
|
+
cChangeId: t
|
|
15
|
+
}), null == n) && (i.fileContentKey = l), i) : o;
|
|
16
16
|
};
|
package/src/rpc/getSubItems.js
CHANGED
|
@@ -1,32 +1,16 @@
|
|
|
1
|
-
let
|
|
1
|
+
let h = new Error("No such dir");
|
|
2
2
|
|
|
3
3
|
module.exports = ({
|
|
4
|
-
dirPath:
|
|
5
|
-
dChangeId:
|
|
6
|
-
fChangeId:
|
|
4
|
+
dirPath: e,
|
|
5
|
+
dChangeId: a,
|
|
6
|
+
fChangeId: d
|
|
7
7
|
}) => {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
Object.assign(d, {
|
|
17
|
-
subdirList: i,
|
|
18
|
-
dChangeId: r.dChangeId
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
if (a != r.fChangeId) {
|
|
22
|
-
var n, e = r.sortedFileList, s = [];
|
|
23
|
-
for ({
|
|
24
|
-
name: n
|
|
25
|
-
} of e) s.push(n);
|
|
26
|
-
Object.assign(d, {
|
|
27
|
-
fileList: s,
|
|
28
|
-
fChangeId: r.fChangeId
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
return d;
|
|
8
|
+
var s, e = qyDB.dirP(e);
|
|
9
|
+
return e ? (s = {}, a || d || (s.fullPathHash = e.fullPathHash), a != e.dChangeId && Object.assign(s, {
|
|
10
|
+
subdirList: e.sortedSubdirList.map(e => e.name),
|
|
11
|
+
dChangeId: e.dChangeId
|
|
12
|
+
}), d != e.fChangeId && Object.assign(s, {
|
|
13
|
+
fileList: e.sortedFileList.map(e => e.name),
|
|
14
|
+
fChangeId: e.fChangeId
|
|
15
|
+
}), s) : h;
|
|
32
16
|
};
|
package/src/rpc/queryFiles.js
CHANGED
|
@@ -5,29 +5,6 @@ module.exports = queryText => {
|
|
|
5
5
|
view,
|
|
6
6
|
limit,
|
|
7
7
|
cursor
|
|
8
|
-
} = eval("((x)=>x)(" + queryText + ")")
|
|
9
|
-
|
|
10
|
-
let {
|
|
11
|
-
parentList
|
|
12
|
-
} = file, node = tree;
|
|
13
|
-
for (var dir of parentList) {
|
|
14
|
-
let {
|
|
15
|
-
name,
|
|
16
|
-
fullPathHash
|
|
17
|
-
} = dir, subdirMap = node.subdirMap;
|
|
18
|
-
subdirMap = subdirMap || (node.subdirMap = {}), node = subdirMap[name],
|
|
19
|
-
node = node || (subdirMap[name] = {
|
|
20
|
-
fullPathHash: fullPathHash
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
let fileMap = node.fileMap;
|
|
24
|
-
fileMap = fileMap || (node.fileMap = {}), fileMap[file.name] = {
|
|
25
|
-
fileContent: file.view(view, !0),
|
|
26
|
-
fileContentKey: file.fileContentKey
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
return {
|
|
30
|
-
tree: tree,
|
|
31
|
-
count: fileList.length
|
|
32
|
-
};
|
|
8
|
+
} = eval("((x)=>x)(" + queryText + ")");
|
|
9
|
+
return qyDB.fileListToTree(qyDB.queryFiles(folder, value, limit, cursor), view);
|
|
33
10
|
};
|
package/src/simulate.js
CHANGED
|
@@ -1,114 +1,119 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
sleep
|
|
5
|
-
} = require("./QyUtils.js"), runQueries = require("../scripts/airbnb2_queries.js").runQueries, airbnbDataFolder = (logger.level = "info",
|
|
6
|
-
"../airbnb"), dataFolder = "./tmp/simulate", hosts, listings, reviews, hostIdList, listingIdList, reviewIdList;
|
|
1
|
+
import {
|
|
2
|
+
join as t
|
|
3
|
+
} from "node:path";
|
|
7
4
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
import {
|
|
6
|
+
readFile as s,
|
|
7
|
+
rm as i
|
|
8
|
+
} from "node:fs/promises";
|
|
9
|
+
|
|
10
|
+
import {
|
|
11
|
+
QyDB as a
|
|
12
|
+
} from "./QyDB.js";
|
|
13
|
+
|
|
14
|
+
import {
|
|
15
|
+
folderOrFileExists as n,
|
|
16
|
+
randomInt as u,
|
|
17
|
+
sleep as w
|
|
18
|
+
} from "./QyUtils.js";
|
|
19
|
+
|
|
20
|
+
import {
|
|
21
|
+
runQueries as l
|
|
22
|
+
} from "../scripts/airbnb2_queries.js";
|
|
11
23
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
24
|
+
logger.level = "info";
|
|
25
|
+
|
|
26
|
+
let r = "../airbnb", c = "./tmp/simulate", m, p, f, v, d, g;
|
|
27
|
+
|
|
28
|
+
async function y(e) {
|
|
29
|
+
return JSON.parse(await s(t(r, e)));
|
|
16
30
|
}
|
|
17
31
|
|
|
18
|
-
function
|
|
32
|
+
function b(e) {
|
|
19
33
|
console.time("insertData");
|
|
20
|
-
var
|
|
21
|
-
for (
|
|
22
|
-
for (s of
|
|
23
|
-
var
|
|
24
|
-
property_type:
|
|
25
|
-
room_type:
|
|
34
|
+
var t, s, r, o = e.batch;
|
|
35
|
+
for (t of v) o.insert([ "hosts", t ], m[t]);
|
|
36
|
+
for (s of d) {
|
|
37
|
+
var i = p[s], {
|
|
38
|
+
property_type: a,
|
|
39
|
+
room_type: n,
|
|
26
40
|
bed_type: l
|
|
27
|
-
} =
|
|
28
|
-
o.insert([ "airbnb",
|
|
41
|
+
} = i;
|
|
42
|
+
o.insert([ "airbnb", a, n, l, s ], i);
|
|
29
43
|
}
|
|
30
|
-
for (
|
|
31
|
-
var
|
|
32
|
-
o.insert([ "reviews",
|
|
44
|
+
for (r of g) {
|
|
45
|
+
var c = f[r];
|
|
46
|
+
o.insert([ "reviews", c.listing_id, r ], c);
|
|
33
47
|
}
|
|
34
48
|
o.run(), console.timeEnd("insertData");
|
|
35
49
|
}
|
|
36
50
|
|
|
37
|
-
function
|
|
38
|
-
return
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
function getRandomListing() {
|
|
42
|
-
return listings[listingIdList[randomInt(listingIdList.length)]];
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
function getRandomReview() {
|
|
46
|
-
return reviews[reviewIdList[randomInt(reviewIdList.length)]];
|
|
51
|
+
function h() {
|
|
52
|
+
return m[v[u(v.length)]];
|
|
47
53
|
}
|
|
48
54
|
|
|
49
|
-
function
|
|
50
|
-
|
|
51
|
-
for (e in i) 1 == randomInt(2) && (o[e] = i[e]);
|
|
52
|
-
t.insert([ "hosts", s.host_id ], o);
|
|
55
|
+
function _() {
|
|
56
|
+
return p[d[u(d.length)]];
|
|
53
57
|
}
|
|
54
58
|
|
|
55
|
-
function
|
|
56
|
-
|
|
57
|
-
for (e in i) 1 == randomInt(2) && (o[e] = i[e]);
|
|
58
|
-
var {
|
|
59
|
-
property_type: s,
|
|
60
|
-
room_type: n,
|
|
61
|
-
bed_type: r,
|
|
62
|
-
_id: a
|
|
63
|
-
} = s;
|
|
64
|
-
t.insert([ "airbnb", s, n, r, a ], o);
|
|
59
|
+
function j() {
|
|
60
|
+
return f[g[u(g.length)]];
|
|
65
61
|
}
|
|
66
62
|
|
|
67
|
-
function
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
t.insert([ "reviews", s.listing_id, s._id ], o);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
async function simulateOne(t, e) {
|
|
74
|
-
for (;0 < e--; ) {
|
|
75
|
-
switch (randomInt(3)) {
|
|
63
|
+
async function D(e, t) {
|
|
64
|
+
for (;0 < t--; ) {
|
|
65
|
+
switch (u(3)) {
|
|
76
66
|
case 0:
|
|
77
|
-
|
|
67
|
+
s = a = i = o = r = void 0;
|
|
68
|
+
var s, r = e, o = h(), i = h(), a = {};
|
|
69
|
+
for (s in i) 1 == u(2) && (a[s] = i[s]);
|
|
70
|
+
r.insert([ "hosts", o.host_id ], a);
|
|
78
71
|
break;
|
|
79
72
|
|
|
80
73
|
case 1:
|
|
81
|
-
|
|
74
|
+
n = f = p = m = c = l = o = r = void 0;
|
|
75
|
+
var n, r = e, o = _(), l = _(), c = {};
|
|
76
|
+
for (n in l) 1 == u(2) && (c[n] = l[n]);
|
|
77
|
+
var {
|
|
78
|
+
property_type: o,
|
|
79
|
+
room_type: m,
|
|
80
|
+
bed_type: p,
|
|
81
|
+
_id: f
|
|
82
|
+
} = o;
|
|
83
|
+
r.insert([ "airbnb", o, m, p, f ], c);
|
|
82
84
|
break;
|
|
83
85
|
|
|
84
86
|
case 2:
|
|
85
|
-
|
|
87
|
+
v = g = d = p = m = void 0;
|
|
88
|
+
var v, m = e, p = j(), d = j(), g = {};
|
|
89
|
+
for (v in d) 1 == u(2) && (g[v] = d[v]);
|
|
90
|
+
m.insert([ "reviews", p.listing_id, p._id ], g);
|
|
86
91
|
}
|
|
87
|
-
await
|
|
92
|
+
await w(u(1e3) / 1e3);
|
|
88
93
|
}
|
|
89
94
|
}
|
|
90
95
|
|
|
91
|
-
async
|
|
96
|
+
(async () => {
|
|
92
97
|
console.time("total");
|
|
93
|
-
|
|
94
|
-
let t;
|
|
98
|
+
let t = process.argv[2] || 1e3, s = process.argv[3] || 100, e;
|
|
95
99
|
if ("true" == process.argv[4]) {
|
|
96
100
|
try {
|
|
97
|
-
await
|
|
101
|
+
await i(c, {
|
|
98
102
|
recursive: !0
|
|
99
103
|
});
|
|
100
|
-
} catch (
|
|
101
|
-
|
|
102
|
-
} else await
|
|
103
|
-
process.argv[5] && (logger.level = process.argv[5]),
|
|
104
|
-
|
|
104
|
+
} catch (e) {}
|
|
105
|
+
e = !0;
|
|
106
|
+
} else await n(c) || (e = !0);
|
|
107
|
+
process.argv[5] && (logger.level = process.argv[5]), console.time("loadData"),
|
|
108
|
+
[ m, p, f ] = await Promise.all([ y("hosts.json"), y("listings.json"), y("reviews.json") ]),
|
|
109
|
+
v = Object.keys(m), d = Object.keys(p), g = Object.keys(f), await !console.timeEnd("loadData"),
|
|
110
|
+
console.log(`hosts:${v.length}, listings:${d.length}, reviews:` + g.length);
|
|
111
|
+
var r = new a(c, {
|
|
105
112
|
fileLogLevel: "basic"
|
|
106
|
-
}), o = (
|
|
107
|
-
await
|
|
108
|
-
for (let
|
|
109
|
-
await Promise.all(o),
|
|
110
|
-
console.time("start"), await
|
|
111
|
-
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
run();
|
|
113
|
+
}), o = (e && (await r.start(), b(r), await r.stop()), console.time("simulate " + s),
|
|
114
|
+
await r.start(), l(r), []);
|
|
115
|
+
for (let e = 0; e < t; ++e) o.push(D(r, s));
|
|
116
|
+
await Promise.all(o), b(r), await r.stop(), console.timeEnd("simulate " + s),
|
|
117
|
+
console.time("start"), await r.start(), console.timeEnd("start"), l(r), await r.stop(),
|
|
118
|
+
console.timeEnd("total");
|
|
119
|
+
})();
|
package/src/simulate2.js
CHANGED
|
@@ -1,110 +1,109 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
sleep,
|
|
5
|
-
memoryPercent
|
|
6
|
-
} = require("./QyUtils.js"), runQueries = require("../scripts/flights2_queries.js").runQueries, arangoJsonFolderPath = (logger.level = "info",
|
|
7
|
-
"../GraphCourse_DemoData_ArangoDB-2"), dataFolder = "./tmp/simulate2", airportList, flightList;
|
|
1
|
+
import {
|
|
2
|
+
join as t
|
|
3
|
+
} from "node:path";
|
|
8
4
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
import {
|
|
6
|
+
readFile as o,
|
|
7
|
+
rm as a
|
|
8
|
+
} from "node:fs/promises";
|
|
12
9
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
10
|
+
import {
|
|
11
|
+
QyDB as n
|
|
12
|
+
} from "./QyDB.js";
|
|
17
13
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
14
|
+
import {
|
|
15
|
+
folderOrFileExists as l,
|
|
16
|
+
randomInt as c,
|
|
17
|
+
sleep as g
|
|
18
|
+
} from "./QyUtils.js";
|
|
19
|
+
|
|
20
|
+
import {
|
|
21
|
+
runQueries as m
|
|
22
|
+
} from "../scripts/flights2_queries.js";
|
|
23
|
+
|
|
24
|
+
logger.level = "info";
|
|
25
|
+
|
|
26
|
+
let s = "../GraphCourse_DemoData_ArangoDB-2", f = "./tmp/simulate2", d, p;
|
|
21
27
|
|
|
22
|
-
function
|
|
23
|
-
return
|
|
28
|
+
async function h(e) {
|
|
29
|
+
return JSON.parse(await o(t(s, e)));
|
|
24
30
|
}
|
|
25
31
|
|
|
26
|
-
function
|
|
27
|
-
|
|
28
|
-
for (e in r) 1 == randomInt(2) && (o[e] = r[e]);
|
|
29
|
-
t.insert([ "airports", i ], o);
|
|
32
|
+
function u() {
|
|
33
|
+
return d[c(d.length)];
|
|
30
34
|
}
|
|
31
35
|
|
|
32
|
-
function
|
|
33
|
-
var
|
|
34
|
-
Year:
|
|
35
|
-
Month:
|
|
36
|
-
Day:
|
|
37
|
-
} =
|
|
38
|
-
for (
|
|
39
|
-
|
|
36
|
+
function v(e) {
|
|
37
|
+
var t, o = c(p.length), {
|
|
38
|
+
Year: s,
|
|
39
|
+
Month: r,
|
|
40
|
+
Day: i
|
|
41
|
+
} = p[o], a = p[c(p.length)], n = {};
|
|
42
|
+
for (t in a) 1 == c(2) && (n[t] = a[t]);
|
|
43
|
+
e.insert([ "flights", s, r, i, o ], n);
|
|
40
44
|
}
|
|
41
45
|
|
|
42
|
-
async function
|
|
43
|
-
for (;0 <
|
|
44
|
-
switch (
|
|
46
|
+
async function w(e, t) {
|
|
47
|
+
for (;0 < t--; ) {
|
|
48
|
+
switch (c(2)) {
|
|
45
49
|
case 0:
|
|
46
|
-
|
|
50
|
+
o = a = i = r = s = void 0;
|
|
51
|
+
var o, s = e, r = u()._key, i = u(), a = {};
|
|
52
|
+
for (o in i) 1 == c(2) && (a[o] = i[o]);
|
|
53
|
+
s.insert([ "airports", r ], a);
|
|
47
54
|
break;
|
|
48
55
|
|
|
49
56
|
case 1:
|
|
50
|
-
|
|
57
|
+
v(e);
|
|
51
58
|
}
|
|
52
|
-
await
|
|
59
|
+
await g(1);
|
|
53
60
|
}
|
|
54
61
|
}
|
|
55
62
|
|
|
56
|
-
function
|
|
63
|
+
function y(e) {
|
|
64
|
+
var t = e;
|
|
57
65
|
console.time("insertAirports");
|
|
58
|
-
var
|
|
59
|
-
for (
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
function insertFlights(t) {
|
|
66
|
+
var o, s = t.batch;
|
|
67
|
+
for (o of d) s.insert("airports/" + o._key, o);
|
|
68
|
+
s.run(), console.timeEnd("insertAirports");
|
|
69
|
+
t = e;
|
|
64
70
|
logger.log("insertFlights begin"), console.time("insertFlights");
|
|
65
|
-
var
|
|
66
|
-
for (let
|
|
67
|
-
var
|
|
68
|
-
Year:
|
|
69
|
-
Month:
|
|
70
|
-
Day:
|
|
71
|
-
} =
|
|
72
|
-
i.insert(`flights/${
|
|
71
|
+
var r, i = t.batch;
|
|
72
|
+
for (let e = 0; e < p.length; ++e) {
|
|
73
|
+
var a = p[e], {
|
|
74
|
+
Year: n,
|
|
75
|
+
Month: l,
|
|
76
|
+
Day: c
|
|
77
|
+
} = a;
|
|
78
|
+
i.insert(`flights/${n}/${l}/${c}/` + e, a);
|
|
73
79
|
}
|
|
74
80
|
i.run(), logger.log("insertFlights end"), console.timeEnd("insertFlights"),
|
|
75
81
|
console.time("createFlightsIndex");
|
|
76
|
-
for (
|
|
82
|
+
for (r of t.dir("flights").subdirList) for (var g of r.subdirList) for (var m of g.subdirList) i.createIndex(m, [ "_from", "_to" ]);
|
|
77
83
|
i.run(), console.timeEnd("createFlightsIndex");
|
|
78
84
|
}
|
|
79
85
|
|
|
80
|
-
|
|
81
|
-
insertAirports(t), insertFlights(t);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
async function run() {
|
|
86
|
+
(async () => {
|
|
85
87
|
console.time("total");
|
|
86
|
-
|
|
87
|
-
let t;
|
|
88
|
+
let t = process.argv[2] || 1e3, o = process.argv[3] || 100, e;
|
|
88
89
|
if ("true" == process.argv[4]) {
|
|
89
90
|
try {
|
|
90
|
-
await
|
|
91
|
+
await a(f, {
|
|
91
92
|
recursive: !0
|
|
92
93
|
});
|
|
93
|
-
} catch (
|
|
94
|
-
|
|
95
|
-
} else await
|
|
96
|
-
process.argv[5] && (logger.level = process.argv[5]),
|
|
97
|
-
|
|
94
|
+
} catch (e) {}
|
|
95
|
+
e = !0;
|
|
96
|
+
} else await l(f) || (e = !0);
|
|
97
|
+
process.argv[5] && (logger.level = process.argv[5]), console.time("loadData"),
|
|
98
|
+
[ d, p ] = await Promise.all([ h("airports.json"), h("flights.json") ]), await !console.timeEnd("loadData"),
|
|
99
|
+
console.log(`airports:${d.length}, flights:` + p.length);
|
|
100
|
+
var s = new n(f, {
|
|
98
101
|
fileLogLevel: "basic"
|
|
99
|
-
}),
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
console.
|
|
105
|
-
await
|
|
106
|
-
|
|
107
|
-
global.gc && global.gc();
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
run();
|
|
102
|
+
}), r = (e && (await s.start(), y(s), await s.stop()), await s.start(), m(s),
|
|
103
|
+
`simulate ${t} ` + o), i = (console.time(r), console.time("simulateStop"), []);
|
|
104
|
+
for (let e = 0; e < t; ++e) i.push(w(s, o));
|
|
105
|
+
await Promise.all(i), console.timeEnd(r), logger.log(`Simulate ${t} for ${o} ended.`),
|
|
106
|
+
console.time("del%"), s.delDir("%"), console.timeEnd("del%"), y(s), await s.stop(),
|
|
107
|
+
console.timeEnd("simulateStop"), console.time("start"), await s.start(), console.timeEnd("start"),
|
|
108
|
+
m(s), await s.stop(), console.timeEnd("total"), global.gc && global.gc();
|
|
109
|
+
})();
|
package/src/soc_pokec.js
CHANGED
|
@@ -1,43 +1,55 @@
|
|
|
1
|
-
|
|
2
|
-
open,
|
|
3
|
-
rm
|
|
4
|
-
}
|
|
5
|
-
"D:/SampleData/soc_pokec/soc-pokec-relationships.txt"), socPokecProfileFilePath = "D:/SampleData/soc_pokec/soc-pokec-profiles.txt", dataFolder = "./tmp/soc_pokec", qyDB = new QyDB(dataFolder);
|
|
1
|
+
import {
|
|
2
|
+
open as c,
|
|
3
|
+
rm as t
|
|
4
|
+
} from "node:fs/promises";
|
|
6
5
|
|
|
7
|
-
|
|
6
|
+
import "node:assert/strict";
|
|
8
7
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
console.timeEnd("readData"), console.time("insertData");
|
|
19
|
-
var o, i = qyDB.batch;
|
|
20
|
-
let n = 0;
|
|
21
|
-
for (o in a) {
|
|
22
|
-
var l = a[o];
|
|
23
|
-
i.insertP([ "relationships", o ], l), 3e4 < ++n && (await i.run(!0), n = 0);
|
|
24
|
-
}
|
|
25
|
-
await i.run(!0), console.timeEnd("insertData");
|
|
26
|
-
}
|
|
8
|
+
import {
|
|
9
|
+
QyDB as e
|
|
10
|
+
} from "../src/QyDB.js";
|
|
11
|
+
|
|
12
|
+
import {
|
|
13
|
+
folderOrFileExists as p
|
|
14
|
+
} from "../src/QyUtils.js";
|
|
15
|
+
|
|
16
|
+
logger.level = "info";
|
|
27
17
|
|
|
28
|
-
|
|
18
|
+
let m = "D:/SampleData/soc_pokec/soc-pokec-relationships.txt";
|
|
19
|
+
|
|
20
|
+
let f = "./tmp/soc_pokec", w = new e(f);
|
|
21
|
+
|
|
22
|
+
(async () => {
|
|
29
23
|
process.argv[3] && (logger.level = process.argv[3]);
|
|
30
24
|
let e;
|
|
31
25
|
if ("true" == process.argv[2]) {
|
|
32
26
|
try {
|
|
33
|
-
await
|
|
27
|
+
await t(f, {
|
|
34
28
|
recursive: !0
|
|
35
29
|
});
|
|
36
30
|
} catch (e) {}
|
|
37
31
|
e = !0;
|
|
38
|
-
} else await
|
|
39
|
-
console.time("run"), await
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
32
|
+
} else await p(f) || (e = !0);
|
|
33
|
+
if (console.time("run"), await w.start(), e) {
|
|
34
|
+
{
|
|
35
|
+
console.time("readData");
|
|
36
|
+
var a, r = await c(m, "r"), s = {};
|
|
37
|
+
for await (o of r.readLines()) {
|
|
38
|
+
var [ o, i ] = o.split("\t"), n = s[o];
|
|
39
|
+
n ? n[i] = 1 : s[o] = {
|
|
40
|
+
[i]: 1
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
console.timeEnd("readData"), console.time("insertData");
|
|
44
|
+
let e = w.batch, t = 0;
|
|
45
|
+
for (a in s) {
|
|
46
|
+
var l = s[a];
|
|
47
|
+
e.insertP([ "relationships", a ], l), 3e4 < ++t && (await e.run(!0),
|
|
48
|
+
t = 0);
|
|
49
|
+
}
|
|
50
|
+
await e.run(!0), console.timeEnd("insertData");
|
|
51
|
+
}
|
|
52
|
+
await 0;
|
|
53
|
+
}
|
|
54
|
+
await w.stop(), console.timeEnd("run");
|
|
55
|
+
})();
|
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
import {
|
|
2
|
-
appendStyle
|
|
2
|
+
appendStyle as n
|
|
3
3
|
} from "./QyUIUtils.js";
|
|
4
4
|
|
|
5
|
-
class
|
|
5
|
+
class s extends HTMLElement {
|
|
6
6
|
constructor(e, t) {
|
|
7
7
|
super(), Array.isArray(e) && (t = e, e = void 0);
|
|
8
|
-
var
|
|
8
|
+
var r = this.attachShadow({
|
|
9
9
|
mode: "open"
|
|
10
10
|
});
|
|
11
|
-
if (t) for (var
|
|
12
|
-
var
|
|
13
|
-
|
|
11
|
+
if (t) for (var s of t) {
|
|
12
|
+
var o = document.createElement("link");
|
|
13
|
+
o.setAttribute("rel", "stylesheet"), o.setAttribute("href", s), r.appendChild(o);
|
|
14
14
|
}
|
|
15
|
-
e &&
|
|
15
|
+
e && n(r, e);
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
function
|
|
20
|
-
customElements.define(e, class extends
|
|
19
|
+
function e(e, t, r) {
|
|
20
|
+
customElements.define(e, class extends s {
|
|
21
21
|
constructor() {
|
|
22
|
-
super(t,
|
|
22
|
+
super(t, r);
|
|
23
23
|
}
|
|
24
24
|
});
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
export {
|
|
28
|
-
QyStyledElement,
|
|
29
|
-
defineStyledElement
|
|
28
|
+
s as QyStyledElement,
|
|
29
|
+
e as defineStyledElement
|
|
30
30
|
};
|