datafolder 1.0.6 → 1.0.8
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 +7 -2
- package/index.js +1 -1
- package/internal.md +121 -0
- package/package.json +8 -6
- package/scripts/airbnb.js +77 -72
- package/scripts/airbnb2.js +78 -73
- package/scripts/airbnb2_queries.js +181 -229
- package/scripts/airbnb_queries.js +214 -265
- package/scripts/convertBinFiles.js +47 -0
- package/scripts/downloadFile.js +41 -40
- package/scripts/express.js +44 -48
- package/scripts/fastify.js +71 -80
- package/scripts/flights.js +71 -75
- package/scripts/flights2.js +78 -81
- package/scripts/flights2_queries.js +417 -455
- package/scripts/flights_queries.js +381 -407
- package/src/QyAcl.d.ts +17 -0
- package/src/QyAcl.js +113 -116
- package/src/QyAclSaver.d.ts +4 -0
- package/src/QyAclSaver.js +3 -3
- package/src/QyAclSaver_Worker.d.ts +9 -0
- package/src/QyAclSaver_Worker.js +2 -4
- package/src/QyAclWriter.d.ts +5 -0
- package/src/QyBatch.d.ts +42 -0
- package/src/QyBatch.js +8 -8
- package/src/QyBinWriter.d.ts +15 -0
- package/src/QyCD.d.ts +37 -0
- package/src/QyCD.js +27 -16
- package/src/QyCache.d.ts +44 -0
- package/src/QyCache.js +71 -59
- package/src/QyCompressor.d.ts +9 -0
- package/src/QyCompressor.js +29 -29
- package/src/QyCompressor_Worker.d.ts +1 -0
- package/src/QyDB.d.ts +42 -0
- package/src/QyDB.js +13 -11
- package/src/QyDefaultOptions.d.ts +1 -0
- package/src/QyDefaultOptions.js +3 -0
- package/src/QyDir.d.ts +48 -0
- package/src/QyDir.js +41 -41
- package/src/QyFetch.d.ts +7 -0
- package/src/QyFetch.js +3 -4
- package/src/QyFile.d.ts +19 -0
- package/src/QyFile.js +35 -34
- package/src/QyFileContentUtils.d.ts +13 -0
- package/src/QyFileContentUtils.js +126 -126
- package/src/QyFileLogger.d.ts +11 -0
- package/src/QyIndex.d.ts +6 -0
- package/src/QyIndex.js +73 -75
- package/src/QyIndexPropTree.d.ts +7 -0
- package/src/QyIndexPropTree.js +24 -24
- package/src/QyIntersectNode.d.ts +7 -0
- package/src/QyIntersectNode.js +15 -15
- package/src/QyItem.d.ts +30 -0
- package/src/QyItem.js +32 -28
- package/src/QyJsonSaver.d.ts +6 -0
- package/src/QyKVData.d.ts +12 -0
- package/src/QyKVData.js +30 -20
- package/src/QyKVDataCleaner.d.ts +4 -0
- package/src/QyKVDataCleaner.js +1 -1
- package/src/QyKVDataCleaner_Worker.d.ts +13 -0
- package/src/QyKVDataCleaner_Worker.js +2 -4
- package/src/QyKVDataLoader.d.ts +9 -0
- package/src/QyKVDataLoader.js +11 -11
- package/src/QyKVDataSaver.d.ts +4 -0
- package/src/QyKVDataSaver.js +6 -6
- package/src/QyKVDataSaver_Worker.d.ts +13 -0
- package/src/QyKVDataSaver_Worker.js +11 -13
- package/src/QyLogFileSaver.d.ts +4 -0
- package/src/QyLogFileSaver.js +1 -1
- package/src/QyLogFileSaver_Worker.d.ts +8 -0
- package/src/QyLogFileSaver_Worker.js +2 -4
- package/src/QyLogger.d.ts +10 -0
- package/src/QyLogger.js +40 -40
- package/src/QyMessageWorker.d.ts +5 -0
- package/src/QyMessageWorker.js +7 -7
- package/src/QyMessager.d.ts +7 -0
- package/src/QyMessager.js +30 -27
- package/src/QyMessager_Run.d.ts +1 -0
- package/src/QyMessager_Run.js +11 -6
- package/src/QyMod.d.ts +1 -0
- package/src/QyMod.js +6 -6
- package/src/QyOpRunner.d.ts +10 -0
- package/src/QyOpRunner.js +39 -39
- package/src/QyQueue.d.ts +11 -0
- package/src/QySaver.d.ts +10 -0
- package/src/QySnapshotCompactor.d.ts +4 -0
- package/src/QySnapshotCompactor.js +1 -1
- package/src/QySnapshotCompactor_Worker.d.ts +11 -0
- package/src/QySnapshotCompactor_Worker.js +21 -22
- package/src/QySnapshotSaver.d.ts +4 -0
- package/src/QySnapshotSaver.js +1 -1
- package/src/QySnapshotSaver_Worker.d.ts +16 -0
- package/src/QySnapshotSaver_Worker.js +56 -53
- package/src/QySnapshots.d.ts +27 -0
- package/src/QySnapshots.js +74 -66
- package/src/QyStructure.d.ts +1 -0
- package/src/QyStructure.js +18 -18
- package/src/QyTrigger.d.ts +9 -0
- package/src/QyTrigger.js +30 -30
- package/src/QyUnionNode.d.ts +17 -0
- package/src/QyUnionNode.js +2 -2
- package/src/QyUtils.d.ts +53 -0
- package/src/QyUtils.js +140 -117
- package/src/QyWorker.d.ts +5 -0
- package/src/QyWorker.js +18 -18
- package/src/hackernews.d.ts +1 -0
- package/src/hackernews.js +59 -47
- package/src/rpc/getRpcFiles.js +1 -0
- package/src/rpc/getTriggerFiles.js +1 -0
- package/src/simulate.d.ts +1 -0
- package/src/simulate2.d.ts +1 -0
- package/src/soc_pokec.d.ts +1 -0
- package/src/soc_pokec.js +7 -7
- package/static/codemirror.bundle/editor.bundle.js +370 -166
- package/static/datafolderui/QyStyledElement.js +8 -17
- package/static/datafolderui/QyUIFolderViewer.js +230 -0
- package/static/datafolderui/QyUIUtils.js +5 -5
- package/static/datafolderui/code-mirror.js +7 -7
- package/static/datafolderui/display-tree.js +22 -58
- package/static/datafolderui/explore-tree.js +10 -10
- package/static/datafolderui/folder-tree.js +71 -2
- package/static/datafolderui/hscrpt.js +26 -7
- package/static/datafolderui/json-view.js +34 -3
- package/static/datafolderui/main-page.js +67 -36
- package/static/datafolderui/query-editor.js +9 -9
- package/static/datafolderui/rpc-editor.js +31 -0
- package/static/datafolderui/trigger-editor.js +33 -0
- package/data/sampleDataFolder/qykv/history/acl/1_acl.txt +0 -1
- package/data/sampleDataFolder/qykv/history/acl/2_acl.txt +0 -1
- package/data/sampleDataFolder/qykv/history/acl/3_acl.txt +0 -1
- package/data/sampleDataFolder/qykv/history/acl/4_acl.txt +0 -1
- package/data/sampleDataFolder/qykv/history/acl/5_acl.txt +0 -1
- package/data/sampleDataFolder/qykv/snapshot/1/1_pM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/1/1_prefixPM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/1/1_vL.txt +0 -10
- package/data/sampleDataFolder/qykv/snapshot/2/1_pM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/2/1_prefixPM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/2/1_vL.txt +0 -1
- package/data/sampleDataFolder/qykv/snapshot/3/1_pM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/3/1_prefixPM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/3/1_vL.txt +0 -1
- package/data/sampleDataFolder/qykv/snapshot/4/1_pM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/4/1_prefixPM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/4/1_vL.txt +0 -1
- package/data/sampleDataFolder/qykv/snapshot/4/2_pM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/4/2_prefixPM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/4/2_vL.txt +0 -9
- package/data/sampleDataFolder/qykv/snapshot/5/1_pM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/5/1_prefixPM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/5/1_vL.txt +0 -55
- package/data/sampleDataFolder/qykv/snapshot/info/1.json +0 -1
- package/data/sampleDataFolder/qykv/snapshot/info/2.json +0 -1
- package/data/sampleDataFolder/qykv/snapshot/info/3.json +0 -1
- package/data/sampleDataFolder/qykv/snapshot/info/4.json +0 -1
- package/data/sampleDataFolder/qykv/snapshot/info/5.json +0 -1
- package/data/sampleDataFolder/qylog/2026/02/15/08/change.txt +0 -58
- package/data/sampleDataFolder/qylog/2026/02/15/08/stderr.txt +0 -11
- package/data/sampleDataFolder/qylog/2026/02/15/08/stdout.txt +0 -36
- package/static/datafolderui/QyUIFolderTree.js +0 -179
package/scripts/express.js
CHANGED
|
@@ -1,48 +1,44 @@
|
|
|
1
|
-
import { join } from "node:path";
|
|
2
|
-
import { QyDB } from "../src/QyDB.js";
|
|
3
|
-
import Express from "express";
|
|
4
|
-
import { __dirname } from "../src/QyUtils.js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
const
|
|
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
|
-
logger.error(exception);
|
|
46
|
-
await qyDB.stop();
|
|
47
|
-
}
|
|
48
|
-
}
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { QyDB } from "../src/QyDB.js";
|
|
3
|
+
import Express from "express";
|
|
4
|
+
import { __dirname } from "../src/QyUtils.js";
|
|
5
|
+
const config = {
|
|
6
|
+
port: 3629,
|
|
7
|
+
qyDBDataFolder: "./tmp/QyExpress",
|
|
8
|
+
staticRoot: join(__dirname, "../static/"),
|
|
9
|
+
rpcFolder: join(__dirname, "rpc"),
|
|
10
|
+
};
|
|
11
|
+
const { port, qyDBDataFolder } = config;
|
|
12
|
+
const app = Express();
|
|
13
|
+
const qyDB = new QyDB(qyDBDataFolder);
|
|
14
|
+
let server;
|
|
15
|
+
process.on("SIGINT", async () => {
|
|
16
|
+
logger.log("SIGINT signal received: closing HTTP server");
|
|
17
|
+
if (server) {
|
|
18
|
+
server.close(() => logger.log("HTTP server closed"));
|
|
19
|
+
server.closeAllConnections();
|
|
20
|
+
}
|
|
21
|
+
await qyDB.stop();
|
|
22
|
+
});
|
|
23
|
+
run();
|
|
24
|
+
async function run() {
|
|
25
|
+
try {
|
|
26
|
+
await qyDB.start();
|
|
27
|
+
server = app.listen(port, () => {
|
|
28
|
+
logger.log(`Example app listening on port ${port}`);
|
|
29
|
+
});
|
|
30
|
+
app.get("/", (request, reply) => {
|
|
31
|
+
reply.send({ hello: "world from express" });
|
|
32
|
+
});
|
|
33
|
+
app.get("/test", (request, reply) => {
|
|
34
|
+
qyDB.insert("users/test", { a: 3, b: 4 });
|
|
35
|
+
const content = qyDB.view("users/test");
|
|
36
|
+
reply.send(content);
|
|
37
|
+
logger.log(content);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
catch (exception) {
|
|
41
|
+
logger.error(exception);
|
|
42
|
+
await qyDB.stop();
|
|
43
|
+
}
|
|
44
|
+
}
|
package/scripts/fastify.js
CHANGED
|
@@ -1,80 +1,71 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
import { join, basename } from "node:path";
|
|
3
|
-
import { readdir, readFile } from "node:fs/promises";
|
|
4
|
-
import fastifyStatic from "@fastify/static";
|
|
5
|
-
import fastifyCompress from "@fastify/compress";
|
|
6
|
-
import { QyDB } from "../src/QyDB.js";
|
|
7
|
-
import { folderOrFileExists, __dirname } from "../src/QyUtils.js";
|
|
8
|
-
import Fastify from "fastify";
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
};
|
|
15
|
-
const {
|
|
16
|
-
|
|
17
|
-
const
|
|
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
|
-
} else {
|
|
73
|
-
logger.log(`Example app listening on port ${port}`);
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
} catch (exception) {
|
|
77
|
-
logger.error(exception);
|
|
78
|
-
await qyDB.stop();
|
|
79
|
-
}
|
|
80
|
-
}
|
|
1
|
+
"use strict";
|
|
2
|
+
import { join, basename } from "node:path";
|
|
3
|
+
import { readdir, readFile } from "node:fs/promises";
|
|
4
|
+
import fastifyStatic from "@fastify/static";
|
|
5
|
+
import fastifyCompress from "@fastify/compress";
|
|
6
|
+
import { QyDB } from "../src/QyDB.js";
|
|
7
|
+
import { folderOrFileExists, __dirname } from "../src/QyUtils.js";
|
|
8
|
+
import Fastify from "fastify";
|
|
9
|
+
const config = {
|
|
10
|
+
port: 3628,
|
|
11
|
+
staticRoot: join(__dirname, "../static/"),
|
|
12
|
+
rpcFolder: join(__dirname, "../src/rpc"),
|
|
13
|
+
};
|
|
14
|
+
const { port, staticRoot } = config;
|
|
15
|
+
const fastify = Fastify({ logger: false, forceCloseConnections: true });
|
|
16
|
+
const qyDB = new QyDB(join(__dirname, "../tmp/simulate2"));
|
|
17
|
+
// const qyDB = new QyDB();
|
|
18
|
+
let sigintReceived = false;
|
|
19
|
+
process.on("SIGINT", async () => {
|
|
20
|
+
logger.log("SIGINT signal received: closing HTTP server");
|
|
21
|
+
if (!sigintReceived) {
|
|
22
|
+
sigintReceived = true;
|
|
23
|
+
await fastify.close();
|
|
24
|
+
await qyDB.stop();
|
|
25
|
+
logger.log("All closed");
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
run();
|
|
29
|
+
async function insertRpcs() {
|
|
30
|
+
const { rpcFolder } = config;
|
|
31
|
+
if (await folderOrFileExists(rpcFolder)) {
|
|
32
|
+
await Promise.all((await readdir(rpcFolder)).map(async (x) => {
|
|
33
|
+
qyDB.insertRpc(basename(x, ".js"), (await readFile(join(rpcFolder, x))).toString());
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async function handleGet(request, reply) {
|
|
38
|
+
const { query, params } = request;
|
|
39
|
+
const result = await qyDB.callRpc(params.funName, query && query.args ? JSON.parse(query.args) : undefined);
|
|
40
|
+
if (Error.isError(result)) {
|
|
41
|
+
logger.warn(result.message);
|
|
42
|
+
}
|
|
43
|
+
return reply.send(result);
|
|
44
|
+
}
|
|
45
|
+
async function handlePost(request, reply) {
|
|
46
|
+
logger.log("handling post", request.body);
|
|
47
|
+
reply.send({ body: request.body });
|
|
48
|
+
}
|
|
49
|
+
async function run() {
|
|
50
|
+
try {
|
|
51
|
+
await qyDB.start();
|
|
52
|
+
await insertRpcs();
|
|
53
|
+
await fastify.register(fastifyStatic, { root: staticRoot });
|
|
54
|
+
await fastify.register(fastifyCompress);
|
|
55
|
+
fastify.get("/rpc/:funName", handleGet);
|
|
56
|
+
fastify.post("/rpc/:funName", handlePost);
|
|
57
|
+
fastify.listen({ port }, (err) => {
|
|
58
|
+
if (err) {
|
|
59
|
+
logger.error(err);
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
logger.log(`Example app listening on port ${port}`);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
catch (exception) {
|
|
68
|
+
logger.error(exception);
|
|
69
|
+
await qyDB.stop();
|
|
70
|
+
}
|
|
71
|
+
}
|
package/scripts/flights.js
CHANGED
|
@@ -1,75 +1,71 @@
|
|
|
1
|
-
// node --prof profile.js
|
|
2
|
-
// node --prof-process isolate-0xnnnnnnnnnnnn-v8.log > processed.txt
|
|
3
|
-
import { join } from "node:path";
|
|
4
|
-
import { readFileSync } from "node:fs";
|
|
5
|
-
import { rm } from "node:fs/promises";
|
|
6
|
-
import { QyDB } from "../src/QyDB.js";
|
|
7
|
-
import { folderOrFileExists } from "../src/QyUtils.js";
|
|
8
|
-
import { runQueries } from "./flights_queries.js";
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const
|
|
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
|
-
console.time("
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
if (
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
console.
|
|
71
|
-
|
|
72
|
-
console.timeEnd("stop");
|
|
73
|
-
console.timeEnd("run");
|
|
74
|
-
console.timeEnd("total");
|
|
75
|
-
}
|
|
1
|
+
// node --prof profile.js
|
|
2
|
+
// node --prof-process isolate-0xnnnnnnnnnnnn-v8.log > processed.txt
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { readFileSync } from "node:fs";
|
|
5
|
+
import { rm } from "node:fs/promises";
|
|
6
|
+
import { QyDB } from "../src/QyDB.js";
|
|
7
|
+
import { folderOrFileExists } from "../src/QyUtils.js";
|
|
8
|
+
import { runQueries } from "./flights_queries.js";
|
|
9
|
+
logger.level = "info";
|
|
10
|
+
const arangoJsonFolderPath = "D:\\scripts\\GraphCourse_DemoData_ArangoDB-2";
|
|
11
|
+
const dataFolder = "./tmp/flights";
|
|
12
|
+
const qyDB = new QyDB(dataFolder, { preloadFoldersAtStart: false });
|
|
13
|
+
run();
|
|
14
|
+
function insertAirports() {
|
|
15
|
+
const data = JSON.parse(readFileSync(join(arangoJsonFolderPath, "airports.json")));
|
|
16
|
+
console.time("insertAirports");
|
|
17
|
+
const { batch } = qyDB;
|
|
18
|
+
for (const record of data) {
|
|
19
|
+
batch.insert(`airports/${record._key}`, record);
|
|
20
|
+
}
|
|
21
|
+
batch.run();
|
|
22
|
+
console.timeEnd("insertAirports");
|
|
23
|
+
}
|
|
24
|
+
function insertFlights() {
|
|
25
|
+
const data = JSON.parse(readFileSync(join(arangoJsonFolderPath, "flights.json")));
|
|
26
|
+
console.time("insertFlights");
|
|
27
|
+
const { batch } = qyDB;
|
|
28
|
+
for (let i = 0; i < data.length; ++i) {
|
|
29
|
+
const record = data[i];
|
|
30
|
+
// const filePath = `flights/${record._from}/${record._to}/${i}`;
|
|
31
|
+
const filePath = `flights/${i}`;
|
|
32
|
+
batch.insert(filePath, record);
|
|
33
|
+
}
|
|
34
|
+
batch.run();
|
|
35
|
+
console.timeEnd("insertFlights");
|
|
36
|
+
console.time("createIndex");
|
|
37
|
+
// qyDB.createIndex("flights", ["_from", "_to"]);
|
|
38
|
+
qyDB.createIndex("flights", ["_from", "_to", "Month", "Day", "Year"]);
|
|
39
|
+
console.timeEnd("createIndex");
|
|
40
|
+
}
|
|
41
|
+
async function run() {
|
|
42
|
+
console.time("total");
|
|
43
|
+
if (process.argv[3]) {
|
|
44
|
+
logger.level = process.argv[3];
|
|
45
|
+
}
|
|
46
|
+
let shouldInsertData;
|
|
47
|
+
if (process.argv[2] == "true") {
|
|
48
|
+
try {
|
|
49
|
+
await rm(dataFolder, { recursive: true });
|
|
50
|
+
}
|
|
51
|
+
catch (exception) { }
|
|
52
|
+
shouldInsertData = true;
|
|
53
|
+
}
|
|
54
|
+
else if (!(await folderOrFileExists(dataFolder)))
|
|
55
|
+
shouldInsertData = true;
|
|
56
|
+
console.time("run");
|
|
57
|
+
console.time("start");
|
|
58
|
+
await qyDB.start();
|
|
59
|
+
console.timeEnd("start");
|
|
60
|
+
if (shouldInsertData) {
|
|
61
|
+
insertAirports();
|
|
62
|
+
insertFlights();
|
|
63
|
+
}
|
|
64
|
+
// console.log(qyDB.dir("/%/index/0dJIntKA55/_from").subdirNameList);
|
|
65
|
+
runQueries(qyDB);
|
|
66
|
+
console.time("stop");
|
|
67
|
+
await qyDB.stop();
|
|
68
|
+
console.timeEnd("stop");
|
|
69
|
+
console.timeEnd("run");
|
|
70
|
+
console.timeEnd("total");
|
|
71
|
+
}
|
package/scripts/flights2.js
CHANGED
|
@@ -1,81 +1,78 @@
|
|
|
1
|
-
// node --prof profile.js
|
|
2
|
-
// node --prof-process isolate-0xnnnnnnnnnnnn-v8.log > processed.txt
|
|
3
|
-
import { join } from "node:path";
|
|
4
|
-
import { readFileSync } from "node:fs";
|
|
5
|
-
import { rm } from "node:fs/promises";
|
|
6
|
-
import { QyDB } from "../src/QyDB.js";
|
|
7
|
-
import { folderOrFileExists } from "../src/QyUtils.js";
|
|
8
|
-
import { runQueries } from "./flights2_queries.js";
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
console.
|
|
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
|
-
console.
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
console.
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
console.timeEnd("run");
|
|
80
|
-
console.timeEnd("total");
|
|
81
|
-
}
|
|
1
|
+
// node --prof profile.js
|
|
2
|
+
// node --prof-process isolate-0xnnnnnnnnnnnn-v8.log > processed.txt
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { readFileSync } from "node:fs";
|
|
5
|
+
import { rm } from "node:fs/promises";
|
|
6
|
+
import { QyDB } from "../src/QyDB.js";
|
|
7
|
+
import { folderOrFileExists } from "../src/QyUtils.js";
|
|
8
|
+
import { runQueries } from "./flights2_queries.js";
|
|
9
|
+
logger.level = "info";
|
|
10
|
+
const arangoJsonFolderPath = "D:\\scripts\\GraphCourse_DemoData_ArangoDB-2";
|
|
11
|
+
const dataFolder = "./tmp/flights2";
|
|
12
|
+
const qyDB = new QyDB(dataFolder, { preloadFoldersAtStart: false });
|
|
13
|
+
run();
|
|
14
|
+
function insertAirports() {
|
|
15
|
+
const data = JSON.parse(readFileSync(join(arangoJsonFolderPath, "airports.json")));
|
|
16
|
+
console.time("insertAirports");
|
|
17
|
+
const { batch } = qyDB;
|
|
18
|
+
for (const record of data) {
|
|
19
|
+
const { country, state, city } = record;
|
|
20
|
+
batch.insert(`airports/${country}/${state}/${city}/${record._key}`, record);
|
|
21
|
+
}
|
|
22
|
+
batch.run();
|
|
23
|
+
console.timeEnd("insertAirports");
|
|
24
|
+
}
|
|
25
|
+
function insertFlights() {
|
|
26
|
+
const data = JSON.parse(readFileSync(join(arangoJsonFolderPath, "flights.json")));
|
|
27
|
+
console.time("insertFlights");
|
|
28
|
+
const { batch } = qyDB;
|
|
29
|
+
for (let i = 0; i < data.length; ++i) {
|
|
30
|
+
const record = data[i];
|
|
31
|
+
const { Year, Month, Day } = record;
|
|
32
|
+
batch.insert(`flights/${Year}/${Month}/${Day}/${i}`, record);
|
|
33
|
+
// batch.insertP(["flights", Year, Month, Day, i], record);
|
|
34
|
+
}
|
|
35
|
+
batch.run();
|
|
36
|
+
console.timeEnd("insertFlights");
|
|
37
|
+
console.time("createFlightsIndex");
|
|
38
|
+
// qyDB.createIndex("flights", ["_from", "_to"]);
|
|
39
|
+
for (const yearDir of qyDB.dir("flights").subdirList) {
|
|
40
|
+
for (const monthDir of yearDir.subdirList) {
|
|
41
|
+
for (const dayDir of monthDir.subdirList) {
|
|
42
|
+
batch.createIndex(dayDir, ["_from", "_to"]);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
batch.run();
|
|
47
|
+
console.timeEnd("createFlightsIndex");
|
|
48
|
+
}
|
|
49
|
+
async function run() {
|
|
50
|
+
console.time("total");
|
|
51
|
+
if (process.argv[3]) {
|
|
52
|
+
logger.level = process.argv[3];
|
|
53
|
+
}
|
|
54
|
+
let shouldInsertData;
|
|
55
|
+
if (process.argv[2] == "true") {
|
|
56
|
+
try {
|
|
57
|
+
await rm(dataFolder, { recursive: true });
|
|
58
|
+
}
|
|
59
|
+
catch (exception) { }
|
|
60
|
+
shouldInsertData = true;
|
|
61
|
+
}
|
|
62
|
+
else if (!(await folderOrFileExists(dataFolder)))
|
|
63
|
+
shouldInsertData = true;
|
|
64
|
+
console.time("run");
|
|
65
|
+
console.time("start");
|
|
66
|
+
await qyDB.start();
|
|
67
|
+
console.timeEnd("start");
|
|
68
|
+
if (shouldInsertData) {
|
|
69
|
+
insertAirports();
|
|
70
|
+
insertFlights();
|
|
71
|
+
}
|
|
72
|
+
runQueries(qyDB);
|
|
73
|
+
console.time("stop");
|
|
74
|
+
await qyDB.stop();
|
|
75
|
+
console.timeEnd("stop");
|
|
76
|
+
console.timeEnd("run");
|
|
77
|
+
console.timeEnd("total");
|
|
78
|
+
}
|