flatsql 2.0.3 → 3.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.
Files changed (84) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +54 -64
  3. package/dist/artifacts/index.d.ts +1 -3
  4. package/dist/artifacts/index.d.ts.map +1 -1
  5. package/dist/artifacts/index.js +1 -3
  6. package/dist/artifacts/index.js.map +1 -1
  7. package/dist/response/artifact.d.ts +1 -2
  8. package/dist/response/artifact.d.ts.map +1 -1
  9. package/dist/response/artifact.js.map +1 -1
  10. package/dist/response/types.d.ts +6 -0
  11. package/dist/response/types.d.ts.map +1 -1
  12. package/dist/stress/index.d.ts +0 -1
  13. package/dist/stress/index.d.ts.map +1 -1
  14. package/dist/stress/index.js +0 -1
  15. package/dist/stress/index.js.map +1 -1
  16. package/dist/stress/native-publish-event-workload.d.ts.map +1 -1
  17. package/dist/stress/native-publish-event-workload.js +14 -4
  18. package/dist/stress/native-publish-event-workload.js.map +1 -1
  19. package/dist/stress/smoke-runner.d.ts.map +1 -1
  20. package/dist/stress/smoke-runner.js +6 -5
  21. package/dist/stress/smoke-runner.js.map +1 -1
  22. package/docs/PARTITION-STORE-WASM.md +241 -0
  23. package/docs/PARTITION-STORE.md +635 -0
  24. package/package.json +61 -22
  25. package/wasm/flatsql-io.js +4 -1
  26. package/wasm/flatsql-ps-threads.wasm +0 -0
  27. package/wasm/flatsql-wasi-noeh.wasm +0 -0
  28. package/wasm/flatsql-wasi.wasm +0 -0
  29. package/wasm/flatsql.js +1 -1
  30. package/wasm/flatsql.wasm +0 -0
  31. package/wasm/index.d.ts +2 -0
  32. package/wasm/index.js +16 -1
  33. package/wasm/integrity.json +28 -0
  34. package/wasm/ps-node-fault.d.mts +23 -0
  35. package/wasm/ps-node-fault.mjs +381 -0
  36. package/wasm/ps-node-guest.mjs +156 -0
  37. package/wasm/ps-node-host.d.mts +86 -0
  38. package/wasm/ps-node-host.mjs +431 -0
  39. package/wasm/ps-node-imports.mjs +847 -0
  40. package/wasm/ps.d.ts +21 -0
  41. package/wasm/ps.js +75 -0
  42. package/dist/artifacts/builder.d.ts +0 -31
  43. package/dist/artifacts/builder.d.ts.map +0 -1
  44. package/dist/artifacts/builder.js +0 -514
  45. package/dist/artifacts/builder.js.map +0 -1
  46. package/dist/artifacts/demo-extractors.d.ts +0 -15
  47. package/dist/artifacts/demo-extractors.d.ts.map +0 -1
  48. package/dist/artifacts/demo-extractors.js +0 -238
  49. package/dist/artifacts/demo-extractors.js.map +0 -1
  50. package/dist/artifacts/standalone-builder.d.ts +0 -62
  51. package/dist/artifacts/standalone-builder.d.ts.map +0 -1
  52. package/dist/artifacts/standalone-builder.js +0 -144
  53. package/dist/artifacts/standalone-builder.js.map +0 -1
  54. package/dist/artifacts/worker-client.d.ts +0 -32
  55. package/dist/artifacts/worker-client.d.ts.map +0 -1
  56. package/dist/artifacts/worker-client.js +0 -415
  57. package/dist/artifacts/worker-client.js.map +0 -1
  58. package/dist/core/database.d.ts +0 -86
  59. package/dist/core/database.d.ts.map +0 -1
  60. package/dist/core/database.js +0 -900
  61. package/dist/core/database.js.map +0 -1
  62. package/dist/core/index.d.ts +0 -3
  63. package/dist/core/index.d.ts.map +0 -1
  64. package/dist/core/index.js +0 -3
  65. package/dist/core/index.js.map +0 -1
  66. package/dist/core/table-store.d.ts +0 -30
  67. package/dist/core/table-store.d.ts.map +0 -1
  68. package/dist/core/table-store.js +0 -187
  69. package/dist/core/table-store.js.map +0 -1
  70. package/dist/flatbuffer-accessor.d.ts +0 -35
  71. package/dist/flatbuffer-accessor.d.ts.map +0 -1
  72. package/dist/flatbuffer-accessor.js +0 -114
  73. package/dist/flatbuffer-accessor.js.map +0 -1
  74. package/dist/index.d.ts +0 -15
  75. package/dist/index.d.ts.map +0 -1
  76. package/dist/index.js +0 -22
  77. package/dist/index.js.map +0 -1
  78. package/dist/stress/publish-event-workload.d.ts +0 -3
  79. package/dist/stress/publish-event-workload.d.ts.map +0 -1
  80. package/dist/stress/publish-event-workload.js +0 -467
  81. package/dist/stress/publish-event-workload.js.map +0 -1
  82. package/wasm/flatsql-artifact.worker.js +0 -847
  83. package/wasm/standalone.d.ts +0 -122
  84. package/wasm/standalone.js +0 -914
