aifastdb 3.10.5 → 3.10.7
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/aifastdb.node +0 -0
- package/aifastdb.win32-x64-msvc.node +0 -0
- package/dist/concurrent-document-store.d.ts +4 -0
- package/dist/concurrent-document-store.d.ts.map +1 -1
- package/dist/concurrent-document-store.js +6 -0
- package/dist/concurrent-document-store.js.map +1 -1
- package/dist/find-async-baseline.d.ts +33 -0
- package/dist/find-async-baseline.d.ts.map +1 -0
- package/dist/find-async-baseline.js +424 -0
- package/dist/find-async-baseline.js.map +1 -0
- package/dist/find-async-bench.d.ts +22 -0
- package/dist/find-async-bench.d.ts.map +1 -0
- package/dist/find-async-bench.js +322 -0
- package/dist/find-async-bench.js.map +1 -0
- package/dist/find-async-verify.d.ts +23 -0
- package/dist/find-async-verify.d.ts.map +1 -0
- package/dist/find-async-verify.js +286 -0
- package/dist/find-async-verify.js.map +1 -0
- package/dist/hnsw-insert-profile-verify.d.ts +35 -0
- package/dist/hnsw-insert-profile-verify.d.ts.map +1 -0
- package/dist/hnsw-insert-profile-verify.js +250 -0
- package/dist/hnsw-insert-profile-verify.js.map +1 -0
- package/dist/micro-batcher-benchmark.d.ts +3 -0
- package/dist/micro-batcher-benchmark.d.ts.map +1 -0
- package/dist/micro-batcher-benchmark.js +296 -0
- package/dist/micro-batcher-benchmark.js.map +1 -0
- package/dist/micro-batcher.d.ts +97 -0
- package/dist/micro-batcher.d.ts.map +1 -0
- package/dist/micro-batcher.js +77 -0
- package/dist/micro-batcher.js.map +1 -0
- package/dist/native.d.ts +71 -0
- package/dist/native.d.ts.map +1 -1
- package/dist/native.js +6 -1
- package/dist/native.js.map +1 -1
- package/dist/phase-387-reproducibility-audit.d.ts +3 -0
- package/dist/phase-387-reproducibility-audit.d.ts.map +1 -0
- package/dist/phase-387-reproducibility-audit.js +236 -0
- package/dist/phase-387-reproducibility-audit.js.map +1 -0
- package/dist/phase-390-baseline-multiseed.d.ts +3 -0
- package/dist/phase-390-baseline-multiseed.d.ts.map +1 -0
- package/dist/phase-390-baseline-multiseed.js +241 -0
- package/dist/phase-390-baseline-multiseed.js.map +1 -0
- package/dist/phase-390-t2-mb-grid-sweep.d.ts +3 -0
- package/dist/phase-390-t2-mb-grid-sweep.d.ts.map +1 -0
- package/dist/phase-390-t2-mb-grid-sweep.js +291 -0
- package/dist/phase-390-t2-mb-grid-sweep.js.map +1 -0
- package/dist/read-profiler-verify.js +236 -1
- package/dist/read-profiler-verify.js.map +1 -1
- package/dist/remember-many-spawn-benchmark.d.ts +3 -0
- package/dist/remember-many-spawn-benchmark.d.ts.map +1 -0
- package/dist/remember-many-spawn-benchmark.js +163 -0
- package/dist/remember-many-spawn-benchmark.js.map +1 -0
- package/dist/remember-spawn-benchmark.d.ts +3 -0
- package/dist/remember-spawn-benchmark.d.ts.map +1 -0
- package/dist/remember-spawn-benchmark.js +230 -0
- package/dist/remember-spawn-benchmark.js.map +1 -0
- package/dist/remember-spawn-receipt-benchmark.d.ts +3 -0
- package/dist/remember-spawn-receipt-benchmark.d.ts.map +1 -0
- package/dist/remember-spawn-receipt-benchmark.js +266 -0
- package/dist/remember-spawn-receipt-benchmark.js.map +1 -0
- package/dist/sgv2-async-verify.d.ts +17 -0
- package/dist/sgv2-async-verify.d.ts.map +1 -0
- package/dist/sgv2-async-verify.js +217 -0
- package/dist/sgv2-async-verify.js.map +1 -0
- package/dist/social-graph-v2-read-benchmark.d.ts +11 -2
- package/dist/social-graph-v2-read-benchmark.d.ts.map +1 -1
- package/dist/social-graph-v2-read-benchmark.js +145 -3
- package/dist/social-graph-v2-read-benchmark.js.map +1 -1
- package/dist/social-graph-v2.d.ts +65 -4
- package/dist/social-graph-v2.d.ts.map +1 -1
- package/dist/social-graph-v2.js +72 -6
- package/dist/social-graph-v2.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* phase-380/T380.3 (E380.B) — semantic regression guard for the new
|
|
5
|
+
* `getTagMembersAsync` / `listTagsAsync` / `getPersonsByAttributeAsync`
|
|
6
|
+
* NAPI async wrappers on `SocialGraphV2`.
|
|
7
|
+
*
|
|
8
|
+
* Same contract as `find-async-verify.ts`:
|
|
9
|
+
* 1. async length == sync length
|
|
10
|
+
* 2. when limit >= total_hits, sorted-id projection equality
|
|
11
|
+
* (per-node predicate is implicit because the sync side itself was
|
|
12
|
+
* validated in phase-377; we just check sync vs async.)
|
|
13
|
+
*
|
|
14
|
+
* Run after `npx tsc`:
|
|
15
|
+
* node packages/node/dist/sgv2-async-verify.js
|
|
16
|
+
*/
|
|
17
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
20
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
21
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
22
|
+
}
|
|
23
|
+
Object.defineProperty(o, k2, desc);
|
|
24
|
+
}) : (function(o, m, k, k2) {
|
|
25
|
+
if (k2 === undefined) k2 = k;
|
|
26
|
+
o[k2] = m[k];
|
|
27
|
+
}));
|
|
28
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
29
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
30
|
+
}) : function(o, v) {
|
|
31
|
+
o["default"] = v;
|
|
32
|
+
});
|
|
33
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
34
|
+
var ownKeys = function(o) {
|
|
35
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
36
|
+
var ar = [];
|
|
37
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
38
|
+
return ar;
|
|
39
|
+
};
|
|
40
|
+
return ownKeys(o);
|
|
41
|
+
};
|
|
42
|
+
return function (mod) {
|
|
43
|
+
if (mod && mod.__esModule) return mod;
|
|
44
|
+
var result = {};
|
|
45
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
46
|
+
__setModuleDefault(result, mod);
|
|
47
|
+
return result;
|
|
48
|
+
};
|
|
49
|
+
})();
|
|
50
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
51
|
+
const fs = __importStar(require("fs"));
|
|
52
|
+
const os = __importStar(require("os"));
|
|
53
|
+
const path = __importStar(require("path"));
|
|
54
|
+
const social_graph_v2_1 = require("./social-graph-v2");
|
|
55
|
+
function makeTempDir(prefix) {
|
|
56
|
+
return fs.mkdtempSync(path.join(os.tmpdir(), prefix));
|
|
57
|
+
}
|
|
58
|
+
function cleanupDir(dir) {
|
|
59
|
+
try {
|
|
60
|
+
fs.rmSync(dir, { recursive: true, force: true });
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
/* swallow */
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function idsSorted(entities) {
|
|
67
|
+
return entities.map((e) => e.id).sort();
|
|
68
|
+
}
|
|
69
|
+
function seedGraph(graph, options) {
|
|
70
|
+
// Persons
|
|
71
|
+
for (let i = 0; i < options.persons; i += 1) {
|
|
72
|
+
graph.addPerson({ id: `p-${i}`, name: `Person ${i}` });
|
|
73
|
+
}
|
|
74
|
+
// Hot company tag with options.hotTagMembers tagged members.
|
|
75
|
+
const hotTag = graph.addTag({ name: 'TechCorp', tagType: 'company' });
|
|
76
|
+
for (let i = 0; i < options.hotTagMembers; i += 1) {
|
|
77
|
+
graph.tagPerson(`p-${i}`, hotTag.id);
|
|
78
|
+
}
|
|
79
|
+
// Hot attribute (e.g., industry=tech) shared by hotAttrHolders persons.
|
|
80
|
+
const hotAttr = graph.findOrCreateAttribute('industry', 'tech');
|
|
81
|
+
for (let i = 0; i < options.hotAttrHolders; i += 1) {
|
|
82
|
+
graph.setPersonAttribute(`p-${i}`, hotAttr.id);
|
|
83
|
+
}
|
|
84
|
+
// Filler company tags so listTags has volume to paginate over.
|
|
85
|
+
for (let i = 0; i < options.fillerTags; i += 1) {
|
|
86
|
+
graph.addTag({ name: `Co-${i}`, tagType: 'company' });
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
hotTagId: hotTag.id,
|
|
90
|
+
hotAttrId: hotAttr.id,
|
|
91
|
+
totalHotMembers: options.hotTagMembers,
|
|
92
|
+
totalHotHolders: options.hotAttrHolders,
|
|
93
|
+
fillerCompanyTags: options.fillerTags + 1, // + the hotTag itself (also company)
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
async function checkGetTagMembers(graph, tagId, options, total) {
|
|
97
|
+
const sync = graph.getTagMembers(tagId, options);
|
|
98
|
+
const a = await graph.getTagMembersAsync(tagId, options);
|
|
99
|
+
const tag = `getTagMembers(limit=${options?.limit ?? '∞'},offset=${options?.offset ?? 0})`;
|
|
100
|
+
if (sync.length !== a.length) {
|
|
101
|
+
return { scenario: tag, count: sync.length, pass: false, detail: `len mismatch: sync=${sync.length} async=${a.length}` };
|
|
102
|
+
}
|
|
103
|
+
const limit = options?.limit ?? Infinity;
|
|
104
|
+
if (limit >= total) {
|
|
105
|
+
const ks = JSON.stringify(idsSorted(sync));
|
|
106
|
+
const ka = JSON.stringify(idsSorted(a));
|
|
107
|
+
if (ks !== ka) {
|
|
108
|
+
return { scenario: tag, count: sync.length, pass: false, detail: `full-set element mismatch (limit ${limit} >= ${total})` };
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return { scenario: tag, count: sync.length, pass: true };
|
|
112
|
+
}
|
|
113
|
+
async function checkListTags(graph, filter, totalKnown) {
|
|
114
|
+
const sync = graph.listTags(filter);
|
|
115
|
+
const a = await graph.listTagsAsync(filter);
|
|
116
|
+
const tag = `listTags(${filter ? JSON.stringify(filter) : 'all'})`;
|
|
117
|
+
if (sync.length !== a.length) {
|
|
118
|
+
return { scenario: tag, count: sync.length, pass: false, detail: `len mismatch: sync=${sync.length} async=${a.length}` };
|
|
119
|
+
}
|
|
120
|
+
// For listTags we always check full-set equality when no name filter is set
|
|
121
|
+
// (limit caps the count, but listTags_limited inside core uses iter().take —
|
|
122
|
+
// documented same "any subset, no order" contract). When the limit covers
|
|
123
|
+
// the whole population, equality must hold.
|
|
124
|
+
if (filter?.limit === undefined || (totalKnown !== undefined && filter.limit >= totalKnown)) {
|
|
125
|
+
const ks = JSON.stringify(idsSorted(sync));
|
|
126
|
+
const ka = JSON.stringify(idsSorted(a));
|
|
127
|
+
if (ks !== ka) {
|
|
128
|
+
return {
|
|
129
|
+
scenario: tag,
|
|
130
|
+
count: sync.length,
|
|
131
|
+
pass: false,
|
|
132
|
+
detail: `element mismatch (sync=${sync.length}, async=${a.length}, sortedId differ)`,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return { scenario: tag, count: sync.length, pass: true };
|
|
137
|
+
}
|
|
138
|
+
async function checkGetPersonsByAttribute(graph, attrId, options, total) {
|
|
139
|
+
const sync = graph.getPersonsByAttribute(attrId, options);
|
|
140
|
+
const a = await graph.getPersonsByAttributeAsync(attrId, options);
|
|
141
|
+
const tag = `getPersonsByAttribute(limit=${options?.limit ?? '∞'},offset=${options?.offset ?? 0})`;
|
|
142
|
+
if (sync.length !== a.length) {
|
|
143
|
+
return { scenario: tag, count: sync.length, pass: false, detail: `len mismatch: sync=${sync.length} async=${a.length}` };
|
|
144
|
+
}
|
|
145
|
+
const limit = options?.limit ?? Infinity;
|
|
146
|
+
if (limit >= total) {
|
|
147
|
+
const ks = JSON.stringify(idsSorted(sync));
|
|
148
|
+
const ka = JSON.stringify(idsSorted(a));
|
|
149
|
+
if (ks !== ka) {
|
|
150
|
+
return { scenario: tag, count: sync.length, pass: false, detail: `full-set element mismatch (limit ${limit} >= ${total})` };
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return { scenario: tag, count: sync.length, pass: true };
|
|
154
|
+
}
|
|
155
|
+
async function main() {
|
|
156
|
+
const dir = makeTempDir('phase380-sgv2-verify-');
|
|
157
|
+
const graph = new social_graph_v2_1.SocialGraphV2({ path: path.join(dir, 'graph'), walEnabled: false });
|
|
158
|
+
console.log('============================================================');
|
|
159
|
+
console.log(' phase-380/T380.3 — SGV2 *Async semantic verify');
|
|
160
|
+
console.log('============================================================');
|
|
161
|
+
try {
|
|
162
|
+
const seed = {
|
|
163
|
+
persons: 1500,
|
|
164
|
+
hotTagMembers: 1000,
|
|
165
|
+
hotAttrHolders: 800,
|
|
166
|
+
fillerTags: 50,
|
|
167
|
+
};
|
|
168
|
+
console.log(` → seeding persons=${seed.persons}, hotTagMembers=${seed.hotTagMembers}, hotAttr=${seed.hotAttrHolders}, fillers=${seed.fillerTags}...`);
|
|
169
|
+
const s = seedGraph(graph, seed);
|
|
170
|
+
console.log(` hotTagId=${s.hotTagId}, hotAttrId=${s.hotAttrId}, fillerCompanyTags=${s.fillerCompanyTags}`);
|
|
171
|
+
const checks = [];
|
|
172
|
+
// getTagMembers: legacy (no options), small limit, large limit, full set
|
|
173
|
+
checks.push(await checkGetTagMembers(graph, s.hotTagId, undefined, s.totalHotMembers));
|
|
174
|
+
checks.push(await checkGetTagMembers(graph, s.hotTagId, { limit: 10 }, s.totalHotMembers));
|
|
175
|
+
checks.push(await checkGetTagMembers(graph, s.hotTagId, { limit: 50 }, s.totalHotMembers));
|
|
176
|
+
checks.push(await checkGetTagMembers(graph, s.hotTagId, { limit: s.totalHotMembers + 50 }, s.totalHotMembers));
|
|
177
|
+
checks.push(await checkGetTagMembers(graph, s.hotTagId, { limit: 20, offset: 5 }, s.totalHotMembers));
|
|
178
|
+
// listTags: all, by tagType, by name fragment, with limit (limit >= total: full set check)
|
|
179
|
+
checks.push(await checkListTags(graph, undefined));
|
|
180
|
+
checks.push(await checkListTags(graph, { tagType: 'company' }, s.fillerCompanyTags));
|
|
181
|
+
checks.push(await checkListTags(graph, { tagType: 'company', limit: 10 }, s.fillerCompanyTags));
|
|
182
|
+
checks.push(await checkListTags(graph, { tagType: 'company', limit: s.fillerCompanyTags + 10 }, s.fillerCompanyTags));
|
|
183
|
+
// getPersonsByAttribute: legacy, small/large limit, full set, with offset
|
|
184
|
+
checks.push(await checkGetPersonsByAttribute(graph, s.hotAttrId, undefined, s.totalHotHolders));
|
|
185
|
+
checks.push(await checkGetPersonsByAttribute(graph, s.hotAttrId, { limit: 10 }, s.totalHotHolders));
|
|
186
|
+
checks.push(await checkGetPersonsByAttribute(graph, s.hotAttrId, { limit: 50 }, s.totalHotHolders));
|
|
187
|
+
checks.push(await checkGetPersonsByAttribute(graph, s.hotAttrId, { limit: s.totalHotHolders + 25 }, s.totalHotHolders));
|
|
188
|
+
checks.push(await checkGetPersonsByAttribute(graph, s.hotAttrId, { limit: 20, offset: 5 }, s.totalHotHolders));
|
|
189
|
+
console.log('');
|
|
190
|
+
let allPass = true;
|
|
191
|
+
for (const c of checks) {
|
|
192
|
+
const tag = c.pass ? 'PASS' : 'FAIL';
|
|
193
|
+
console.log(` ${tag} ${c.scenario.padEnd(60)} count=${c.count}`);
|
|
194
|
+
if (!c.pass) {
|
|
195
|
+
console.log(` \u21B3 ${c.detail}`);
|
|
196
|
+
allPass = false;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
console.log('');
|
|
200
|
+
if (allPass) {
|
|
201
|
+
console.log(' \u2713 all scenarios pass — async wrappers preserve sync semantics');
|
|
202
|
+
process.exit(0);
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
console.log(' \u2717 regressions detected');
|
|
206
|
+
process.exit(1);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
finally {
|
|
210
|
+
cleanupDir(dir);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
main().catch((err) => {
|
|
214
|
+
console.error('phase-380 SGV2 verify failed:', err);
|
|
215
|
+
process.exit(1);
|
|
216
|
+
});
|
|
217
|
+
//# sourceMappingURL=sgv2-async-verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sgv2-async-verify.js","sourceRoot":"","sources":["../ts/sgv2-async-verify.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,28 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* SocialGraphV2 read-path baseline (phase-378/T378.5).
|
|
3
|
+
* SocialGraphV2 read-path baseline (phase-378/T378.5, extended in phase-377/T377.1).
|
|
4
4
|
*
|
|
5
5
|
* Drives the high-frequency read paths instrumented by
|
|
6
6
|
* `social::concurrent::read_profiler` and dumps the profile snapshot per
|
|
7
7
|
* scenario so we can establish baseline numbers + identify the hottest
|
|
8
8
|
* sub-slots.
|
|
9
9
|
*
|
|
10
|
-
* Scenarios:
|
|
10
|
+
* Scenarios (phase-378):
|
|
11
11
|
* - getPerson (single-id point read)
|
|
12
12
|
* - listPersons (full-scan O(N_persons))
|
|
13
13
|
* - getFriends (relation walk + entity lookup)
|
|
14
14
|
* - areFriends (boolean relation existence)
|
|
15
15
|
* - listRelations (full relation scan)
|
|
16
16
|
* - getEntityRelations(per-entity relation walk)
|
|
17
|
+
*
|
|
18
|
+
* Scenarios (phase-377/T377.1, tag/attribute scan baseline):
|
|
19
|
+
* - getTagMembers_high (1000 members per tag, the hot Scan M1/M2 target)
|
|
20
|
+
* - getTagMembers_med (100 members per tag)
|
|
21
|
+
* - getTagMembers_low (10 members per tag)
|
|
22
|
+
* - listTags_all (no filter, multi-type union)
|
|
23
|
+
* - listTags_company (single tag_type filter)
|
|
24
|
+
* - getPersonsByAttr_hot (1000 holders, hot key)
|
|
25
|
+
* - getPersonsByAttr_rare(10 holders, rare key)
|
|
17
26
|
*/
|
|
18
27
|
export {};
|
|
19
28
|
//# sourceMappingURL=social-graph-v2-read-benchmark.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"social-graph-v2-read-benchmark.d.ts","sourceRoot":"","sources":["../ts/social-graph-v2-read-benchmark.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"social-graph-v2-read-benchmark.d.ts","sourceRoot":"","sources":["../ts/social-graph-v2-read-benchmark.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG"}
|
|
@@ -1,20 +1,29 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
3
|
/**
|
|
4
|
-
* SocialGraphV2 read-path baseline (phase-378/T378.5).
|
|
4
|
+
* SocialGraphV2 read-path baseline (phase-378/T378.5, extended in phase-377/T377.1).
|
|
5
5
|
*
|
|
6
6
|
* Drives the high-frequency read paths instrumented by
|
|
7
7
|
* `social::concurrent::read_profiler` and dumps the profile snapshot per
|
|
8
8
|
* scenario so we can establish baseline numbers + identify the hottest
|
|
9
9
|
* sub-slots.
|
|
10
10
|
*
|
|
11
|
-
* Scenarios:
|
|
11
|
+
* Scenarios (phase-378):
|
|
12
12
|
* - getPerson (single-id point read)
|
|
13
13
|
* - listPersons (full-scan O(N_persons))
|
|
14
14
|
* - getFriends (relation walk + entity lookup)
|
|
15
15
|
* - areFriends (boolean relation existence)
|
|
16
16
|
* - listRelations (full relation scan)
|
|
17
17
|
* - getEntityRelations(per-entity relation walk)
|
|
18
|
+
*
|
|
19
|
+
* Scenarios (phase-377/T377.1, tag/attribute scan baseline):
|
|
20
|
+
* - getTagMembers_high (1000 members per tag, the hot Scan M1/M2 target)
|
|
21
|
+
* - getTagMembers_med (100 members per tag)
|
|
22
|
+
* - getTagMembers_low (10 members per tag)
|
|
23
|
+
* - listTags_all (no filter, multi-type union)
|
|
24
|
+
* - listTags_company (single tag_type filter)
|
|
25
|
+
* - getPersonsByAttr_hot (1000 holders, hot key)
|
|
26
|
+
* - getPersonsByAttr_rare(10 holders, rare key)
|
|
18
27
|
*/
|
|
19
28
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
20
29
|
if (k2 === undefined) k2 = k;
|
|
@@ -99,7 +108,77 @@ async function main() {
|
|
|
99
108
|
if (a !== b)
|
|
100
109
|
graph.addFriend(a, b);
|
|
101
110
|
}
|
|
102
|
-
console.log(`[seed] done in ${((performance.now() - t0) / 1000).toFixed(1)}s`);
|
|
111
|
+
console.log(`[seed] persons+friends done in ${((performance.now() - t0) / 1000).toFixed(1)}s`);
|
|
112
|
+
// ------------------------------------------------------------------
|
|
113
|
+
// phase-377/T377.1 tag + attribute seed
|
|
114
|
+
// ------------------------------------------------------------------
|
|
115
|
+
// Three cardinality buckets so we can see how reverse indexing pays
|
|
116
|
+
// off vs. flat scans: hot (1000 holders), med (100 holders), rare (10 holders).
|
|
117
|
+
// We deliberately mix tag_type=company (single-class fast path) and
|
|
118
|
+
// tag_type=skill (multi-class union path) to exercise list_tags both ways.
|
|
119
|
+
console.log(`[seed] adding tags + attributes for phase-377 scenarios ...`);
|
|
120
|
+
const tSeedTags = performance.now();
|
|
121
|
+
const HOT_TAG_CARD = Math.min(1000, opt.persons);
|
|
122
|
+
const MED_TAG_CARD = Math.min(100, opt.persons);
|
|
123
|
+
const LOW_TAG_CARD = Math.min(10, opt.persons);
|
|
124
|
+
const hotTagIds = [];
|
|
125
|
+
const medTagIds = [];
|
|
126
|
+
const lowTagIds = [];
|
|
127
|
+
for (let i = 0; i < 3; i++) {
|
|
128
|
+
hotTagIds.push(graph.addTag({ name: `hot-tag-${i}`, tagType: 'company' }).id);
|
|
129
|
+
}
|
|
130
|
+
for (let i = 0; i < 3; i++) {
|
|
131
|
+
medTagIds.push(graph.addTag({ name: `med-tag-${i}`, tagType: 'skill' }).id);
|
|
132
|
+
}
|
|
133
|
+
for (let i = 0; i < 5; i++) {
|
|
134
|
+
lowTagIds.push(graph.addTag({ name: `low-tag-${i}`, tagType: 'interest' }).id);
|
|
135
|
+
}
|
|
136
|
+
// phase-377/T377.5 (E377.D): expand the listTags result set so that
|
|
137
|
+
// limit pushdown has measurable e2e impact. T377.1 had ~3 company
|
|
138
|
+
// entities, which made `listTags({tagType:'company'})` a 1.3 µs noise
|
|
139
|
+
// floor. We seed 1000 additional non-tagged filler company tags so the
|
|
140
|
+
// legacy full-set materialize traverses 1003 entities while a
|
|
141
|
+
// `{ limit: 10 }` request only pages 10. Filler tags do NOT participate
|
|
142
|
+
// in `tagPerson` so getTagMembers_high baselines are unaffected.
|
|
143
|
+
const FILLER_LIST_TAGS_CARD = 1000;
|
|
144
|
+
for (let i = 0; i < FILLER_LIST_TAGS_CARD; i++) {
|
|
145
|
+
graph.addTag({ name: `filler-co-${i}`, tagType: 'company' });
|
|
146
|
+
}
|
|
147
|
+
// Distribute persons into tags. Use disjoint partitions per cardinality
|
|
148
|
+
// bucket so getTagMembers(hot) returns exactly HOT_TAG_CARD persons, etc.
|
|
149
|
+
for (const t of hotTagIds) {
|
|
150
|
+
for (let i = 0; i < HOT_TAG_CARD; i++)
|
|
151
|
+
graph.tagPerson(ids[i], t);
|
|
152
|
+
}
|
|
153
|
+
for (const t of medTagIds) {
|
|
154
|
+
for (let i = 0; i < MED_TAG_CARD; i++)
|
|
155
|
+
graph.tagPerson(ids[i], t);
|
|
156
|
+
}
|
|
157
|
+
for (const t of lowTagIds) {
|
|
158
|
+
for (let i = 0; i < LOW_TAG_CARD; i++)
|
|
159
|
+
graph.tagPerson(ids[i], t);
|
|
160
|
+
}
|
|
161
|
+
const HOT_ATTR_CARD = Math.min(1000, opt.persons);
|
|
162
|
+
const RARE_ATTR_CARD = Math.min(10, opt.persons);
|
|
163
|
+
const hotAttrIds = [];
|
|
164
|
+
const rareAttrIds = [];
|
|
165
|
+
for (let i = 0; i < 3; i++) {
|
|
166
|
+
hotAttrIds.push(graph.addAttribute({ category: 'industry', value: `hot-${i}` }).id);
|
|
167
|
+
}
|
|
168
|
+
for (let i = 0; i < 5; i++) {
|
|
169
|
+
rareAttrIds.push(graph.addAttribute({ category: 'mbti', value: `rare-${i}` }).id);
|
|
170
|
+
}
|
|
171
|
+
for (const a of hotAttrIds) {
|
|
172
|
+
for (let i = 0; i < HOT_ATTR_CARD; i++)
|
|
173
|
+
graph.setPersonAttribute(ids[i], a);
|
|
174
|
+
}
|
|
175
|
+
for (const a of rareAttrIds) {
|
|
176
|
+
for (let i = 0; i < RARE_ATTR_CARD; i++)
|
|
177
|
+
graph.setPersonAttribute(ids[i], a);
|
|
178
|
+
}
|
|
179
|
+
console.log(`[seed] tags+attrs done in ${((performance.now() - tSeedTags) / 1000).toFixed(1)}s`);
|
|
180
|
+
console.log(`[seed] hot tags=${hotTagIds.length} card=${HOT_TAG_CARD} med tags=${medTagIds.length} card=${MED_TAG_CARD} low tags=${lowTagIds.length} card=${LOW_TAG_CARD}`);
|
|
181
|
+
console.log(`[seed] hot attrs=${hotAttrIds.length} card=${HOT_ATTR_CARD} rare attrs=${rareAttrIds.length} card=${RARE_ATTR_CARD}`);
|
|
103
182
|
const results = [];
|
|
104
183
|
function runScenario(name, runs, fn) {
|
|
105
184
|
graph.readProfileReset();
|
|
@@ -138,6 +217,69 @@ async function main() {
|
|
|
138
217
|
runScenario('getEntityRelations', Math.min(opt.reads / 5, 10000) | 0, () => {
|
|
139
218
|
graph.getEntityRelations(ids[(Math.random() * opt.persons) | 0]);
|
|
140
219
|
});
|
|
220
|
+
// ------------------------------------------------------------------
|
|
221
|
+
// phase-377/T377.1 tag-scan baseline scenarios
|
|
222
|
+
// ------------------------------------------------------------------
|
|
223
|
+
// Cap iterations per scenario at min(reads/100, 200) — same convention
|
|
224
|
+
// listPersons uses — because each call is O(N) and we want bounded wall.
|
|
225
|
+
const SCAN_RUNS = Math.max(50, Math.min((opt.reads / 100) | 0, 200));
|
|
226
|
+
runScenario('getTagMembers_high', SCAN_RUNS, () => {
|
|
227
|
+
graph.getTagMembers(hotTagIds[(Math.random() * hotTagIds.length) | 0]);
|
|
228
|
+
});
|
|
229
|
+
runScenario('getTagMembers_med', SCAN_RUNS, () => {
|
|
230
|
+
graph.getTagMembers(medTagIds[(Math.random() * medTagIds.length) | 0]);
|
|
231
|
+
});
|
|
232
|
+
runScenario('getTagMembers_low', SCAN_RUNS, () => {
|
|
233
|
+
graph.getTagMembers(lowTagIds[(Math.random() * lowTagIds.length) | 0]);
|
|
234
|
+
});
|
|
235
|
+
// phase-377/T377.3 (E377.B): NAPI smart-routing scenarios. Same hot
|
|
236
|
+
// tag, but pass `{ limit }` so the call routes through
|
|
237
|
+
// get_tag_members_limited and only `limit` entities cross the FFI
|
|
238
|
+
// boundary. Compare against `getTagMembers_high` (no options) for the
|
|
239
|
+
// e2e ratio.
|
|
240
|
+
runScenario('getTagMembers_high_limit10', SCAN_RUNS * 5, () => {
|
|
241
|
+
graph.getTagMembers(hotTagIds[(Math.random() * hotTagIds.length) | 0], { limit: 10 });
|
|
242
|
+
});
|
|
243
|
+
runScenario('getTagMembers_high_limit50', SCAN_RUNS * 2, () => {
|
|
244
|
+
graph.getTagMembers(hotTagIds[(Math.random() * hotTagIds.length) | 0], { limit: 50 });
|
|
245
|
+
});
|
|
246
|
+
runScenario('listTags_all', SCAN_RUNS, () => {
|
|
247
|
+
graph.listTags();
|
|
248
|
+
});
|
|
249
|
+
runScenario('listTags_company', SCAN_RUNS, () => {
|
|
250
|
+
graph.listTags({ tagType: 'company' });
|
|
251
|
+
});
|
|
252
|
+
// phase-377/T377.5 (E377.D): NAPI listTags smart routing scenarios.
|
|
253
|
+
// Same `tagType: 'company'` filter (1003 entities) but with explicit
|
|
254
|
+
// `limit` so the call routes through `list_tags_limited`'s paginated
|
|
255
|
+
// type-index lookup. Compare against `listTags_company` for e2e ratio.
|
|
256
|
+
runScenario('listTags_company_limit10', SCAN_RUNS * 5, () => {
|
|
257
|
+
graph.listTags({ tagType: 'company', limit: 10 });
|
|
258
|
+
});
|
|
259
|
+
runScenario('listTags_company_limit50', SCAN_RUNS * 2, () => {
|
|
260
|
+
graph.listTags({ tagType: 'company', limit: 50 });
|
|
261
|
+
});
|
|
262
|
+
runScenario('listTags_all_limit10', SCAN_RUNS * 5, () => {
|
|
263
|
+
graph.listTags({ limit: 10 });
|
|
264
|
+
});
|
|
265
|
+
runScenario('getPersonsByAttr_hot', SCAN_RUNS, () => {
|
|
266
|
+
graph.getPersonsByAttribute(hotAttrIds[(Math.random() * hotAttrIds.length) | 0]);
|
|
267
|
+
});
|
|
268
|
+
runScenario('getPersonsByAttr_rare', SCAN_RUNS, () => {
|
|
269
|
+
graph.getPersonsByAttribute(rareAttrIds[(Math.random() * rareAttrIds.length) | 0]);
|
|
270
|
+
});
|
|
271
|
+
// phase-377/T377.7 (E377.F): NAPI smart-routing scenarios for
|
|
272
|
+
// getPersonsByAttribute. Same hot 1000-holder attribute, but pass
|
|
273
|
+
// `{ limit }` so the call routes through
|
|
274
|
+
// get_persons_by_attribute_limited and only `limit` entities cross
|
|
275
|
+
// the FFI boundary. Compare against `getPersonsByAttr_hot` (no
|
|
276
|
+
// options) for the e2e ratio.
|
|
277
|
+
runScenario('getPersonsByAttr_hot_limit10', SCAN_RUNS * 5, () => {
|
|
278
|
+
graph.getPersonsByAttribute(hotAttrIds[(Math.random() * hotAttrIds.length) | 0], { limit: 10 });
|
|
279
|
+
});
|
|
280
|
+
runScenario('getPersonsByAttr_hot_limit50', SCAN_RUNS * 2, () => {
|
|
281
|
+
graph.getPersonsByAttribute(hotAttrIds[(Math.random() * hotAttrIds.length) | 0], { limit: 50 });
|
|
282
|
+
});
|
|
141
283
|
console.log('\n============================================================');
|
|
142
284
|
console.log(' Summary');
|
|
143
285
|
console.log('============================================================');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"social-graph-v2-read-benchmark.js","sourceRoot":"","sources":["../ts/social-graph-v2-read-benchmark.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"social-graph-v2-read-benchmark.js","sourceRoot":"","sources":["../ts/social-graph-v2-read-benchmark.ts"],"names":[],"mappings":"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"}
|
|
@@ -391,9 +391,34 @@ export declare class SocialGraphV2 {
|
|
|
391
391
|
*/
|
|
392
392
|
getPersonTags(personId: string): Entity[];
|
|
393
393
|
/**
|
|
394
|
-
* Get all members of a tag
|
|
394
|
+
* Get all members of a tag.
|
|
395
|
+
*
|
|
396
|
+
* phase-377/T377.3 (E377.B): pass `{ limit, offset }` to push the
|
|
397
|
+
* truncation into the Rust core via `get_tag_members_limited`. This
|
|
398
|
+
* avoids materializing every member entity through the NAPI boundary
|
|
399
|
+
* for hot-cardinality tags.
|
|
400
|
+
*
|
|
401
|
+
* @param tagId Tag entity id.
|
|
402
|
+
* @param options Optional `{ limit?: number; offset?: number }`. When
|
|
403
|
+
* omitted, the call routes through the legacy `(None, None)` wrapper
|
|
404
|
+
* and returns every member (backwards compatible).
|
|
405
|
+
*/
|
|
406
|
+
getTagMembers(tagId: string, options?: {
|
|
407
|
+
limit?: number;
|
|
408
|
+
offset?: number;
|
|
409
|
+
}): Entity[];
|
|
410
|
+
/**
|
|
411
|
+
* phase-380/T380.3: async wrapper around `getTagMembers`.
|
|
412
|
+
*
|
|
413
|
+
* Promise-returning equivalent that lets concurrent callers
|
|
414
|
+
* (`Promise.all([...])`) actually parallelise on SGV2's tokio runtime
|
|
415
|
+
* instead of serialising through the NAPI sync round-trip. Routing is
|
|
416
|
+
* byte-for-byte identical to `getTagMembers`.
|
|
395
417
|
*/
|
|
396
|
-
|
|
418
|
+
getTagMembersAsync(tagId: string, options?: {
|
|
419
|
+
limit?: number;
|
|
420
|
+
offset?: number;
|
|
421
|
+
}): Promise<Entity[]>;
|
|
397
422
|
/**
|
|
398
423
|
* Set parent tag relationship
|
|
399
424
|
*/
|
|
@@ -463,9 +488,37 @@ export declare class SocialGraphV2 {
|
|
|
463
488
|
*/
|
|
464
489
|
getPersonAttributes(personId: string): Entity[];
|
|
465
490
|
/**
|
|
466
|
-
* Get persons by attribute
|
|
491
|
+
* Get persons by attribute.
|
|
492
|
+
*
|
|
493
|
+
* When `options.limit` or `options.offset` is provided, the call routes
|
|
494
|
+
* through phase-377/T377.7's `get_persons_by_attribute_limited` core
|
|
495
|
+
* fast path (NAPI smart routing). Without options, the legacy full-set
|
|
496
|
+
* wrapper is used so existing callers preserve byte-for-byte BC.
|
|
497
|
+
*
|
|
498
|
+
* @example
|
|
499
|
+
* ```typescript
|
|
500
|
+
* // Legacy: every holder
|
|
501
|
+
* const all = social.getPersonsByAttribute(attrId);
|
|
502
|
+
*
|
|
503
|
+
* // Limit pushdown: avoids cloning N entities + serializing them across NAPI
|
|
504
|
+
* const top10 = social.getPersonsByAttribute(attrId, { limit: 10 });
|
|
505
|
+
* ```
|
|
506
|
+
*/
|
|
507
|
+
getPersonsByAttribute(attrId: string, options?: {
|
|
508
|
+
limit?: number;
|
|
509
|
+
offset?: number;
|
|
510
|
+
}): Entity[];
|
|
511
|
+
/**
|
|
512
|
+
* phase-380/T380.3: async wrapper around `getPersonsByAttribute`.
|
|
513
|
+
*
|
|
514
|
+
* Promise-returning equivalent for concurrent callers. Same smart
|
|
515
|
+
* routing as the sync version (T377.7 limit pushdown when options
|
|
516
|
+
* provided, legacy `(None, None)` wrapper otherwise).
|
|
467
517
|
*/
|
|
468
|
-
|
|
518
|
+
getPersonsByAttributeAsync(attrId: string, options?: {
|
|
519
|
+
limit?: number;
|
|
520
|
+
offset?: number;
|
|
521
|
+
}): Promise<Entity[]>;
|
|
469
522
|
/**
|
|
470
523
|
* Set a person's birthday (YYYY-MM-DD format)
|
|
471
524
|
*/
|
|
@@ -1467,6 +1520,14 @@ export declare class SocialGraphV2 {
|
|
|
1467
1520
|
* ```
|
|
1468
1521
|
*/
|
|
1469
1522
|
listTags(filter?: TagFilter): Entity[];
|
|
1523
|
+
/**
|
|
1524
|
+
* phase-380/T380.3: async wrapper around `listTags`.
|
|
1525
|
+
*
|
|
1526
|
+
* Promise-returning equivalent for concurrent callers. Routing matches
|
|
1527
|
+
* the sync version exactly (filter shape, T377.4 type_index_paginated
|
|
1528
|
+
* fast path when filter.limit is set).
|
|
1529
|
+
*/
|
|
1530
|
+
listTagsAsync(filter?: TagFilter): Promise<Entity[]>;
|
|
1470
1531
|
/**
|
|
1471
1532
|
* List all relations with optional filter
|
|
1472
1533
|
*
|