datafolder 1.0.0
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 +169 -0
- package/index.js +3 -0
- package/package.json +27 -0
- package/sample.js +37 -0
- package/scripts/airbnb.js +73 -0
- package/scripts/airbnb2.js +74 -0
- package/scripts/airbnb2_queries.js +231 -0
- package/scripts/airbnb_queries.js +264 -0
- package/scripts/downloadFile.js +42 -0
- package/scripts/express.js +46 -0
- package/scripts/fastify.js +79 -0
- package/scripts/flights.js +75 -0
- package/scripts/flights2.js +81 -0
- package/scripts/flights2_queries.js +453 -0
- package/scripts/flights_queries.js +403 -0
- package/src/QyAcl.js +252 -0
- package/src/QyAclSaver.js +14 -0
- package/src/QyAclSaver_Worker.js +29 -0
- package/src/QyAclWriter.js +19 -0
- package/src/QyBatch.js +501 -0
- package/src/QyBinWriter.js +140 -0
- package/src/QyCD.js +61 -0
- package/src/QyCache.js +212 -0
- package/src/QyCompressor.js +60 -0
- package/src/QyCompressor_Worker.js +13 -0
- package/src/QyDB.js +122 -0
- package/src/QyDefaultOptions.js +59 -0
- package/src/QyDir.js +192 -0
- package/src/QyFetch.js +38 -0
- package/src/QyFile.js +124 -0
- package/src/QyFileContentUtils.js +175 -0
- package/src/QyFileLogger.js +58 -0
- package/src/QyIndex.js +237 -0
- package/src/QyIndexPropTree.js +92 -0
- package/src/QyIntersectNode.js +48 -0
- package/src/QyItem.js +105 -0
- package/src/QyJsonSaver.js +20 -0
- package/src/QyKVData.js +289 -0
- package/src/QyKVDataCleaner.js +17 -0
- package/src/QyKVDataCleaner_Worker.js +94 -0
- package/src/QyKVDataLoader.js +65 -0
- package/src/QyKVDataSaver.js +17 -0
- package/src/QyKVDataSaver_Worker.js +81 -0
- package/src/QyLogFileSaver.js +14 -0
- package/src/QyLogFileSaver_Worker.js +26 -0
- package/src/QyLogger.js +76 -0
- package/src/QyMessageWorker.js +41 -0
- package/src/QyMessager.js +84 -0
- package/src/QyMessager_Run.js +13 -0
- package/src/QyMod.js +15 -0
- package/src/QyOpRunner.js +73 -0
- package/src/QyQueue.js +60 -0
- package/src/QySaver.js +83 -0
- package/src/QySnapshotCompactor.js +17 -0
- package/src/QySnapshotCompactor_Worker.js +151 -0
- package/src/QySnapshotSaver.js +17 -0
- package/src/QySnapshotSaver_Worker.js +164 -0
- package/src/QySnapshots.js +354 -0
- package/src/QyStructure.js +50 -0
- package/src/QyTrigger.js +133 -0
- package/src/QyUnionNode.js +105 -0
- package/src/QyUtils.js +250 -0
- package/src/QyWorker.js +33 -0
- package/src/hackernews.js +93 -0
- package/src/rpc/evalCode.js +9 -0
- package/src/rpc/getFileContent.js +16 -0
- package/src/rpc/getSubItems.js +32 -0
- package/src/rpc/queryFiles.js +33 -0
- package/src/rpc/reloadRpc.js +1 -0
- package/src/simulate.js +114 -0
- package/src/simulate2.js +110 -0
- package/src/soc_pokec.js +43 -0
- package/static/bootstrap-5.3.8-dist/css/bootstrap.min.css +6 -0
- package/static/bootstrap-5.3.8-dist/js/bootstrap.bundle.js +6312 -0
- package/static/datafolderui/QyStyledElement.js +30 -0
- package/static/datafolderui/QyUIFolderTree.js +203 -0
- package/static/datafolderui/QyUIUtils.js +42 -0
- package/static/datafolderui/display-tree.js +108 -0
- package/static/datafolderui/explore-tree.js +122 -0
- package/static/datafolderui/folder-tree.js +5 -0
- package/static/datafolderui/hscrpt.js +25 -0
- package/static/datafolderui/index.css +6 -0
- package/static/datafolderui/index.html +20 -0
- package/static/datafolderui/json-view.js +74 -0
- package/static/datafolderui/kv-input.js +66 -0
- package/static/datafolderui/list-input.js +52 -0
- package/static/datafolderui/main-page.js +98 -0
- package/static/datafolderui/num-input.js +27 -0
- package/static/datafolderui/query-editor.js +229 -0
- package/static/datafolderui/querySelectorShadowRoot.js +24 -0
- package/static/datafolderui/resizable-input.js +67 -0
- package/static/favicon.ico +0 -0
- package/static/icons-1.13.1/font/bootstrap-icons.min.css +5 -0
- package/static/icons-1.13.1/font/fonts/bootstrap-icons.woff +0 -0
- package/static/icons-1.13.1/font/fonts/bootstrap-icons.woff2 +0 -0
- package/static/json-view/dist/jsonview.js +433 -0
- package/static/tree.js/tree.css +106 -0
- package/static/tree.js/tree.js +374 -0
- package/static/w2ui/dist/w2ui.min.css +2 -0
- package/static/w2ui/src/less/icons/icons.json +1 -0
- package/static/w2ui/src/less/icons/preview.html +33 -0
- package/static/w2ui/src/less/icons/readme.md +15 -0
- package/static/w2ui/src/less/icons/svg/box.svg +3 -0
- package/static/w2ui/src/less/icons/svg/check.svg +3 -0
- package/static/w2ui/src/less/icons/svg/colors.svg +3 -0
- package/static/w2ui/src/less/icons/svg/columns.svg +5 -0
- package/static/w2ui/src/less/icons/svg/cross.svg +4 -0
- package/static/w2ui/src/less/icons/svg/drop.svg +6 -0
- package/static/w2ui/src/less/icons/svg/empty.svg +3 -0
- package/static/w2ui/src/less/icons/svg/eye-dropper.svg +4 -0
- package/static/w2ui/src/less/icons/svg/info.svg +8 -0
- package/static/w2ui/src/less/icons/svg/paste.svg +4 -0
- package/static/w2ui/src/less/icons/svg/pencil.svg +5 -0
- package/static/w2ui/src/less/icons/svg/plus.svg +3 -0
- package/static/w2ui/src/less/icons/svg/reload.svg +5 -0
- package/static/w2ui/src/less/icons/svg/search.svg +3 -0
- package/static/w2ui/src/less/icons/svg/settings.svg +8 -0
- package/static/w2ui/src/less/icons/w2ui-font.css +36 -0
- package/static/w2ui/src/less/icons/w2ui-font.woff +0 -0
- package/static/w2ui/src/less/src/buttons.less +184 -0
- package/static/w2ui/src/less/src/common.less +541 -0
- package/static/w2ui/src/less/src/fields.less +302 -0
- package/static/w2ui/src/less/src/form.less +319 -0
- package/static/w2ui/src/less/src/grid.less +1057 -0
- package/static/w2ui/src/less/src/icons.less +37 -0
- package/static/w2ui/src/less/src/layout.less +86 -0
- package/static/w2ui/src/less/src/mixins.less +87 -0
- package/static/w2ui/src/less/src/popup.less +277 -0
- package/static/w2ui/src/less/src/sidebar.less +343 -0
- package/static/w2ui/src/less/src/tabs.less +145 -0
- package/static/w2ui/src/less/src/toolbar.less +219 -0
- package/static/w2ui/src/less/src/tooltip.less +948 -0
- package/static/w2ui/src/less/w2ui.less +196 -0
- package/static/w2ui/src/locale/az-az.json +114 -0
- package/static/w2ui/src/locale/ba-ba.json +114 -0
- package/static/w2ui/src/locale/bg-bg.json +114 -0
- package/static/w2ui/src/locale/ca-es.json +114 -0
- package/static/w2ui/src/locale/da-dk.json +114 -0
- package/static/w2ui/src/locale/de-de.json +114 -0
- package/static/w2ui/src/locale/en-gb.json +17 -0
- package/static/w2ui/src/locale/en-us.json +17 -0
- package/static/w2ui/src/locale/es-ar.json +115 -0
- package/static/w2ui/src/locale/es-cr.json +119 -0
- package/static/w2ui/src/locale/es-es.json +114 -0
- package/static/w2ui/src/locale/es-mx.json +114 -0
- package/static/w2ui/src/locale/fr-fr.json +114 -0
- package/static/w2ui/src/locale/gl-es.json +114 -0
- package/static/w2ui/src/locale/hr-hr.json +114 -0
- package/static/w2ui/src/locale/hu-hu.json +114 -0
- package/static/w2ui/src/locale/id-id.json +114 -0
- package/static/w2ui/src/locale/it-it.json +114 -0
- package/static/w2ui/src/locale/ja-jp.json +114 -0
- package/static/w2ui/src/locale/kk-kz.json +116 -0
- package/static/w2ui/src/locale/ko-kr.json +114 -0
- package/static/w2ui/src/locale/lt-lt.json +114 -0
- package/static/w2ui/src/locale/nl-nl.json +114 -0
- package/static/w2ui/src/locale/no-no.json +114 -0
- package/static/w2ui/src/locale/pl-pl.json +114 -0
- package/static/w2ui/src/locale/pt-br.json +114 -0
- package/static/w2ui/src/locale/ru-ru.json +116 -0
- package/static/w2ui/src/locale/sk-sk.json +114 -0
- package/static/w2ui/src/locale/sl-si.json +116 -0
- package/static/w2ui/src/locale/sr-rs.json +114 -0
- package/static/w2ui/src/locale/tr-tr.json +114 -0
- package/static/w2ui/src/locale/uk-ua.json +114 -0
- package/static/w2ui/src/locale/zh-cn.json +114 -0
- package/static/w2ui/src/locale/zh-tw.json +114 -0
- package/static/w2ui/src/query.js +583 -0
- package/static/w2ui/src/readme.md +11 -0
- package/static/w2ui/src/w2base.js +311 -0
- package/static/w2ui/src/w2compat.js +207 -0
- package/static/w2ui/src/w2field.js +1854 -0
- package/static/w2ui/src/w2form.js +2411 -0
- package/static/w2ui/src/w2grid.js +8916 -0
- package/static/w2ui/src/w2layout.js +1194 -0
- package/static/w2ui/src/w2locale.js +129 -0
- package/static/w2ui/src/w2popup.js +909 -0
- package/static/w2ui/src/w2sidebar.js +1769 -0
- package/static/w2ui/src/w2tabs.js +669 -0
- package/static/w2ui/src/w2toolbar.js +1180 -0
- package/static/w2ui/src/w2tooltip.js +3134 -0
- package/static/w2ui/src/w2utils.js +2457 -0
package/src/simulate2.js
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
let path = require("node:path"), fsPromises = require("node:fs/promises"), QyDB = require("./QyDB.js").QyDB, {
|
|
2
|
+
folderOrFileExists,
|
|
3
|
+
randomInt,
|
|
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;
|
|
8
|
+
|
|
9
|
+
async function loadFile(t) {
|
|
10
|
+
return JSON.parse(await fsPromises.readFile(path.join(arangoJsonFolderPath, t)));
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
async function loadData() {
|
|
14
|
+
console.time("loadData"), [ airportList, flightList ] = await Promise.all([ loadFile("airports.json"), loadFile("flights.json") ]),
|
|
15
|
+
console.timeEnd("loadData");
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function getRandomAirport() {
|
|
19
|
+
return airportList[randomInt(airportList.length)];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function getRandomFlight() {
|
|
23
|
+
return flightList[randomInt(flightList.length)];
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function modifyAirport(t) {
|
|
27
|
+
var e, i = getRandomAirport()._key, r = getRandomAirport(), o = {};
|
|
28
|
+
for (e in r) 1 == randomInt(2) && (o[e] = r[e]);
|
|
29
|
+
t.insert([ "airports", i ], o);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function modifyFlight(t) {
|
|
33
|
+
var e, i = randomInt(flightList.length), {
|
|
34
|
+
Year: r,
|
|
35
|
+
Month: o,
|
|
36
|
+
Day: s
|
|
37
|
+
} = flightList[i], a = getRandomFlight(), n = {};
|
|
38
|
+
for (e in a) 1 == randomInt(2) && (n[e] = a[e]);
|
|
39
|
+
t.insert([ "flights", r, o, s, i ], n);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
async function simulateOne(t, e) {
|
|
43
|
+
for (;0 < e--; ) {
|
|
44
|
+
switch (randomInt(2)) {
|
|
45
|
+
case 0:
|
|
46
|
+
modifyAirport(t);
|
|
47
|
+
break;
|
|
48
|
+
|
|
49
|
+
case 1:
|
|
50
|
+
modifyFlight(t);
|
|
51
|
+
}
|
|
52
|
+
await sleep(1);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function insertAirports(t) {
|
|
57
|
+
console.time("insertAirports");
|
|
58
|
+
var e, i = t.batch;
|
|
59
|
+
for (e of airportList) i.insert("airports/" + e._key, e);
|
|
60
|
+
i.run(), console.timeEnd("insertAirports");
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function insertFlights(t) {
|
|
64
|
+
logger.log("insertFlights begin"), console.time("insertFlights");
|
|
65
|
+
var e, i = t.batch;
|
|
66
|
+
for (let t = 0; t < flightList.length; ++t) {
|
|
67
|
+
var r = flightList[t], {
|
|
68
|
+
Year: o,
|
|
69
|
+
Month: s,
|
|
70
|
+
Day: a
|
|
71
|
+
} = r;
|
|
72
|
+
i.insert(`flights/${o}/${s}/${a}/` + t, r);
|
|
73
|
+
}
|
|
74
|
+
i.run(), logger.log("insertFlights end"), console.timeEnd("insertFlights"),
|
|
75
|
+
console.time("createFlightsIndex");
|
|
76
|
+
for (e of t.dir("flights").subdirList) for (var n of e.subdirList) for (var l of n.subdirList) i.createIndex(l, [ "_from", "_to" ]);
|
|
77
|
+
i.run(), console.timeEnd("createFlightsIndex");
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function insertData(t) {
|
|
81
|
+
insertAirports(t), insertFlights(t);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
async function run() {
|
|
85
|
+
console.time("total");
|
|
86
|
+
var e = process.argv[2] || 1e3, i = process.argv[3] || 100;
|
|
87
|
+
let t;
|
|
88
|
+
if ("true" == process.argv[4]) {
|
|
89
|
+
try {
|
|
90
|
+
await fsPromises.rm(dataFolder, {
|
|
91
|
+
recursive: !0
|
|
92
|
+
});
|
|
93
|
+
} catch (t) {}
|
|
94
|
+
t = !0;
|
|
95
|
+
} else await folderOrFileExists(dataFolder) || (t = !0);
|
|
96
|
+
process.argv[5] && (logger.level = process.argv[5]), await loadData(), console.log(`airports:${airportList.length}, flights:` + flightList.length);
|
|
97
|
+
var r = new QyDB(dataFolder, {
|
|
98
|
+
fileLogLevel: "basic"
|
|
99
|
+
}), o = (t && (await r.start(), insertData(r), await r.stop()), await r.start(),
|
|
100
|
+
runQueries(r), `simulate ${e} ` + i), s = (console.time(o), console.time("simulateStop"),
|
|
101
|
+
[]);
|
|
102
|
+
for (let t = 0; t < e; ++t) s.push(simulateOne(r, i));
|
|
103
|
+
await Promise.all(s), console.timeEnd(o), logger.log(`Simulate ${e} for ${i} ended.`),
|
|
104
|
+
console.time("del%"), r.delDir("%"), console.timeEnd("del%"), insertData(r),
|
|
105
|
+
await r.stop(), console.timeEnd("simulateStop"), console.time("start"), await r.start(),
|
|
106
|
+
console.timeEnd("start"), runQueries(r), await r.stop(), console.timeEnd("total"),
|
|
107
|
+
global.gc && global.gc();
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
run();
|
package/src/soc_pokec.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
let {
|
|
2
|
+
open,
|
|
3
|
+
rm
|
|
4
|
+
} = require("node:fs/promises"), assert = require("node:assert/strict"), QyDB = require("../src/QyDB.js").QyDB, folderOrFileExists = require("../src/QyUtils.js").folderOrFileExists, socPokecRelationshipsFilePath = (logger.level = "info",
|
|
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);
|
|
6
|
+
|
|
7
|
+
async function insertProfiles() {}
|
|
8
|
+
|
|
9
|
+
async function insertData() {
|
|
10
|
+
console.time("readData");
|
|
11
|
+
var e, a = {};
|
|
12
|
+
for await (e of (await open(socPokecRelationshipsFilePath, "r")).readLines()) {
|
|
13
|
+
var [ t, r ] = e.split("\t"), s = a[t];
|
|
14
|
+
s ? s[r] = 1 : a[t] = {
|
|
15
|
+
[r]: 1
|
|
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
|
+
}
|
|
27
|
+
|
|
28
|
+
async function run() {
|
|
29
|
+
process.argv[3] && (logger.level = process.argv[3]);
|
|
30
|
+
let e;
|
|
31
|
+
if ("true" == process.argv[2]) {
|
|
32
|
+
try {
|
|
33
|
+
await rm(dataFolder, {
|
|
34
|
+
recursive: !0
|
|
35
|
+
});
|
|
36
|
+
} catch (e) {}
|
|
37
|
+
e = !0;
|
|
38
|
+
} else await folderOrFileExists(dataFolder) || (e = !0);
|
|
39
|
+
console.time("run"), await qyDB.start(), e && await insertData(), await qyDB.stop(),
|
|
40
|
+
console.timeEnd("run");
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
run();
|