@@ -1,467 +0,0 @@
1
- import { performance } from 'node:perf_hooks';
2
- import { Builder, ByteBuffer } from 'flatbuffers';
3
- import { DirectAccessor, FlatSQLDatabase } from '../index.js';
4
- import { createQueryResponseArtifact, createResponseCacheKey, MemoryResponseArtifactCache, } from '../response/index.js';
5
- const TABLE_NAME = 'PublishEventRecord';
6
- const TEXT_ENCODER = new TextEncoder();
7
- const COLD_FANOUT_QUERIES_PER_CONCURRENCY = 256;
8
- const PUBLISH_EVENT_SCHEMA = `
9
- table PublishEventRecord {
10
- FILE_ID: string;
11
- RECORD_ID: string;
12
- EVENT_INDEX: int;
13
- PAYLOAD_SIZE: int;
14
- PAYLOAD: [ubyte];
15
- }
16
-
17
- root_type PublishEventRecord;
18
- `;
19
- function bytes(value) {
20
- return TEXT_ENCODER.encode(value).length;
21
- }
22
- function measuredDuration(start) {
23
- return Number(Math.max(performance.now() - start, 0.001).toFixed(3));
24
- }
25
- function createPayload(nodeId, recordIndex) {
26
- const size = 96 + ((nodeId + recordIndex) % 7) * 32;
27
- const payload = new Uint8Array(size);
28
- for (let index = 0; index < payload.length; index++) {
29
- payload[index] = (nodeId * 31 + recordIndex * 17 + index) % 256;
30
- }
31
- return payload;
32
- }
33
- function buildPublishEventBuffer(fileId, recordId, eventIndex, payload) {
34
- const builder = new Builder(256 + payload.length);
35
- const fileIdOffset = builder.createString(fileId);
36
- const recordIdOffset = builder.createString(recordId);
37
- const payloadOffset = builder.createByteVector(payload);
38
- builder.startObject(5);
39
- builder.addFieldOffset(0, fileIdOffset, 0);
40
- builder.addFieldOffset(1, recordIdOffset, 0);
41
- builder.addFieldInt32(2, eventIndex, 0);
42
- builder.addFieldInt32(3, payload.length, 0);
43
- builder.addFieldOffset(4, payloadOffset, 0);
44
- const recordOffset = builder.endObject();
45
- builder.finish(recordOffset);
46
- return builder.asUint8Array().slice();
47
- }
48
- function rootPosition(buffer) {
49
- const bb = new ByteBuffer(buffer);
50
- const root = bb.readInt32(bb.position()) + bb.position();
51
- return { bb, root };
52
- }
53
- function readStringField(buffer, vtableOffset) {
54
- const { bb, root } = rootPosition(buffer);
55
- const offset = bb.__offset(root, vtableOffset);
56
- return offset === 0 ? undefined : bb.__string(root + offset);
57
- }
58
- function readIntField(buffer, vtableOffset) {
59
- const { bb, root } = rootPosition(buffer);
60
- const offset = bb.__offset(root, vtableOffset);
61
- return offset === 0 ? undefined : bb.readInt32(root + offset);
62
- }
63
- function createAccessor() {
64
- const accessor = new DirectAccessor();
65
- accessor.registerAccessor(TABLE_NAME, (data, path) => {
66
- const field = path[0];
67
- if (field === 'FILE_ID')
68
- return readStringField(data, 4);
69
- if (field === 'RECORD_ID')
70
- return readStringField(data, 6);
71
- if (field === 'EVENT_INDEX')
72
- return readIntField(data, 8);
73
- if (field === 'PAYLOAD_SIZE')
74
- return readIntField(data, 10);
75
- return undefined;
76
- });
77
- accessor.registerBuilder(TABLE_NAME, (fields) => buildPublishEventBuffer(String(fields.FILE_ID), String(fields.RECORD_ID), Number(fields.EVENT_INDEX), createPayload(0, Number(fields.EVENT_INDEX))));
78
- return accessor;
79
- }
80
- function createDatabase() {
81
- const db = FlatSQLDatabase.fromSchema(PUBLISH_EVENT_SCHEMA, createAccessor(), 'sdn-publish-event');
82
- db.createIndex(TABLE_NAME, 'FILE_ID');
83
- db.createIndex(TABLE_NAME, 'RECORD_ID');
84
- db.createIndex(TABLE_NAME, 'EVENT_INDEX');
85
- return db;
86
- }
87
- function buildFixture(manifest, nodeId) {
88
- const db = createDatabase();
89
- const recordCount = Math.max(1, manifest.recordsPerNode);
90
- const hotRecordCount = Math.max(1, Math.ceil(recordCount * manifest.hotQueryRatio));
91
- const hotFileId = `publish-${manifest.runId}-${nodeId}-hot`;
92
- const records = [];
93
- const coldFileIds = [];
94
- for (let index = 0; index < recordCount; index++) {
95
- const isHot = index < hotRecordCount;
96
- const fileId = isHot ? hotFileId : `publish-${manifest.runId}-${nodeId}-cold-${index}`;
97
- if (!isHot) {
98
- coldFileIds.push(fileId);
99
- }
100
- const recordId = `record-${nodeId}-${index}`;
101
- const buffer = buildPublishEventBuffer(fileId, recordId, index, createPayload(nodeId, index));
102
- records.push({ fileId, recordId, eventIndex: index, buffer });
103
- }
104
- const buffers = records.map((record) => record.buffer);
105
- const start = performance.now();
106
- db.stream(TABLE_NAME, buffers);
107
- return {
108
- db,
109
- records,
110
- buffers,
111
- hotFileId,
112
- coldFileIds,
113
- flatbufferBytes: buffers.reduce((total, buffer) => total + buffer.length, 0),
114
- ingestDurationMs: measuredDuration(start),
115
- };
116
- }
117
- function queryCache(cache, db, sql) {
118
- const start = performance.now();
119
- const cached = cache.get(sql);
120
- if (cached) {
121
- return {
122
- result: cached,
123
- hit: true,
124
- durationMs: measuredDuration(start),
125
- };
126
- }
127
- const result = db.query(sql);
128
- cache.set(sql, result);
129
- return {
130
- result,
131
- hit: false,
132
- durationMs: measuredDuration(start),
133
- };
134
- }
135
- function resultCellBytes(cell) {
136
- if (cell instanceof Uint8Array) {
137
- return cell.length;
138
- }
139
- if (typeof cell === 'bigint') {
140
- return bytes(cell.toString());
141
- }
142
- if (cell === null || cell === undefined) {
143
- return 0;
144
- }
145
- return bytes(String(cell));
146
- }
147
- function queryResultBytes(result) {
148
- const columnBytes = result.columns.reduce((total, column) => total + bytes(column), 0);
149
- const rowBytes = result.rows.reduce((rowTotal, row) => rowTotal + row.reduce((cellTotal, cell) => cellTotal + resultCellBytes(cell), 0), 0);
150
- return columnBytes + rowBytes;
151
- }
152
- function rawFlatbufferBytes(result) {
153
- return result.rows.reduce((total, row) => total + row.reduce((cellTotal, cell) => {
154
- return cellTotal + (cell instanceof Uint8Array ? cell.length : 0);
155
- }, 0), 0);
156
- }
157
- function requestBytes(sql) {
158
- return bytes(sql) + 16;
159
- }
160
- function baseMetric(manifest, useCase, nodeId, values, schema = TABLE_NAME) {
161
- return {
162
- runId: manifest.runId,
163
- nodeId,
164
- schema,
165
- useCase: useCase.id,
166
- operation: useCase.operation,
167
- measurement: 'measured',
168
- transport: manifest.transport,
169
- runtime: 'typescript',
170
- ...values,
171
- };
172
- }
173
- function metricFromQuery(manifest, useCase, nodeId, fixture, sql, result, durationMs, cacheHits = 0, cacheMisses = 0, cacheSize = 0) {
174
- const flatbufferBytes = rawFlatbufferBytes(result);
175
- const responseBytes = useCase.id === 'raw-flatbuffer-retrieval'
176
- ? flatbufferBytes
177
- : queryResultBytes(result);
178
- return baseMetric(manifest, useCase, nodeId, {
179
- records: result.rowCount,
180
- requestBytes: requestBytes(sql),
181
- responseBytes,
182
- flatbufferBytes,
183
- storageBytes: fixture.db.getStorageBytes(),
184
- durationMs,
185
- cacheHits,
186
- cacheMisses,
187
- cacheSize,
188
- errors: 0,
189
- });
190
- }
191
- function findUseCase(manifest, id) {
192
- const useCase = manifest.useCases.find((candidate) => candidate.id === id);
193
- if (!useCase) {
194
- throw new Error(`Stress use case not found: ${id}`);
195
- }
196
- return useCase;
197
- }
198
- function buildSchemaSweepMetrics(manifest, assignmentSchemas, nodeId) {
199
- const useCase = findUseCase(manifest, 'schema-sweep');
200
- const schemaByName = new Map(manifest.schemas.map((schema) => [schema.name, schema]));
201
- return assignmentSchemas.map((schemaName) => {
202
- const schema = schemaByName.get(schemaName);
203
- const request = schema ? bytes(schema.path) : bytes(schemaName);
204
- const response = schema ? bytes(schema.name) + bytes(schema.rootType) : bytes(schemaName);
205
- return baseMetric(manifest, useCase, nodeId, {
206
- records: 1,
207
- requestBytes: request,
208
- responseBytes: response,
209
- flatbufferBytes: 0,
210
- storageBytes: 0,
211
- durationMs: 0.001,
212
- cacheHits: 0,
213
- cacheMisses: 0,
214
- cacheSize: 0,
215
- errors: 0,
216
- }, schemaName);
217
- });
218
- }
219
- function buildHotCacheMetric(manifest, fixture, nodeId) {
220
- const useCase = findUseCase(manifest, 'hot-file-id-cache');
221
- const sql = `SELECT _data FROM ${TABLE_NAME} WHERE FILE_ID = '${fixture.hotFileId}'`;
222
- const artifactCache = new MemoryResponseArtifactCache();
223
- const cacheKeyInput = {
224
- schemaName: TABLE_NAME,
225
- schemaVersion: 1,
226
- sql,
227
- format: 'raw-flatbuffer-stream',
228
- publishEventKey: fixture.hotFileId,
229
- projection: ['_data'],
230
- };
231
- const cacheKey = createResponseCacheKey(cacheKeyInput);
232
- let result;
233
- let responseBytes = 0;
234
- let flatbufferBytes = 0;
235
- let cacheHits = 0;
236
- let cacheMisses = 0;
237
- let durationMs = 0;
238
- const repetitions = Math.max(4, Math.min(32, manifest.queryConcurrency));
239
- for (let index = 0; index < repetitions; index++) {
240
- const start = performance.now();
241
- const cached = artifactCache.get(cacheKey);
242
- if (cached) {
243
- responseBytes += cached.metadata.byteLength;
244
- durationMs += measuredDuration(start);
245
- cacheHits += 1;
246
- continue;
247
- }
248
- result = fixture.db.query(sql);
249
- const artifact = createQueryResponseArtifact(result, cacheKeyInput);
250
- artifactCache.set(artifact);
251
- responseBytes += artifact.metadata.byteLength;
252
- flatbufferBytes = rawFlatbufferBytes(result);
253
- durationMs += measuredDuration(start);
254
- cacheMisses += 1;
255
- }
256
- return baseMetric(manifest, useCase, nodeId, {
257
- records: result.rowCount * repetitions,
258
- requestBytes: requestBytes(sql) * repetitions,
259
- responseBytes,
260
- flatbufferBytes: flatbufferBytes * repetitions,
261
- storageBytes: fixture.db.getStorageBytes(),
262
- durationMs: Number(durationMs.toFixed(3)),
263
- cacheHits,
264
- cacheMisses,
265
- cacheSize: artifactCache.size,
266
- errors: 0,
267
- });
268
- }
269
- function buildColdFanoutMetric(manifest, fixture, nodeId) {
270
- const useCase = findUseCase(manifest, 'cold-file-id-fanout');
271
- const coldFileIds = fixture.coldFileIds.length > 0
272
- ? fixture.coldFileIds
273
- : fixture.records.slice(0, 1).map((record) => record.fileId);
274
- const queriedFileIds = coldFileIds.slice(0, Math.max(1, manifest.queryConcurrency * COLD_FANOUT_QUERIES_PER_CONCURRENCY));
275
- const cache = new Map();
276
- let records = 0;
277
- let requestTotal = 0;
278
- let responseTotal = 0;
279
- let flatbufferTotal = 0;
280
- let durationMs = 0;
281
- for (const fileId of queriedFileIds) {
282
- const sql = `SELECT RECORD_ID, EVENT_INDEX FROM ${TABLE_NAME} WHERE FILE_ID = '${fileId}'`;
283
- const query = queryCache(cache, fixture.db, sql);
284
- records += query.result.rowCount;
285
- requestTotal += requestBytes(sql);
286
- responseTotal += queryResultBytes(query.result);
287
- flatbufferTotal += rawFlatbufferBytes(query.result);
288
- durationMs += query.durationMs;
289
- }
290
- return baseMetric(manifest, useCase, nodeId, {
291
- records,
292
- requestBytes: requestTotal,
293
- responseBytes: responseTotal,
294
- flatbufferBytes: flatbufferTotal,
295
- storageBytes: fixture.db.getStorageBytes(),
296
- durationMs: Number(durationMs.toFixed(3)),
297
- cacheHits: 0,
298
- cacheMisses: queriedFileIds.length,
299
- cacheSize: cache.size,
300
- errors: 0,
301
- });
302
- }
303
- function buildMixedCacheMetric(manifest, fixture, nodeId) {
304
- const useCase = findUseCase(manifest, 'mixed-hot-cold-query');
305
- const cache = new Map();
306
- const cold = fixture.coldFileIds[0] ?? fixture.hotFileId;
307
- const queries = [
308
- fixture.hotFileId,
309
- fixture.hotFileId,
310
- cold,
311
- fixture.hotFileId,
312
- cold,
313
- fixture.hotFileId,
314
- ];
315
- let records = 0;
316
- let requestTotal = 0;
317
- let responseTotal = 0;
318
- let flatbufferTotal = 0;
319
- let durationMs = 0;
320
- let cacheHits = 0;
321
- let cacheMisses = 0;
322
- for (const fileId of queries) {
323
- const sql = `SELECT RECORD_ID, PAYLOAD_SIZE FROM ${TABLE_NAME} WHERE FILE_ID = '${fileId}'`;
324
- const query = queryCache(cache, fixture.db, sql);
325
- records += query.result.rowCount;
326
- requestTotal += requestBytes(sql);
327
- responseTotal += queryResultBytes(query.result);
328
- flatbufferTotal += rawFlatbufferBytes(query.result);
329
- durationMs += query.durationMs;
330
- cacheHits += query.hit ? 1 : 0;
331
- cacheMisses += query.hit ? 0 : 1;
332
- }
333
- return baseMetric(manifest, useCase, nodeId, {
334
- records,
335
- requestBytes: requestTotal,
336
- responseBytes: responseTotal,
337
- flatbufferBytes: flatbufferTotal,
338
- storageBytes: fixture.db.getStorageBytes(),
339
- durationMs: Number(durationMs.toFixed(3)),
340
- cacheHits,
341
- cacheMisses,
342
- cacheSize: cache.size,
343
- errors: 0,
344
- });
345
- }
346
- function buildBackfillLikeMetric(manifest, fixture, nodeId, useCaseId) {
347
- const useCase = findUseCase(manifest, useCaseId);
348
- const db = createDatabase();
349
- const start = performance.now();
350
- db.stream(TABLE_NAME, fixture.buffers);
351
- const durationMs = measuredDuration(start);
352
- return baseMetric(manifest, useCase, nodeId, {
353
- records: fixture.buffers.length,
354
- requestBytes: fixture.flatbufferBytes,
355
- responseBytes: 64,
356
- flatbufferBytes: fixture.flatbufferBytes,
357
- storageBytes: db.getStorageBytes(),
358
- durationMs,
359
- cacheHits: 0,
360
- cacheMisses: 0,
361
- cacheSize: 0,
362
- errors: 0,
363
- });
364
- }
365
- function buildCacheInvalidationMetric(manifest, fixture, nodeId) {
366
- const useCase = findUseCase(manifest, 'cache-invalidation-churn');
367
- const sql = `SELECT RECORD_ID FROM ${TABLE_NAME} WHERE FILE_ID = '${fixture.hotFileId}'`;
368
- const cache = new Map();
369
- const first = queryCache(cache, fixture.db, sql);
370
- const second = queryCache(cache, fixture.db, sql);
371
- const churnBuffer = buildPublishEventBuffer(fixture.hotFileId, `record-${nodeId}-churn`, fixture.records.length + 1, createPayload(nodeId, fixture.records.length + 1));
372
- const ingestStart = performance.now();
373
- fixture.db.insertRaw(TABLE_NAME, churnBuffer);
374
- const ingestDurationMs = measuredDuration(ingestStart);
375
- cache.clear();
376
- const third = queryCache(cache, fixture.db, sql);
377
- const resultBytes = queryResultBytes(first.result) + queryResultBytes(second.result) + queryResultBytes(third.result);
378
- return baseMetric(manifest, useCase, nodeId, {
379
- records: first.result.rowCount + second.result.rowCount + third.result.rowCount + 1,
380
- requestBytes: requestBytes(sql) * 3 + churnBuffer.length,
381
- responseBytes: resultBytes,
382
- flatbufferBytes: churnBuffer.length,
383
- storageBytes: fixture.db.getStorageBytes(),
384
- durationMs: Number((first.durationMs + second.durationMs + ingestDurationMs + third.durationMs).toFixed(3)),
385
- cacheHits: 1,
386
- cacheMisses: 2,
387
- cacheSize: cache.size,
388
- errors: 0,
389
- });
390
- }
391
- function buildBandwidthStreamingMetric(manifest, fixture, nodeId) {
392
- const useCase = findUseCase(manifest, 'bandwidth-constrained-streaming');
393
- const db = createDatabase();
394
- const start = performance.now();
395
- for (const buffer of fixture.buffers) {
396
- db.stream(TABLE_NAME, [buffer]);
397
- }
398
- const durationMs = measuredDuration(start);
399
- return baseMetric(manifest, useCase, nodeId, {
400
- records: fixture.buffers.length,
401
- requestBytes: fixture.flatbufferBytes + fixture.buffers.length * 4,
402
- responseBytes: fixture.buffers.length * 8,
403
- flatbufferBytes: fixture.flatbufferBytes,
404
- storageBytes: db.getStorageBytes(),
405
- durationMs,
406
- cacheHits: 0,
407
- cacheMisses: 0,
408
- cacheSize: 0,
409
- errors: 0,
410
- });
411
- }
412
- export function buildMeasuredPublishEventMetrics(manifest) {
413
- const metrics = [];
414
- for (const assignment of manifest.assignments) {
415
- const fixture = buildFixture(manifest, assignment.nodeId);
416
- metrics.push(...buildSchemaSweepMetrics(manifest, assignment.schemas, assignment.nodeId));
417
- metrics.push(baseMetric(manifest, findUseCase(manifest, 'bulk-streaming-ingest'), assignment.nodeId, {
418
- records: fixture.buffers.length,
419
- requestBytes: fixture.flatbufferBytes + fixture.buffers.length * 4,
420
- responseBytes: fixture.buffers.length * 8,
421
- flatbufferBytes: fixture.flatbufferBytes,
422
- storageBytes: fixture.db.getStorageBytes(),
423
- durationMs: fixture.ingestDurationMs,
424
- cacheHits: 0,
425
- cacheMisses: 0,
426
- cacheSize: 0,
427
- errors: 0,
428
- }));
429
- metrics.push(buildHotCacheMetric(manifest, fixture, assignment.nodeId));
430
- metrics.push(buildColdFanoutMetric(manifest, fixture, assignment.nodeId));
431
- metrics.push(buildMixedCacheMetric(manifest, fixture, assignment.nodeId));
432
- const rawSql = `SELECT _data FROM ${TABLE_NAME} WHERE FILE_ID = '${fixture.hotFileId}'`;
433
- const rawStart = performance.now();
434
- const rawResult = fixture.db.query(rawSql);
435
- metrics.push(metricFromQuery(manifest, findUseCase(manifest, 'raw-flatbuffer-retrieval'), assignment.nodeId, fixture, rawSql, rawResult, measuredDuration(rawStart)));
436
- const projectionSql = `SELECT RECORD_ID, EVENT_INDEX, PAYLOAD_SIZE FROM ${TABLE_NAME} WHERE FILE_ID = '${fixture.hotFileId}'`;
437
- const projectionStart = performance.now();
438
- const projectionResult = fixture.db.query(projectionSql);
439
- metrics.push(metricFromQuery(manifest, findUseCase(manifest, 'sql-projection-query'), assignment.nodeId, fixture, projectionSql, projectionResult, measuredDuration(projectionStart)));
440
- const rawQuerySql = `SELECT RECORD_ID FROM ${TABLE_NAME} WHERE EVENT_INDEX BETWEEN 0 AND ${Math.min(3, fixture.records.length - 1)}`;
441
- const rawQueryStart = performance.now();
442
- const rawQueryResult = fixture.db.query(rawQuerySql);
443
- metrics.push(metricFromQuery(manifest, findUseCase(manifest, 'raw-sql-query'), assignment.nodeId, fixture, rawQuerySql, rawQueryResult, measuredDuration(rawQueryStart)));
444
- const largeResultSql = `SELECT RECORD_ID, FILE_ID FROM ${TABLE_NAME} LIMIT 5000`;
445
- const largeResultStart = performance.now();
446
- const largeResult = fixture.db.query(largeResultSql);
447
- metrics.push(metricFromQuery(manifest, findUseCase(manifest, 'large-result-query'), assignment.nodeId, fixture, largeResultSql, largeResult, measuredDuration(largeResultStart)));
448
- const fanoutSql = `SELECT RECORD_ID FROM ${TABLE_NAME} WHERE FILE_ID = '${fixture.hotFileId}'`;
449
- const fanoutStart = performance.now();
450
- const fanoutResult = fixture.db.query(fanoutSql);
451
- metrics.push(metricFromQuery(manifest, findUseCase(manifest, 'node-fanout-query'), assignment.nodeId, fixture, fanoutSql, fanoutResult, measuredDuration(fanoutStart)));
452
- metrics.push(buildBackfillLikeMetric(manifest, fixture, assignment.nodeId, 'backfill-sync'));
453
- metrics.push(buildBackfillLikeMetric(manifest, fixture, assignment.nodeId, 'restart-rebuild'));
454
- metrics.push(buildCacheInvalidationMetric(manifest, fixture, assignment.nodeId));
455
- metrics.push(buildBandwidthStreamingMetric(manifest, fixture, assignment.nodeId));
456
- const domainSql = `SELECT FILE_ID, RECORD_ID, PAYLOAD_SIZE FROM ${TABLE_NAME} WHERE RECORD_ID = '${fixture.records[0].recordId}'`;
457
- const domainStart = performance.now();
458
- const domainResult = fixture.db.query(domainSql);
459
- metrics.push(metricFromQuery(manifest, findUseCase(manifest, 'sds-domain-query-pack'), assignment.nodeId, fixture, domainSql, domainResult, measuredDuration(domainStart)));
460
- const apiShapeSql = `SELECT RECORD_ID, EVENT_INDEX FROM ${TABLE_NAME} WHERE RECORD_ID = '${fixture.records[fixture.records.length - 1].recordId}'`;
461
- const apiShapeStart = performance.now();
462
- const apiShapeResult = fixture.db.query(apiShapeSql);
463
- metrics.push(metricFromQuery(manifest, findUseCase(manifest, 'udl-style-api-shape'), assignment.nodeId, fixture, apiShapeSql, apiShapeResult, measuredDuration(apiShapeStart)));
464
- }
465
- return metrics;
466
- }
467
- //# sourceMappingURL=publish-event-workload.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"publish-event-workload.js","sourceRoot":"","sources":["../../src/stress/publish-event-workload.ts"],"names":[],"mappings":"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"}