datafolder 1.0.9 → 1.0.11
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/{internal.md → Internal.md} +8 -1
- package/README.md +6 -2
- package/SKILL.md +191 -0
- package/SSD.md +60 -0
- package/index.js +1 -0
- package/package.json +2 -2
- package/sample.js +4 -4
- package/scripts/airbnb.js +1 -0
- package/scripts/airbnb2.js +1 -0
- package/scripts/convertBinFiles.js +1 -0
- package/scripts/express.js +2 -1
- package/scripts/fastify.js +1 -0
- package/scripts/flights.js +1 -0
- package/scripts/flights2.js +1 -0
- package/scripts/flights_queries.js +1 -0
- package/src/QyAcl.d.ts +3 -3
- package/src/QyAcl.js +7 -7
- package/src/QyAclSaver_Worker.d.ts +1 -0
- package/src/QyAclSaver_Worker.js +1 -0
- package/src/QyAclWriter.d.ts +2 -1
- package/src/QyAclWriter.js +7 -6
- package/src/QyBatch.d.ts +29 -22
- package/src/QyBatch.js +85 -72
- package/src/QyBinWriter.d.ts +9 -4
- package/src/QyBinWriter.js +83 -70
- package/src/QyCD.d.ts +19 -19
- package/src/QyCD.js +2 -2
- package/src/QyCache.d.ts +22 -23
- package/src/QyCache.js +47 -36
- package/src/QyCompressor_Worker.js +2 -2
- package/src/QyDB.d.ts +6 -9
- package/src/QyDB.js +1 -1
- package/src/QyFile.d.ts +2 -0
- package/src/QyFile.js +42 -40
- package/src/QyFileContentUtils.d.ts +1 -4
- package/src/QyFileLogger.d.ts +4 -0
- package/src/QyFileLogger.js +30 -26
- package/src/QyIndex.d.ts +2 -2
- package/src/QyIndex.js +84 -80
- package/src/QyIndexPropTree.d.ts +4 -0
- package/src/QyIndexPropTree.js +19 -10
- package/src/QyIntersectNode.d.ts +1 -0
- package/src/QyIntersectNode.js +1 -0
- package/src/QyJsonSaver.d.ts +2 -2
- package/src/QyJsonSaver.js +4 -4
- package/src/QyKVData.d.ts +18 -1
- package/src/QyKVData.js +73 -53
- package/src/QyKVDataCleaner_Worker.d.ts +7 -1
- package/src/QyKVDataCleaner_Worker.js +54 -40
- package/src/QyKVDataLoader.d.ts +10 -2
- package/src/QyKVDataLoader.js +27 -21
- package/src/QyKVDataSaver_Worker.d.ts +10 -0
- package/src/QyKVDataSaver_Worker.js +23 -9
- package/src/QyLogFileSaver_Worker.d.ts +1 -0
- package/src/QyLogFileSaver_Worker.js +7 -6
- package/src/QyLogger.d.ts +21 -10
- package/src/QyLogger.js +111 -67
- package/src/QyMessageWorker.d.ts +1 -1
- package/src/QyMessageWorker.js +5 -5
- package/src/QyMessager.d.ts +5 -1
- package/src/QyMessager.js +6 -1
- package/src/QyMessager_Run.js +4 -3
- package/src/QyMod.js +9 -8
- package/src/QyOpRunner.d.ts +5 -1
- package/src/QyOpRunner.js +7 -7
- package/src/QyQueue.d.ts +5 -1
- package/src/QyQueue.js +6 -7
- package/src/QySaver.d.ts +3 -0
- package/src/QySaver.js +26 -15
- package/src/QySnapshotCompactor_Worker.d.ts +7 -0
- package/src/QySnapshotCompactor_Worker.js +37 -26
- package/src/QySnapshotSaver_Worker.d.ts +8 -1
- package/src/QySnapshotSaver_Worker.js +21 -14
- package/src/QySnapshots.d.ts +19 -7
- package/src/QySnapshots.js +204 -181
- package/src/QyTrigger.d.ts +5 -1
- package/src/QyTrigger.js +44 -34
- package/src/QyUnionNode.d.ts +10 -1
- package/src/QyUnionNode.js +34 -36
- package/src/QyUtils.d.ts +2 -2
- package/src/QyUtils.js +116 -111
- package/src/simulate.js +34 -31
- package/src/simulate2.js +49 -46
- package/src/soc_pokec.js +17 -11
- package/static/codemirror.bundle/editor.bundle.js +2 -0
package/src/QyUtils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import n from "node:crypto";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import t from "node:path";
|
|
4
4
|
|
|
5
5
|
import e from "node:process";
|
|
6
6
|
|
|
@@ -14,114 +14,118 @@ import {
|
|
|
14
14
|
fileURLToPath as r
|
|
15
15
|
} from "node:url";
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
import {
|
|
18
|
+
logger as u
|
|
19
|
+
} from "../src/QyLogger.js";
|
|
20
|
+
|
|
21
|
+
var a = t.dirname(r(import.meta.url)), f = Object.fromEntries([ "$del", "$link", "$rpl", "$spec", "$raw", "$all", "$clone", "$ext", "$or", "$and", "$gt", "$lt", "$gte", "$lte" ].map(r => [ r, r ])), c = "%", c = {
|
|
22
|
+
HiddenFolderName: c,
|
|
23
|
+
TriggerDirPath: [ c, "trigger" ],
|
|
24
|
+
RpcDirPath: [ c, "rpc" ],
|
|
25
|
+
IndexDirPath: [ c, "index" ],
|
|
22
26
|
IndexPropPathsFileName: "propPaths"
|
|
23
27
|
};
|
|
24
28
|
|
|
25
|
-
function
|
|
29
|
+
function s(r) {
|
|
26
30
|
return r.startsWith("{") && r.endsWith("}");
|
|
27
31
|
}
|
|
28
32
|
|
|
29
|
-
function
|
|
30
|
-
return
|
|
33
|
+
function d(r) {
|
|
34
|
+
return s(r) && r.substring(1, r.length - 1);
|
|
31
35
|
}
|
|
32
36
|
|
|
33
|
-
function
|
|
37
|
+
function m(r) {
|
|
34
38
|
return 1e12 < r ? Math.round(100 * r / 1e12) / 100 + "TB" : 1e9 < r ? Math.round(100 * r / 1e9) / 100 + "GB" : 1e6 < r ? Math.round(100 * r / 1e6) / 100 + "MB" : 1e3 < r ? Math.round(100 * r / 1e3) / 100 + "KB" : r.toString();
|
|
35
39
|
}
|
|
36
40
|
|
|
37
|
-
function
|
|
38
|
-
return
|
|
41
|
+
function p(r, t = 10) {
|
|
42
|
+
return n.createHash("sha256").update(r, "utf8").digest("base64url").slice(0, t);
|
|
39
43
|
}
|
|
40
44
|
|
|
41
|
-
var
|
|
45
|
+
var h = 11;
|
|
42
46
|
|
|
43
47
|
function g(r) {
|
|
44
48
|
return "d" + r;
|
|
45
49
|
}
|
|
46
50
|
|
|
47
|
-
function
|
|
51
|
+
function y(r) {
|
|
48
52
|
return "f" + r;
|
|
49
53
|
}
|
|
50
54
|
|
|
51
|
-
function
|
|
55
|
+
function v(r) {
|
|
52
56
|
return "c" + r;
|
|
53
57
|
}
|
|
54
58
|
|
|
55
|
-
function
|
|
56
|
-
return
|
|
59
|
+
function b(r = 8) {
|
|
60
|
+
return n.randomBytes(r).toString("hex");
|
|
57
61
|
}
|
|
58
62
|
|
|
59
|
-
function
|
|
63
|
+
function $(r) {
|
|
60
64
|
return r[r.length - 1];
|
|
61
65
|
}
|
|
62
66
|
|
|
63
|
-
function
|
|
64
|
-
if (null != r) for (var
|
|
67
|
+
function w(r) {
|
|
68
|
+
if (null != r) for (var t in r) if (null != r[t]) return !1;
|
|
65
69
|
return !0;
|
|
66
70
|
}
|
|
67
71
|
|
|
68
|
-
function
|
|
72
|
+
function P(r) {
|
|
69
73
|
return null != r && "object" == typeof r && !(r instanceof Date);
|
|
70
74
|
}
|
|
71
75
|
|
|
72
|
-
function
|
|
76
|
+
function S(r) {
|
|
73
77
|
return "string" == typeof r;
|
|
74
78
|
}
|
|
75
79
|
|
|
76
|
-
function
|
|
80
|
+
function j(r) {
|
|
77
81
|
return "number" == typeof r;
|
|
78
82
|
}
|
|
79
83
|
|
|
80
|
-
function
|
|
84
|
+
function x(r) {
|
|
81
85
|
return "boolean" == typeof r;
|
|
82
86
|
}
|
|
83
87
|
|
|
84
|
-
function
|
|
88
|
+
function B(r) {
|
|
85
89
|
return "function" == typeof r;
|
|
86
90
|
}
|
|
87
91
|
|
|
88
|
-
function
|
|
89
|
-
var
|
|
90
|
-
return "string" ==
|
|
92
|
+
function M(r) {
|
|
93
|
+
var t = typeof r;
|
|
94
|
+
return "string" == t || "number" == t || "boolean" == t || r instanceof Date;
|
|
91
95
|
}
|
|
92
96
|
|
|
93
|
-
function
|
|
94
|
-
let
|
|
95
|
-
for (;null == r[
|
|
96
|
-
return r.length =
|
|
97
|
+
function O(r) {
|
|
98
|
+
let t = r.length;
|
|
99
|
+
for (;null == r[t - 1] && 0 < t; ) --t;
|
|
100
|
+
return r.length = t, r;
|
|
97
101
|
}
|
|
98
102
|
|
|
99
|
-
function
|
|
100
|
-
return
|
|
103
|
+
function T(n) {
|
|
104
|
+
return n.promise || (n.promise = new Promise((r, t) => Object.assign(n, {
|
|
101
105
|
resolve: r,
|
|
102
|
-
reject:
|
|
103
|
-
}))),
|
|
106
|
+
reject: t
|
|
107
|
+
}))), n;
|
|
104
108
|
}
|
|
105
109
|
|
|
106
110
|
function k(r) {
|
|
107
111
|
return Buffer.isBuffer(r) ? r : Buffer.from(r);
|
|
108
112
|
}
|
|
109
113
|
|
|
110
|
-
function
|
|
114
|
+
function A(r) {
|
|
111
115
|
return 1 < r ? "s" : "";
|
|
112
116
|
}
|
|
113
117
|
|
|
114
|
-
function
|
|
118
|
+
function D(r) {
|
|
115
119
|
return l.mkdir(r, {
|
|
116
120
|
recursive: !0
|
|
117
121
|
});
|
|
118
122
|
}
|
|
119
123
|
|
|
120
|
-
function
|
|
121
|
-
return
|
|
124
|
+
function F(r) {
|
|
125
|
+
return D(t.dirname(r));
|
|
122
126
|
}
|
|
123
127
|
|
|
124
|
-
async function
|
|
128
|
+
async function I(r) {
|
|
125
129
|
try {
|
|
126
130
|
return (await l.stat(r)).size;
|
|
127
131
|
} catch (r) {
|
|
@@ -129,40 +133,41 @@ async function T(r) {
|
|
|
129
133
|
}
|
|
130
134
|
}
|
|
131
135
|
|
|
132
|
-
async function
|
|
133
|
-
return !1 !== await
|
|
136
|
+
async function W(r) {
|
|
137
|
+
return !1 !== await I(r);
|
|
134
138
|
}
|
|
135
139
|
|
|
136
|
-
function
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
+
function E(r, t = void 0) {
|
|
141
|
+
r *= 1e3;
|
|
142
|
+
return t ? i.setTimeout(r, !0, {
|
|
143
|
+
signal: t
|
|
144
|
+
}) : i.setTimeout(r);
|
|
140
145
|
}
|
|
141
146
|
|
|
142
|
-
let N
|
|
147
|
+
let N;
|
|
143
148
|
|
|
144
|
-
async function
|
|
149
|
+
async function L(t) {
|
|
145
150
|
try {
|
|
146
|
-
await
|
|
151
|
+
await F(t);
|
|
147
152
|
var r = new Date().toISOString() + ": " + e.argv.join(" ");
|
|
148
|
-
function
|
|
153
|
+
function n() {
|
|
149
154
|
for (var r of Object.keys(N)) U(r);
|
|
150
155
|
}
|
|
151
|
-
await l.writeFile(
|
|
156
|
+
await l.writeFile(t, r, {
|
|
152
157
|
flag: "wx",
|
|
153
158
|
flush: !0
|
|
154
|
-
}),
|
|
155
|
-
[
|
|
156
|
-
}, e.on("exit",
|
|
159
|
+
}), u.info("Locked " + t), N ? N[t] = 1 : (N = {
|
|
160
|
+
[t]: 1
|
|
161
|
+
}, e.on("exit", n), e.on("SIGINT", n));
|
|
157
162
|
} catch (r) {
|
|
158
|
-
throw "EEXIST" == r.code &&
|
|
163
|
+
throw "EEXIST" == r.code && u.error(`Already started by ${(await l.readFile(t)).toString()}:`, r),
|
|
159
164
|
r;
|
|
160
165
|
}
|
|
161
166
|
}
|
|
162
167
|
|
|
163
168
|
function U(r) {
|
|
164
169
|
try {
|
|
165
|
-
o.unlinkSync(r),
|
|
170
|
+
o.unlinkSync(r), u.info("Unlocked " + r);
|
|
166
171
|
} catch (r) {}
|
|
167
172
|
}
|
|
168
173
|
|
|
@@ -183,58 +188,58 @@ function J(r) {
|
|
|
183
188
|
return r.split(".");
|
|
184
189
|
}
|
|
185
190
|
|
|
186
|
-
function
|
|
191
|
+
function Q(r) {
|
|
187
192
|
return r.join(".");
|
|
188
193
|
}
|
|
189
194
|
|
|
190
|
-
function z(r,
|
|
191
|
-
return Math.floor(Math.random() * (r -
|
|
195
|
+
function z(r, t = 0) {
|
|
196
|
+
return Math.floor(Math.random() * (r - t)) + t;
|
|
192
197
|
}
|
|
193
198
|
|
|
194
199
|
function K(r) {
|
|
195
|
-
var
|
|
196
|
-
for (
|
|
197
|
-
return
|
|
200
|
+
var t, n = {};
|
|
201
|
+
for (t of r) n[t] = 1;
|
|
202
|
+
return n;
|
|
198
203
|
}
|
|
199
204
|
|
|
200
|
-
async function
|
|
205
|
+
async function X(t, n, e, o) {
|
|
201
206
|
var i = Buffer.allocUnsafe(o);
|
|
202
207
|
for (let r = 0; r < o; ) {
|
|
203
|
-
var a = (await
|
|
204
|
-
if (0 == a) return void
|
|
208
|
+
var a = (await n.read(i, r, o - r, e + r)).bytesRead;
|
|
209
|
+
if (0 == a) return void u.error(`read ${t} at ${e + r} returning 0 byte`);
|
|
205
210
|
r += a;
|
|
206
211
|
}
|
|
207
212
|
return i;
|
|
208
213
|
}
|
|
209
214
|
|
|
210
|
-
function
|
|
215
|
+
function q() {
|
|
211
216
|
var r = e.availableMemory();
|
|
212
217
|
return Math.round(r / (e.memoryUsage.rss() + r) * 100);
|
|
213
218
|
}
|
|
214
219
|
|
|
215
|
-
async function*
|
|
216
|
-
var
|
|
217
|
-
for (let r = 0; r <
|
|
220
|
+
async function* C(e, t = 3) {
|
|
221
|
+
var n = e.length, o = (n < t && (t = n), new Array(n));
|
|
222
|
+
for (let r = 0; r < t; ++r) {
|
|
218
223
|
var i = o[r] = {};
|
|
219
224
|
s(r, i);
|
|
220
225
|
}
|
|
221
|
-
for (let r = 0; r <
|
|
222
|
-
var a = o[r %
|
|
226
|
+
for (let r = 0; r < n; ++r) {
|
|
227
|
+
var a = o[r % t], {
|
|
223
228
|
filePath: u,
|
|
224
229
|
bin: f
|
|
225
|
-
} = (a.bin || await a.promise, a), c = r +
|
|
226
|
-
c <
|
|
230
|
+
} = (a.bin || await a.promise, a), c = r + t;
|
|
231
|
+
c < n && s(c, a), yield {
|
|
227
232
|
filePath: u,
|
|
228
233
|
bin: f
|
|
229
234
|
};
|
|
230
235
|
}
|
|
231
|
-
async function s(r,
|
|
232
|
-
var r = e[r],
|
|
233
|
-
Object.assign(
|
|
236
|
+
async function s(r, t) {
|
|
237
|
+
var r = e[r], n = l.readFile(r);
|
|
238
|
+
Object.assign(t, {
|
|
234
239
|
filePath: r,
|
|
235
|
-
promise:
|
|
240
|
+
promise: n,
|
|
236
241
|
bin: void 0
|
|
237
|
-
}),
|
|
242
|
+
}), t.bin = await n;
|
|
238
243
|
}
|
|
239
244
|
}
|
|
240
245
|
|
|
@@ -242,44 +247,44 @@ export * as default from "./QyUtils.js";
|
|
|
242
247
|
|
|
243
248
|
export {
|
|
244
249
|
a as __dirname,
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
250
|
+
f as SpecialOperators,
|
|
251
|
+
c as SpecialFilePaths,
|
|
252
|
+
s as isMatchName,
|
|
253
|
+
d as getMatchParam,
|
|
254
|
+
m as getSizeStr,
|
|
255
|
+
p as calHash,
|
|
256
|
+
h as Hash_Key_Length,
|
|
252
257
|
g as getSubdirMapKey,
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
258
|
+
y as getFileMapKey,
|
|
259
|
+
v as getContentKey,
|
|
260
|
+
b as getRandomStr,
|
|
261
|
+
$ as arrayLast,
|
|
262
|
+
w as isEmptyObj,
|
|
263
|
+
P as isNotNullObj,
|
|
264
|
+
S as isString,
|
|
265
|
+
j as isNumber,
|
|
266
|
+
x as isBoolean,
|
|
267
|
+
B as isFunction,
|
|
268
|
+
M as isSimpleType,
|
|
269
|
+
O as trimArrayTail,
|
|
270
|
+
T as setPromise,
|
|
266
271
|
k as toBuffer,
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
272
|
+
A as getSuffix,
|
|
273
|
+
D as ensureDir,
|
|
274
|
+
F as ensureParentDir,
|
|
275
|
+
I as getSize,
|
|
276
|
+
W as folderOrFileExists,
|
|
277
|
+
E as sleep,
|
|
278
|
+
L as lockExclusiveFilePath,
|
|
274
279
|
U as unlockExclusiveFilePath,
|
|
275
280
|
R as fromSingleName,
|
|
276
281
|
G as toSingleName,
|
|
277
282
|
H as pathSplit,
|
|
278
283
|
J as propNameSplit,
|
|
279
|
-
|
|
284
|
+
Q as propNameJoin,
|
|
280
285
|
z as randomInt,
|
|
281
286
|
K as listToMap,
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
287
|
+
X as readBufferAsync,
|
|
288
|
+
q as memoryPercent,
|
|
289
|
+
C as loadFileList
|
|
285
290
|
};
|
package/src/simulate.js
CHANGED
|
@@ -18,40 +18,40 @@ import {
|
|
|
18
18
|
} from "./QyUtils.js";
|
|
19
19
|
|
|
20
20
|
import {
|
|
21
|
-
|
|
21
|
+
logger as l
|
|
22
|
+
} from "./QyLogger.js";
|
|
23
|
+
|
|
24
|
+
import {
|
|
25
|
+
runQueries as c
|
|
22
26
|
} from "../scripts/airbnb2_queries.js";
|
|
23
27
|
|
|
24
|
-
|
|
28
|
+
l.level = "info";
|
|
25
29
|
|
|
26
|
-
let r = "../airbnb",
|
|
30
|
+
let r = "../airbnb", m = "./tmp/simulate", p, f, v, d, g, y;
|
|
27
31
|
|
|
28
|
-
async function
|
|
32
|
+
async function b(e) {
|
|
29
33
|
return JSON.parse(await s(t(r, e)));
|
|
30
34
|
}
|
|
31
35
|
|
|
32
|
-
function
|
|
36
|
+
function h(e) {
|
|
33
37
|
console.time("insertData");
|
|
34
38
|
var t, s, r, o = e.batch;
|
|
35
|
-
for (t of
|
|
36
|
-
for (s of
|
|
37
|
-
var i =
|
|
39
|
+
for (t of d) o.insert([ "hosts", t ], p[t]);
|
|
40
|
+
for (s of g) {
|
|
41
|
+
var i = f[s], {
|
|
38
42
|
property_type: a,
|
|
39
43
|
room_type: n,
|
|
40
44
|
bed_type: l
|
|
41
45
|
} = i;
|
|
42
46
|
o.insert([ "airbnb", a, n, l, s ], i);
|
|
43
47
|
}
|
|
44
|
-
for (r of
|
|
45
|
-
var c =
|
|
48
|
+
for (r of y) {
|
|
49
|
+
var c = v[r];
|
|
46
50
|
o.insert([ "reviews", c.listing_id, r ], c);
|
|
47
51
|
}
|
|
48
52
|
o.run(), console.timeEnd("insertData");
|
|
49
53
|
}
|
|
50
54
|
|
|
51
|
-
function h() {
|
|
52
|
-
return m[v[u(v.length)]];
|
|
53
|
-
}
|
|
54
|
-
|
|
55
55
|
function _() {
|
|
56
56
|
return p[d[u(d.length)]];
|
|
57
57
|
}
|
|
@@ -60,19 +60,23 @@ function j() {
|
|
|
60
60
|
return f[g[u(g.length)]];
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
|
|
63
|
+
function D() {
|
|
64
|
+
return v[y[u(y.length)]];
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
async function E(e, t) {
|
|
64
68
|
for (;0 < t--; ) {
|
|
65
69
|
switch (u(3)) {
|
|
66
70
|
case 0:
|
|
67
71
|
s = a = i = o = r = void 0;
|
|
68
|
-
var s, r = e, o =
|
|
72
|
+
var s, r = e, o = _(), i = _(), a = {};
|
|
69
73
|
for (s in i) 1 == u(2) && (a[s] = i[s]);
|
|
70
74
|
r.insert([ "hosts", o.host_id ], a);
|
|
71
75
|
break;
|
|
72
76
|
|
|
73
77
|
case 1:
|
|
74
78
|
n = f = p = m = c = l = o = r = void 0;
|
|
75
|
-
var n, r = e, o =
|
|
79
|
+
var n, r = e, o = j(), l = j(), c = {};
|
|
76
80
|
for (n in l) 1 == u(2) && (c[n] = l[n]);
|
|
77
81
|
var {
|
|
78
82
|
property_type: o,
|
|
@@ -85,7 +89,7 @@ async function D(e, t) {
|
|
|
85
89
|
|
|
86
90
|
case 2:
|
|
87
91
|
v = g = d = p = m = void 0;
|
|
88
|
-
var v, m = e, p =
|
|
92
|
+
var v, m = e, p = D(), d = D(), g = {};
|
|
89
93
|
for (v in d) 1 == u(2) && (g[v] = d[v]);
|
|
90
94
|
m.insert([ "reviews", p.listing_id, p._id ], g);
|
|
91
95
|
}
|
|
@@ -95,25 +99,24 @@ async function D(e, t) {
|
|
|
95
99
|
|
|
96
100
|
(async () => {
|
|
97
101
|
console.time("total");
|
|
98
|
-
let t = process.argv[2] || 1e3, s = process.argv[3] || 100, e;
|
|
102
|
+
let t = +(process.argv[2] || 1e3), s = +(process.argv[3] || 100), e;
|
|
99
103
|
if ("true" == process.argv[4]) {
|
|
100
104
|
try {
|
|
101
|
-
await i(
|
|
105
|
+
await i(m, {
|
|
102
106
|
recursive: !0
|
|
103
107
|
});
|
|
104
108
|
} catch (e) {}
|
|
105
109
|
e = !0;
|
|
106
|
-
} else await n(
|
|
107
|
-
process.argv[5] && (
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
var r = new a(c, {
|
|
110
|
+
} else await n(m) || (e = !0);
|
|
111
|
+
process.argv[5] && (l.level = process.argv[5]), console.time("loadData"), [ p, f, v ] = await Promise.all([ b("hosts.json"), b("listings.json"), b("reviews.json") ]),
|
|
112
|
+
d = Object.keys(p), g = Object.keys(f), y = Object.keys(v), await !console.timeEnd("loadData"),
|
|
113
|
+
console.log(`hosts:${d.length}, listings:${g.length}, reviews:` + y.length);
|
|
114
|
+
var r = new a(m, {
|
|
112
115
|
fileLogLevel: "basic"
|
|
113
|
-
}), o = (e && (await r.start(),
|
|
114
|
-
await r.start(),
|
|
115
|
-
for (let e = 0; e < t; ++e) o.push(
|
|
116
|
-
await Promise.all(o),
|
|
117
|
-
console.time("start"), await r.start(), console.timeEnd("start"),
|
|
116
|
+
}), o = (e && (await r.start(), h(r), await r.stop()), console.time("simulate " + s),
|
|
117
|
+
await r.start(), c(r), []);
|
|
118
|
+
for (let e = 0; e < t; ++e) o.push(E(r, s));
|
|
119
|
+
await Promise.all(o), h(r), await r.stop(), console.timeEnd("simulate " + s),
|
|
120
|
+
console.time("start"), await r.start(), console.timeEnd("start"), c(r), await r.stop(),
|
|
118
121
|
console.timeEnd("total");
|
|
119
122
|
})();
|
package/src/simulate2.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
-
join as
|
|
2
|
+
join as e
|
|
3
3
|
} from "node:path";
|
|
4
4
|
|
|
5
5
|
import {
|
|
@@ -14,96 +14,99 @@ import {
|
|
|
14
14
|
import {
|
|
15
15
|
folderOrFileExists as l,
|
|
16
16
|
randomInt as c,
|
|
17
|
-
sleep as
|
|
17
|
+
sleep as m
|
|
18
18
|
} from "./QyUtils.js";
|
|
19
19
|
|
|
20
20
|
import {
|
|
21
|
-
|
|
21
|
+
logger as f
|
|
22
|
+
} from "./QyLogger.js";
|
|
23
|
+
|
|
24
|
+
import {
|
|
25
|
+
runQueries as g
|
|
22
26
|
} from "../scripts/flights2_queries.js";
|
|
23
27
|
|
|
24
|
-
|
|
28
|
+
f.level = "info";
|
|
25
29
|
|
|
26
|
-
let s = "../GraphCourse_DemoData_ArangoDB-2",
|
|
30
|
+
let s = "../GraphCourse_DemoData_ArangoDB-2", p = "C:\\tmp\\simulate2", d, h;
|
|
27
31
|
|
|
28
|
-
async function
|
|
29
|
-
return JSON.parse(await o(
|
|
32
|
+
async function u(t) {
|
|
33
|
+
return JSON.parse(await o(e(s, t)));
|
|
30
34
|
}
|
|
31
35
|
|
|
32
|
-
function
|
|
36
|
+
function v() {
|
|
33
37
|
return d[c(d.length)];
|
|
34
38
|
}
|
|
35
39
|
|
|
36
|
-
function
|
|
37
|
-
var
|
|
40
|
+
function w(t) {
|
|
41
|
+
var e, o = c(h.length), {
|
|
38
42
|
Year: s,
|
|
39
43
|
Month: r,
|
|
40
44
|
Day: i
|
|
41
|
-
} =
|
|
42
|
-
for (
|
|
43
|
-
|
|
45
|
+
} = h[o], a = h[c(h.length)], n = {};
|
|
46
|
+
for (e in a) 1 == c(2) && (n[e] = a[e]);
|
|
47
|
+
t.insert([ "flights", s, r, i, o ], n);
|
|
44
48
|
}
|
|
45
49
|
|
|
46
|
-
async function
|
|
47
|
-
for (;0 <
|
|
50
|
+
async function y(t, e) {
|
|
51
|
+
for (;0 < e--; ) {
|
|
48
52
|
switch (c(2)) {
|
|
49
53
|
case 0:
|
|
50
54
|
o = a = i = r = s = void 0;
|
|
51
|
-
var o, s =
|
|
55
|
+
var o, s = t, r = v()._key, i = v(), a = {};
|
|
52
56
|
for (o in i) 1 == c(2) && (a[o] = i[o]);
|
|
53
57
|
s.insert([ "airports", r ], a);
|
|
54
58
|
break;
|
|
55
59
|
|
|
56
60
|
case 1:
|
|
57
|
-
|
|
61
|
+
w(t);
|
|
58
62
|
}
|
|
59
|
-
await
|
|
63
|
+
await m(1);
|
|
60
64
|
}
|
|
61
65
|
}
|
|
62
66
|
|
|
63
|
-
function
|
|
64
|
-
var
|
|
67
|
+
function b(t) {
|
|
68
|
+
var e = t;
|
|
65
69
|
console.time("insertAirports");
|
|
66
|
-
var o, s =
|
|
70
|
+
var o, s = e.batch;
|
|
67
71
|
for (o of d) s.insert("airports/" + o._key, o);
|
|
68
72
|
s.run(), console.timeEnd("insertAirports");
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
var r, i =
|
|
72
|
-
for (let
|
|
73
|
-
var a =
|
|
73
|
+
e = t;
|
|
74
|
+
f.log("insertFlights begin"), console.time("insertFlights");
|
|
75
|
+
var r, i = e.batch;
|
|
76
|
+
for (let t = 0; t < h.length; ++t) {
|
|
77
|
+
var a = h[t], {
|
|
74
78
|
Year: n,
|
|
75
79
|
Month: l,
|
|
76
80
|
Day: c
|
|
77
81
|
} = a;
|
|
78
|
-
i.insert(`flights/${n}/${l}/${c}/` +
|
|
82
|
+
i.insert(`flights/${n}/${l}/${c}/` + t, a);
|
|
79
83
|
}
|
|
80
|
-
i.run(),
|
|
81
|
-
|
|
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" ]);
|
|
84
|
+
i.run(), f.log("insertFlights end"), console.timeEnd("insertFlights"), console.time("createFlightsIndex");
|
|
85
|
+
for (r of e.dir("flights").subdirList) for (var m of r.subdirList) for (var g of m.subdirList) i.createIndex(g, [ "_from", "_to" ]);
|
|
83
86
|
i.run(), console.timeEnd("createFlightsIndex");
|
|
84
87
|
}
|
|
85
88
|
|
|
86
89
|
(async () => {
|
|
87
90
|
console.time("total");
|
|
88
|
-
let
|
|
91
|
+
let e = +(process.argv[2] || 1e3), o = +(process.argv[3] || 100), t;
|
|
89
92
|
if ("true" == process.argv[4]) {
|
|
90
93
|
try {
|
|
91
|
-
await a(
|
|
94
|
+
await a(p, {
|
|
92
95
|
recursive: !0
|
|
93
96
|
});
|
|
94
|
-
} catch (
|
|
95
|
-
|
|
96
|
-
} else await l(
|
|
97
|
-
process.argv[5] && (
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
}), r = (
|
|
103
|
-
`simulate ${
|
|
104
|
-
for (let
|
|
105
|
-
await Promise.all(i), console.timeEnd(r),
|
|
106
|
-
console.time("del%"), s.delDir("%"), console.timeEnd("del%"),
|
|
97
|
+
} catch (t) {}
|
|
98
|
+
t = !0;
|
|
99
|
+
} else await l(p) || (t = !0);
|
|
100
|
+
process.argv[5] && (f.level = process.argv[5]), console.time("loadData"), [ d, h ] = await Promise.all([ u("airports.json"), u("flights.json") ]),
|
|
101
|
+
await !console.timeEnd("loadData"), console.log(`airports:${d.length}, flights:` + h.length);
|
|
102
|
+
var s = new n(p, {
|
|
103
|
+
fileLogLevel: "basic",
|
|
104
|
+
maxInMemSnapshotCount: 3
|
|
105
|
+
}), r = (t && (await s.start(), b(s), await s.stop()), await s.start(), g(s),
|
|
106
|
+
`simulate ${e} ` + o), i = (console.time(r), console.time("simulateStop"), []);
|
|
107
|
+
for (let t = 0; t < e; ++t) i.push(y(s, o));
|
|
108
|
+
await Promise.all(i), console.timeEnd(r), f.log(`Simulate ${e} for ${o} ended.`),
|
|
109
|
+
console.time("del%"), s.delDir("%"), console.timeEnd("del%"), b(s), await s.stop(),
|
|
107
110
|
console.timeEnd("simulateStop"), console.time("start"), await s.start(), console.timeEnd("start"),
|
|
108
|
-
|
|
111
|
+
g(s), await s.stop(), console.timeEnd("total"), global.gc && global.gc();
|
|
109
112
|
})();
|