orez 0.1.49 → 0.2.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/dist/bench/proxy-throughput.bench.d.ts +13 -0
- package/dist/bench/proxy-throughput.bench.d.ts.map +1 -0
- package/dist/bench/proxy-throughput.bench.js +249 -0
- package/dist/bench/proxy-throughput.bench.js.map +1 -0
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +1 -0
- package/dist/browser.js.map +1 -1
- package/dist/cli.js +8 -0
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +3 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +6 -0
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -93
- package/dist/index.js.map +1 -1
- package/dist/mutex.d.ts +2 -0
- package/dist/mutex.d.ts.map +1 -1
- package/dist/mutex.js +4 -0
- package/dist/mutex.js.map +1 -1
- package/dist/pg-proxy-browser.d.ts.map +1 -1
- package/dist/pg-proxy-browser.js +6 -1
- package/dist/pg-proxy-browser.js.map +1 -1
- package/dist/pg-proxy.d.ts.map +1 -1
- package/dist/pg-proxy.js +146 -75
- package/dist/pg-proxy.js.map +1 -1
- package/dist/pglite-ipc.d.ts +15 -0
- package/dist/pglite-ipc.d.ts.map +1 -1
- package/dist/pglite-ipc.js +24 -0
- package/dist/pglite-ipc.js.map +1 -1
- package/dist/pglite-manager.d.ts +13 -0
- package/dist/pglite-manager.d.ts.map +1 -1
- package/dist/pglite-manager.js +43 -3
- package/dist/pglite-manager.js.map +1 -1
- package/dist/pglite-worker-thread.d.ts +2 -0
- package/dist/pglite-worker-thread.d.ts.map +1 -1
- package/dist/pglite-worker-thread.js +35 -0
- package/dist/pglite-worker-thread.js.map +1 -1
- package/package.json +2 -2
- package/src/bench/proxy-throughput.bench.ts +343 -0
- package/src/browser.ts +1 -0
- package/src/cli.ts +9 -0
- package/src/config.ts +11 -0
- package/src/index.ts +15 -112
- package/src/mutex.ts +5 -0
- package/src/pg-proxy-browser.ts +6 -1
- package/src/pg-proxy.ts +159 -73
- package/src/pglite-ipc.ts +32 -0
- package/src/pglite-manager.ts +60 -3
- package/src/pglite-worker-thread.ts +39 -0
- package/src/worker/embed-integration.test.ts +1 -1
package/dist/pglite-manager.js
CHANGED
|
@@ -208,7 +208,7 @@ export async function createPGliteInstances(config) {
|
|
|
208
208
|
createInstance(config, 'cdb', false),
|
|
209
209
|
]);
|
|
210
210
|
await ensurePublication(postgres);
|
|
211
|
-
return { postgres, cvr, cdb };
|
|
211
|
+
return { postgres, cvr, cdb, postgresReplicas: [] };
|
|
212
212
|
}
|
|
213
213
|
/**
|
|
214
214
|
* create worker-backed pglite instances.
|
|
@@ -249,6 +249,7 @@ export async function createPGliteWorkerInstances(config) {
|
|
|
249
249
|
postgres: pgProxy,
|
|
250
250
|
cvr: cvrProxy,
|
|
251
251
|
cdb: cdbProxy,
|
|
252
|
+
postgresReplicas: [],
|
|
252
253
|
};
|
|
253
254
|
}
|
|
254
255
|
/**
|
|
@@ -264,7 +265,7 @@ export async function createSinglePGliteInstance(config) {
|
|
|
264
265
|
const db = await createInstance(config, 'postgres', true);
|
|
265
266
|
await ensurePublication(db);
|
|
266
267
|
// same instance for all three — pg-proxy detects this and shares a mutex
|
|
267
|
-
return { postgres: db, cvr: db, cdb: db };
|
|
268
|
+
return { postgres: db, cvr: db, cdb: db, postgresReplicas: [] };
|
|
268
269
|
}
|
|
269
270
|
/**
|
|
270
271
|
* create a single worker-backed pglite instance shared across all databases.
|
|
@@ -293,7 +294,7 @@ export async function createSinglePGliteWorkerInstance(config) {
|
|
|
293
294
|
log.pglite('single worker thread ready');
|
|
294
295
|
await ensurePublication(proxy);
|
|
295
296
|
const db = proxy;
|
|
296
|
-
return { postgres: db, cvr: db, cdb: db };
|
|
297
|
+
return { postgres: db, cvr: db, cdb: db, postgresReplicas: [] };
|
|
297
298
|
}
|
|
298
299
|
/** create a single worker-backed PGlite instance (for CVR/CDB recreation during reset) */
|
|
299
300
|
export function createPGliteWorker(dataDir, name) {
|
|
@@ -305,6 +306,45 @@ export function createPGliteWorker(dataDir, name) {
|
|
|
305
306
|
pgliteOptions: {},
|
|
306
307
|
});
|
|
307
308
|
}
|
|
309
|
+
/**
|
|
310
|
+
* create read replicas of the postgres instance.
|
|
311
|
+
*
|
|
312
|
+
* dumps the primary's data directory and initializes N new worker threads
|
|
313
|
+
* from the dump. each replica is an independent PGlite instance on its own
|
|
314
|
+
* core, handling read queries concurrently.
|
|
315
|
+
*
|
|
316
|
+
* call this AFTER migrations, seed, on-db-ready — the dump captures the
|
|
317
|
+
* full database state at the time of cloning.
|
|
318
|
+
*/
|
|
319
|
+
export async function createReadReplicas(primary, count, config) {
|
|
320
|
+
if (count <= 0)
|
|
321
|
+
return [];
|
|
322
|
+
const proxy = primary;
|
|
323
|
+
if (typeof proxy.dumpDataDir !== 'function') {
|
|
324
|
+
log.pglite('read replicas require worker threads (dumpDataDir not available)');
|
|
325
|
+
return [];
|
|
326
|
+
}
|
|
327
|
+
log.pglite(`creating ${count} read replica(s)...`);
|
|
328
|
+
const t0 = performance.now();
|
|
329
|
+
const dump = await proxy.dumpDataDir();
|
|
330
|
+
log.debug.pglite(`primary dump: ${(dump.byteLength / 1024 / 1024).toFixed(1)}MB`);
|
|
331
|
+
const { dataDir: _ud, debug: _dbg, ...userOpts } = config.pgliteOptions;
|
|
332
|
+
const replicas = [];
|
|
333
|
+
for (let i = 0; i < count; i++) {
|
|
334
|
+
const replica = new PGliteWorkerProxy({
|
|
335
|
+
dataDir: 'memory://',
|
|
336
|
+
name: `postgres-replica-${i}`,
|
|
337
|
+
withExtensions: true,
|
|
338
|
+
debug: config.logLevel === 'debug' ? 1 : 0,
|
|
339
|
+
pgliteOptions: userOpts,
|
|
340
|
+
loadDataDir: dump,
|
|
341
|
+
});
|
|
342
|
+
replicas.push(replica);
|
|
343
|
+
}
|
|
344
|
+
await Promise.all(replicas.map((r) => r.waitReady));
|
|
345
|
+
log.pglite(`${count} read replica(s) ready in ${(performance.now() - t0).toFixed(0)}ms`);
|
|
346
|
+
return replicas;
|
|
347
|
+
}
|
|
308
348
|
/** run pending migrations, returns count of newly applied migrations */
|
|
309
349
|
export async function runMigrations(db, config) {
|
|
310
350
|
if (!config.migrationsDir) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pglite-manager.js","sourceRoot":"","sources":["../src/pglite-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pglite-manager.js","sourceRoot":"","sources":["../src/pglite-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,5 +11,7 @@ export interface WorkerInitConfig {
|
|
|
11
11
|
withExtensions: boolean;
|
|
12
12
|
debug: number;
|
|
13
13
|
pgliteOptions?: Record<string, unknown>;
|
|
14
|
+
/** tar dump from another instance's dumpDataDir() — used for read replicas */
|
|
15
|
+
loadDataDir?: ArrayBuffer;
|
|
14
16
|
}
|
|
15
17
|
//# sourceMappingURL=pglite-worker-thread.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pglite-worker-thread.d.ts","sourceRoot":"","sources":["../src/pglite-worker-thread.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAkBH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,EAAE,OAAO,CAAA;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"pglite-worker-thread.d.ts","sourceRoot":"","sources":["../src/pglite-worker-thread.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAkBH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,EAAE,OAAO,CAAA;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,8EAA8E;IAC9E,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B"}
|
|
@@ -56,6 +56,7 @@ async function init() {
|
|
|
56
56
|
dataDir: config.dataDir,
|
|
57
57
|
debug: config.debug,
|
|
58
58
|
relaxedDurability: true,
|
|
59
|
+
...(config.loadDataDir ? { loadDataDir: new Blob([config.loadDataDir]) } : {}),
|
|
59
60
|
initialMemory: isMain ? 32 * 1024 * 1024 : 16 * 1024 * 1024,
|
|
60
61
|
...(isMain ? {} : { startParams: ZERO_START_PARAMS }),
|
|
61
62
|
...(isMain
|
|
@@ -113,6 +114,33 @@ port.on('message', async (msg) => {
|
|
|
113
114
|
port.postMessage({ type: 'result', id, data: buf }, [buf]);
|
|
114
115
|
break;
|
|
115
116
|
}
|
|
117
|
+
case 'execProtocolRawBatch': {
|
|
118
|
+
// execute multiple wire protocol messages serially, return concatenated result.
|
|
119
|
+
// eliminates N-1 IPC round-trips for extended protocol pipelines.
|
|
120
|
+
const buffers = msg.buffers;
|
|
121
|
+
const opts = msg.options;
|
|
122
|
+
const resultParts = [];
|
|
123
|
+
let totalLen = 0;
|
|
124
|
+
for (const ab of buffers) {
|
|
125
|
+
const input = new Uint8Array(ab);
|
|
126
|
+
const result = await db.execProtocolRaw(input, opts);
|
|
127
|
+
// copy each result (pglite reuses wasm memory between calls)
|
|
128
|
+
const copy = new Uint8Array(result.byteLength);
|
|
129
|
+
copy.set(result);
|
|
130
|
+
resultParts.push(copy);
|
|
131
|
+
totalLen += copy.byteLength;
|
|
132
|
+
}
|
|
133
|
+
// concatenate all results into one transferable buffer
|
|
134
|
+
const combined = new ArrayBuffer(totalLen);
|
|
135
|
+
const view = new Uint8Array(combined);
|
|
136
|
+
let offset = 0;
|
|
137
|
+
for (const part of resultParts) {
|
|
138
|
+
view.set(part, offset);
|
|
139
|
+
offset += part.byteLength;
|
|
140
|
+
}
|
|
141
|
+
port.postMessage({ type: 'result', id, data: combined }, [combined]);
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
116
144
|
case 'query': {
|
|
117
145
|
const result = await db.query(msg.sql, msg.params);
|
|
118
146
|
port.postMessage({
|
|
@@ -149,6 +177,13 @@ port.on('message', async (msg) => {
|
|
|
149
177
|
port.postMessage({ type: 'result', id });
|
|
150
178
|
break;
|
|
151
179
|
}
|
|
180
|
+
case 'dumpDataDir': {
|
|
181
|
+
const dump = await db.dumpDataDir('none');
|
|
182
|
+
// convert Blob/File to ArrayBuffer for transfer
|
|
183
|
+
const arrayBuf = await dump.arrayBuffer();
|
|
184
|
+
port.postMessage({ type: 'result', id, data: arrayBuf }, [arrayBuf]);
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
152
187
|
case 'close': {
|
|
153
188
|
for (const unsub of listeners.values()) {
|
|
154
189
|
await unsub().catch(() => { });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pglite-worker-thread.js","sourceRoot":"","sources":["../src/pglite-worker-thread.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAE5D,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAA;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAA;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAA;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,mCAAmC,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAA;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAA;AAC1E,OAAO,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAA;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,oCAAoC,CAAA;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAA;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,uCAAuC,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAA;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"pglite-worker-thread.js","sourceRoot":"","sources":["../src/pglite-worker-thread.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAE5D,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAA;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAA;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAA;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,mCAAmC,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAA;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAA;AAC1E,OAAO,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAA;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,oCAAoC,CAAA;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAA;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,uCAAuC,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAA;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAA;AAYpD,MAAM,IAAI,GAAG,UAAW,CAAA;AACxB,MAAM,MAAM,GAAG,UAA8B,CAAA;AAE7C,8BAA8B;AAC9B,MAAM,SAAS,GAAG,IAAI,GAAG,EAA+B,CAAA;AAExD,IAAI,EAAU,CAAA;AAEd,MAAM,iBAAiB,GAAG;IACxB,UAAU;IACV,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,oBAAoB;IACpB,IAAI;IACJ,qBAAqB;IACrB,IAAI;IACJ,uBAAuB;CACxB,CAAA;AAED,MAAM,iBAAiB,GAAG;IACxB,GAAG,iBAAiB;IACpB,IAAI;IACJ,sBAAsB;IACtB,IAAI;IACJ,kBAAkB;IAClB,IAAI;IACJ,eAAe;IACf,IAAI;IACJ,0BAA0B;IAC1B,IAAI;IACJ,oBAAoB;CACrB,CAAA;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,CAAC,aAAa,IAAI,EAAE,CAAA;IACtF,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAA;IAEpC,EAAE,GAAG,IAAI,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,iBAAiB,EAAE,IAAI;QACvB,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,GAAG,IAAI;QAC3D,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC;QACrD,GAAG,CAAC,MAAM;YACR,CAAC,CAAC;gBACE,WAAW,EAAE;oBACX,GAAG,iBAAiB;oBACpB,IAAI;oBACJ,oBAAoB;oBACpB,IAAI;oBACJ,iBAAiB;iBAClB;gBACD,GAAG,QAAQ;gBACX,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI;oBACjC,MAAM;oBACN,OAAO;oBACP,QAAQ;oBACR,SAAS;oBACT,MAAM;oBACN,MAAM;oBACN,KAAK;oBACL,aAAa;oBACb,SAAS;oBACT,UAAU;oBACV,IAAI;oBACJ,aAAa;iBACd;aACF;YACH,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;KACjB,CAAC,CAAA;IAET,MAAM,EAAE,CAAC,SAAS,CAAA;IAElB,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,EAAE,CAAC,IAAI,CAAC;;;;;;KAMb,CAAC,CAAA;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;IACjC,CAAC;IAED,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;AACrC,CAAC;AAED,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,GAAyD,EAAE,EAAE;IACrF,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,GAAG,CAAA;IAExB,IAAI,CAAC;QACH,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,IAAmB,CAAC,CAAA;gBACrD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,OAAc,CAAC,CAAA;gBAClE,sEAAsE;gBACtE,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;gBAC9C,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;gBAC/B,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;gBAC1D,MAAK;YACP,CAAC;YAED,KAAK,sBAAsB,CAAC,CAAC,CAAC;gBAC5B,gFAAgF;gBAChF,kEAAkE;gBAClE,MAAM,OAAO,GAAG,GAAG,CAAC,OAAwB,CAAA;gBAC5C,MAAM,IAAI,GAAG,GAAG,CAAC,OAAc,CAAA;gBAC/B,MAAM,WAAW,GAAiB,EAAE,CAAA;gBACpC,IAAI,QAAQ,GAAG,CAAC,CAAA;gBAChB,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;oBACzB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAA;oBAChC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;oBACpD,6DAA6D;oBAC7D,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;oBAC9C,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;oBAChB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;oBACtB,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAA;gBAC7B,CAAC;gBACD,uDAAuD;gBACvD,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAA;gBAC1C,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAA;gBACrC,IAAI,MAAM,GAAG,CAAC,CAAA;gBACd,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;oBAC/B,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;oBACtB,MAAM,IAAI,IAAI,CAAC,UAAU,CAAA;gBAC3B,CAAC;gBACD,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;gBACpE,MAAK;YACP,CAAC;YAED,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAa,EAAE,GAAG,CAAC,MAAe,CAAC,CAAA;gBACrE,IAAI,CAAC,WAAW,CAAC;oBACf,IAAI,EAAE,QAAQ;oBACd,EAAE;oBACF,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,YAAY,EAAE,MAAM,CAAC,YAAY;iBAClC,CAAC,CAAA;gBACF,MAAK;YACP,CAAC;YAED,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAa,CAAC,CAAA;gBAC/C,qDAAqD;gBACrD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;gBAC1E,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;gBACjD,MAAK;YACP,CAAC;YAED,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,OAAO,GAAG,GAAG,CAAC,OAAiB,CAAA;gBACrC,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE;oBACjD,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;gBAC9D,CAAC,CAAC,CAAA;gBACF,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;gBACxB,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAA;gBACxC,MAAK;YACP,CAAC;YAED,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAkB,CAAA;gBACvC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;gBACrC,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,KAAK,EAAE,CAAA;oBACb,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;gBAC5B,CAAC;gBACD,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAA;gBACxC,MAAK;YACP,CAAC;YAED,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;gBACzC,gDAAgD;gBAChD,MAAM,QAAQ,GAAG,MAAO,IAAa,CAAC,WAAW,EAAE,CAAA;gBACnD,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;gBACpE,MAAK;YACP,CAAC;YAED,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;oBACvC,MAAM,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;gBAC/B,CAAC;gBACD,SAAS,CAAC,KAAK,EAAE,CAAA;gBACjB,MAAM,EAAE,CAAC,KAAK,EAAE,CAAA;gBAChB,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAA;gBACxC,MAAK;YACP,CAAC;YAED;gBACE,IAAI,CAAC,WAAW,CAAC;oBACf,IAAI,EAAE,OAAO;oBACb,EAAE;oBACF,OAAO,EAAE,yBAAyB,IAAI,EAAE;iBACzC,CAAC,CAAA;QACN,CAAC;IACH,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,GAA0C,CAAA;QACxD,IAAI,CAAC,WAAW,CAAC;YACf,IAAI,EAAE,OAAO;YACb,EAAE;YACF,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC;YACtC,IAAI,EAAE,KAAK,EAAE,IAAI;SAClB,CAAC,CAAA;IACJ,CAAC;AACH,CAAC,CAAC,CAAA;AAEF,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC5B,MAAM,KAAK,GAAG,GAA2B,CAAA;IACzC,IAAI,CAAC,WAAW,CAAC;QACf,IAAI,EAAE,OAAO;QACb,EAAE,EAAE,CAAC;QACL,OAAO,EAAE,uBAAuB,KAAK,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE;KAChE,CAAC,CAAA;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "orez",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "PGlite-powered zero-sync development backend. No Docker required.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
"dependencies": {
|
|
65
65
|
"@electric-sql/pglite": "0.4.1",
|
|
66
66
|
"@electric-sql/pglite-tools": "^0.3.1",
|
|
67
|
-
"bedrock-sqlite": "0.
|
|
67
|
+
"bedrock-sqlite": "0.2.0",
|
|
68
68
|
"citty": "^0.2.0",
|
|
69
69
|
"pg-gateway": "0.3.0-beta.4",
|
|
70
70
|
"pgsql-parser": "^17.9.11",
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* benchmark: proxy throughput
|
|
3
|
+
*
|
|
4
|
+
* measures raw query throughput through the TCP proxy pipeline:
|
|
5
|
+
* TCP socket → main thread proxy → worker thread → PGlite WASM → back
|
|
6
|
+
*
|
|
7
|
+
* tests both serial and concurrent query patterns to expose
|
|
8
|
+
* single-thread bottlenecks and mutex contention.
|
|
9
|
+
*
|
|
10
|
+
* run: bun src/bench/proxy-throughput.bench.ts
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { createConnection, type Socket } from 'node:net'
|
|
14
|
+
|
|
15
|
+
import { startZeroLite } from '../index.js'
|
|
16
|
+
|
|
17
|
+
import type { PGlite } from '@electric-sql/pglite'
|
|
18
|
+
|
|
19
|
+
const textEncoder = new TextEncoder()
|
|
20
|
+
const textDecoder = new TextDecoder()
|
|
21
|
+
|
|
22
|
+
// --- wire protocol helpers ---
|
|
23
|
+
|
|
24
|
+
function buildSimpleQuery(sql: string): Uint8Array {
|
|
25
|
+
const queryBytes = textEncoder.encode(sql + '\0')
|
|
26
|
+
const buf = new Uint8Array(5 + queryBytes.length)
|
|
27
|
+
buf[0] = 0x51 // 'Q'
|
|
28
|
+
new DataView(buf.buffer).setInt32(1, 4 + queryBytes.length)
|
|
29
|
+
buf.set(queryBytes, 5)
|
|
30
|
+
return buf
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function buildStartupMessage(user: string, database: string): Buffer {
|
|
34
|
+
const params = `user\0${user}\0database\0${database}\0\0`
|
|
35
|
+
const paramsBytes = Buffer.from(params, 'utf-8')
|
|
36
|
+
const len = 4 + 4 + paramsBytes.length // length + protocol version + params
|
|
37
|
+
const buf = Buffer.alloc(len)
|
|
38
|
+
buf.writeInt32BE(len, 0)
|
|
39
|
+
buf.writeInt32BE(196608, 4) // protocol 3.0
|
|
40
|
+
paramsBytes.copy(buf, 8)
|
|
41
|
+
return buf
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function buildPasswordMessage(password: string): Buffer {
|
|
45
|
+
const passBytes = Buffer.from(password + '\0', 'utf-8')
|
|
46
|
+
const len = 4 + passBytes.length
|
|
47
|
+
const buf = Buffer.alloc(1 + len)
|
|
48
|
+
buf[0] = 0x70 // 'p'
|
|
49
|
+
buf.writeInt32BE(len, 1)
|
|
50
|
+
passBytes.copy(buf, 5)
|
|
51
|
+
return buf
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// read messages from socket until we get ReadyForQuery (0x5a)
|
|
55
|
+
function readUntilReady(socket: Socket): Promise<Buffer[]> {
|
|
56
|
+
return new Promise((resolve, reject) => {
|
|
57
|
+
const messages: Buffer[] = []
|
|
58
|
+
let buffer = Buffer.alloc(0)
|
|
59
|
+
const timeout = setTimeout(
|
|
60
|
+
() => reject(new Error('timeout waiting for ReadyForQuery')),
|
|
61
|
+
10000
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
const onData = (data: Buffer) => {
|
|
65
|
+
buffer = Buffer.concat([buffer, data])
|
|
66
|
+
// parse complete messages
|
|
67
|
+
while (buffer.length >= 5) {
|
|
68
|
+
const msgType = buffer[0]
|
|
69
|
+
const msgLen = buffer.readInt32BE(1)
|
|
70
|
+
const totalLen = 1 + msgLen
|
|
71
|
+
if (buffer.length < totalLen) break
|
|
72
|
+
const msg = buffer.subarray(0, totalLen)
|
|
73
|
+
messages.push(Buffer.from(msg))
|
|
74
|
+
buffer = buffer.subarray(totalLen)
|
|
75
|
+
if (msgType === 0x5a) {
|
|
76
|
+
// ReadyForQuery
|
|
77
|
+
clearTimeout(timeout)
|
|
78
|
+
socket.off('data', onData)
|
|
79
|
+
resolve(messages)
|
|
80
|
+
return
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
socket.on('data', onData)
|
|
85
|
+
socket.on('error', (err) => {
|
|
86
|
+
clearTimeout(timeout)
|
|
87
|
+
reject(err)
|
|
88
|
+
})
|
|
89
|
+
})
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
async function connectPg(
|
|
93
|
+
port: number,
|
|
94
|
+
user: string,
|
|
95
|
+
password: string,
|
|
96
|
+
database = 'postgres'
|
|
97
|
+
): Promise<Socket> {
|
|
98
|
+
const socket = await new Promise<Socket>((resolve, reject) => {
|
|
99
|
+
const s = createConnection({ host: '127.0.0.1', port }, () => resolve(s))
|
|
100
|
+
s.setMaxListeners(0) // suppress MaxListenersExceeded warnings for benchmarks
|
|
101
|
+
s.on('error', reject)
|
|
102
|
+
})
|
|
103
|
+
socket.setNoDelay(true)
|
|
104
|
+
|
|
105
|
+
// startup
|
|
106
|
+
socket.write(buildStartupMessage(user, database))
|
|
107
|
+
|
|
108
|
+
// wait for auth request
|
|
109
|
+
await new Promise<void>((resolve) => {
|
|
110
|
+
const onData = (data: Buffer) => {
|
|
111
|
+
if (data[0] === 0x52) {
|
|
112
|
+
// AuthenticationCleartextPassword
|
|
113
|
+
socket.off('data', onData)
|
|
114
|
+
resolve()
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
socket.on('data', onData)
|
|
118
|
+
})
|
|
119
|
+
|
|
120
|
+
// send password
|
|
121
|
+
socket.write(buildPasswordMessage(password))
|
|
122
|
+
|
|
123
|
+
// wait for ReadyForQuery
|
|
124
|
+
await readUntilReady(socket)
|
|
125
|
+
return socket
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
async function sendQuery(
|
|
129
|
+
socket: Socket,
|
|
130
|
+
sql: string
|
|
131
|
+
): Promise<{ messages: Buffer[]; elapsed: number }> {
|
|
132
|
+
const t0 = performance.now()
|
|
133
|
+
socket.write(buildSimpleQuery(sql))
|
|
134
|
+
const messages = await readUntilReady(socket)
|
|
135
|
+
return { messages, elapsed: performance.now() - t0 }
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// --- benchmarks ---
|
|
139
|
+
|
|
140
|
+
interface BenchResult {
|
|
141
|
+
name: string
|
|
142
|
+
ops: number
|
|
143
|
+
totalMs: number
|
|
144
|
+
opsPerSec: number
|
|
145
|
+
avgLatencyMs: number
|
|
146
|
+
p50Ms: number
|
|
147
|
+
p99Ms: number
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
function percentile(sorted: number[], p: number): number {
|
|
151
|
+
const idx = Math.ceil(sorted.length * p) - 1
|
|
152
|
+
return sorted[Math.max(0, idx)]
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function formatResult(r: BenchResult) {
|
|
156
|
+
return [
|
|
157
|
+
` ${r.name}`,
|
|
158
|
+
` ops: ${r.ops}`,
|
|
159
|
+
` total: ${r.totalMs.toFixed(1)}ms`,
|
|
160
|
+
` throughput: ${r.opsPerSec.toFixed(0)} ops/sec`,
|
|
161
|
+
` avg latency: ${r.avgLatencyMs.toFixed(2)}ms`,
|
|
162
|
+
` p50: ${r.p50Ms.toFixed(2)}ms`,
|
|
163
|
+
` p99: ${r.p99Ms.toFixed(2)}ms`,
|
|
164
|
+
].join('\n')
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
async function benchSerial(
|
|
168
|
+
socket: Socket,
|
|
169
|
+
sql: string,
|
|
170
|
+
ops: number,
|
|
171
|
+
name: string
|
|
172
|
+
): Promise<BenchResult> {
|
|
173
|
+
const latencies: number[] = []
|
|
174
|
+
const t0 = performance.now()
|
|
175
|
+
for (let i = 0; i < ops; i++) {
|
|
176
|
+
const { elapsed } = await sendQuery(socket, sql)
|
|
177
|
+
latencies.push(elapsed)
|
|
178
|
+
}
|
|
179
|
+
const totalMs = performance.now() - t0
|
|
180
|
+
latencies.sort((a, b) => a - b)
|
|
181
|
+
return {
|
|
182
|
+
name,
|
|
183
|
+
ops,
|
|
184
|
+
totalMs,
|
|
185
|
+
opsPerSec: (ops / totalMs) * 1000,
|
|
186
|
+
avgLatencyMs: totalMs / ops,
|
|
187
|
+
p50Ms: percentile(latencies, 0.5),
|
|
188
|
+
p99Ms: percentile(latencies, 0.99),
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
async function benchConcurrent(
|
|
193
|
+
sockets: Socket[],
|
|
194
|
+
sql: string,
|
|
195
|
+
opsPerSocket: number,
|
|
196
|
+
name: string
|
|
197
|
+
): Promise<BenchResult> {
|
|
198
|
+
const allLatencies: number[] = []
|
|
199
|
+
const t0 = performance.now()
|
|
200
|
+
await Promise.all(
|
|
201
|
+
sockets.map(async (socket) => {
|
|
202
|
+
for (let i = 0; i < opsPerSocket; i++) {
|
|
203
|
+
const { elapsed } = await sendQuery(socket, sql)
|
|
204
|
+
allLatencies.push(elapsed)
|
|
205
|
+
}
|
|
206
|
+
})
|
|
207
|
+
)
|
|
208
|
+
const totalMs = performance.now() - t0
|
|
209
|
+
const ops = sockets.length * opsPerSocket
|
|
210
|
+
allLatencies.sort((a, b) => a - b)
|
|
211
|
+
return {
|
|
212
|
+
name,
|
|
213
|
+
ops,
|
|
214
|
+
totalMs,
|
|
215
|
+
opsPerSec: (ops / totalMs) * 1000,
|
|
216
|
+
avgLatencyMs: allLatencies.reduce((s, v) => s + v, 0) / ops,
|
|
217
|
+
p50Ms: percentile(allLatencies, 0.5),
|
|
218
|
+
p99Ms: percentile(allLatencies, 0.99),
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
async function run() {
|
|
223
|
+
console.log('\n=== Proxy Throughput Benchmark ===\n')
|
|
224
|
+
|
|
225
|
+
const pgPort = 25000 + Math.floor(Math.random() * 1000)
|
|
226
|
+
const zeroPort = pgPort + 100
|
|
227
|
+
const dataDir = `.orez-bench-proxy-${Date.now()}`
|
|
228
|
+
|
|
229
|
+
console.log(`starting orez (pg:${pgPort}, skipZero)...`)
|
|
230
|
+
const result = await startZeroLite({
|
|
231
|
+
pgPort,
|
|
232
|
+
zeroPort,
|
|
233
|
+
dataDir,
|
|
234
|
+
logLevel: 'error',
|
|
235
|
+
skipZeroCache: true, // pure proxy benchmark, no zero-cache overhead
|
|
236
|
+
})
|
|
237
|
+
|
|
238
|
+
const db = result.db as PGlite
|
|
239
|
+
const user = 'user'
|
|
240
|
+
const password = 'password'
|
|
241
|
+
|
|
242
|
+
try {
|
|
243
|
+
// set up test table
|
|
244
|
+
await db.exec(`
|
|
245
|
+
CREATE TABLE bench_rows (
|
|
246
|
+
id SERIAL PRIMARY KEY,
|
|
247
|
+
value TEXT,
|
|
248
|
+
num INTEGER
|
|
249
|
+
);
|
|
250
|
+
INSERT INTO bench_rows (value, num)
|
|
251
|
+
SELECT 'row-' || i, i FROM generate_series(1, 1000) AS i;
|
|
252
|
+
`)
|
|
253
|
+
|
|
254
|
+
// warmup
|
|
255
|
+
const warmupSocket = await connectPg(pgPort, user, password)
|
|
256
|
+
for (let i = 0; i < 50; i++) {
|
|
257
|
+
await sendQuery(warmupSocket, 'SELECT 1')
|
|
258
|
+
}
|
|
259
|
+
warmupSocket.destroy()
|
|
260
|
+
|
|
261
|
+
const results: BenchResult[] = []
|
|
262
|
+
|
|
263
|
+
// --- serial benchmarks (1 connection) ---
|
|
264
|
+
console.log('running serial benchmarks...')
|
|
265
|
+
const s1 = await connectPg(pgPort, user, password)
|
|
266
|
+
|
|
267
|
+
results.push(await benchSerial(s1, 'SELECT 1', 500, 'serial: SELECT 1 (ping)'))
|
|
268
|
+
results.push(
|
|
269
|
+
await benchSerial(
|
|
270
|
+
s1,
|
|
271
|
+
'SELECT * FROM bench_rows LIMIT 10',
|
|
272
|
+
500,
|
|
273
|
+
'serial: SELECT 10 rows'
|
|
274
|
+
)
|
|
275
|
+
)
|
|
276
|
+
results.push(
|
|
277
|
+
await benchSerial(s1, 'SELECT * FROM bench_rows', 200, 'serial: SELECT 1000 rows')
|
|
278
|
+
)
|
|
279
|
+
results.push(
|
|
280
|
+
await benchSerial(
|
|
281
|
+
s1,
|
|
282
|
+
"INSERT INTO bench_rows (value, num) VALUES ('x', 1)",
|
|
283
|
+
200,
|
|
284
|
+
'serial: INSERT'
|
|
285
|
+
)
|
|
286
|
+
)
|
|
287
|
+
|
|
288
|
+
s1.destroy()
|
|
289
|
+
|
|
290
|
+
// --- concurrent benchmarks (multiple connections, same db) ---
|
|
291
|
+
console.log('running concurrent benchmarks...')
|
|
292
|
+
const concSockets: Socket[] = []
|
|
293
|
+
for (let i = 0; i < 4; i++) {
|
|
294
|
+
concSockets.push(await connectPg(pgPort, user, password))
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
results.push(
|
|
298
|
+
await benchConcurrent(concSockets, 'SELECT 1', 200, 'concurrent 4x: SELECT 1')
|
|
299
|
+
)
|
|
300
|
+
results.push(
|
|
301
|
+
await benchConcurrent(
|
|
302
|
+
concSockets,
|
|
303
|
+
'SELECT * FROM bench_rows LIMIT 10',
|
|
304
|
+
200,
|
|
305
|
+
'concurrent 4x: SELECT 10 rows'
|
|
306
|
+
)
|
|
307
|
+
)
|
|
308
|
+
|
|
309
|
+
for (const s of concSockets) s.destroy()
|
|
310
|
+
|
|
311
|
+
// --- report ---
|
|
312
|
+
console.log('\n=== Results ===\n')
|
|
313
|
+
for (const r of results) {
|
|
314
|
+
console.log(formatResult(r))
|
|
315
|
+
console.log()
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
// summary: serial vs concurrent throughput ratio
|
|
319
|
+
const serialPing = results.find((r) => r.name.includes('serial: SELECT 1'))!
|
|
320
|
+
const concPing = results.find((r) => r.name.includes('concurrent 4x: SELECT 1'))!
|
|
321
|
+
const serialReal = results.find((r) => r.name.includes('serial: SELECT 10'))!
|
|
322
|
+
const concReal = results.find((r) => r.name.includes('concurrent 4x: SELECT 10'))!
|
|
323
|
+
const pingRatio = concPing.opsPerSec / serialPing.opsPerSec
|
|
324
|
+
const realRatio = concReal.opsPerSec / serialReal.opsPerSec
|
|
325
|
+
console.log(` === scaling analysis (ideal = 4.0x with 4 connections) ===`)
|
|
326
|
+
console.log(
|
|
327
|
+
` ping (no mutex/pglite): ${pingRatio.toFixed(2)}x ← main thread parallelism`
|
|
328
|
+
)
|
|
329
|
+
console.log(` real queries (mutex): ${realRatio.toFixed(2)}x ← bottleneck here`)
|
|
330
|
+
console.log()
|
|
331
|
+
} finally {
|
|
332
|
+
await result.stop()
|
|
333
|
+
const { rmSync } = await import('node:fs')
|
|
334
|
+
try {
|
|
335
|
+
rmSync(dataDir, { recursive: true, force: true })
|
|
336
|
+
} catch {}
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
run().catch((err) => {
|
|
341
|
+
console.error('benchmark failed:', err)
|
|
342
|
+
process.exit(1)
|
|
343
|
+
})
|
package/src/browser.ts
CHANGED
package/src/cli.ts
CHANGED
|
@@ -956,6 +956,12 @@ const main = defineCommand({
|
|
|
956
956
|
'use a single pglite instance for all databases (lighter for constrained environments)',
|
|
957
957
|
default: false,
|
|
958
958
|
},
|
|
959
|
+
'read-replicas': {
|
|
960
|
+
type: 'string',
|
|
961
|
+
description:
|
|
962
|
+
'number of pglite read replicas for postgres (0 to disable, default: auto)',
|
|
963
|
+
default: '',
|
|
964
|
+
},
|
|
959
965
|
'on-db-ready': {
|
|
960
966
|
type: 'string',
|
|
961
967
|
description: 'command to run after db+proxy are ready, before zero-cache starts',
|
|
@@ -1005,6 +1011,7 @@ const main = defineCommand({
|
|
|
1005
1011
|
'force-wasm-sqlite': false,
|
|
1006
1012
|
'no-worker-threads': false,
|
|
1007
1013
|
'single-db': false,
|
|
1014
|
+
'read-replicas': '',
|
|
1008
1015
|
'on-db-ready': '',
|
|
1009
1016
|
'on-healthy': '',
|
|
1010
1017
|
'disable-admin': false,
|
|
@@ -1037,6 +1044,7 @@ const main = defineCommand({
|
|
|
1037
1044
|
...(wasSet('force-wasm-sqlite') && { forceWasmSqlite: args['force-wasm-sqlite'] }),
|
|
1038
1045
|
...(wasSet('no-worker-threads') && { noWorkerThreads: args['no-worker-threads'] }),
|
|
1039
1046
|
...(wasSet('single-db') && { singleDb: args['single-db'] }),
|
|
1047
|
+
...(wasSet('read-replicas') && { readReplicas: Number(args['read-replicas']) }),
|
|
1040
1048
|
...(wasSet('on-db-ready') && { onDbReady: args['on-db-ready'] }),
|
|
1041
1049
|
...(wasSet('on-healthy') && { onHealthy: args['on-healthy'] }),
|
|
1042
1050
|
...(wasSet('disable-admin') && { disableAdmin: args['disable-admin'] }),
|
|
@@ -1076,6 +1084,7 @@ const main = defineCommand({
|
|
|
1076
1084
|
forceWasmSqlite: cliOverrides.forceWasmSqlite,
|
|
1077
1085
|
useWorkerThreads: resolvedUseWorkerThreads,
|
|
1078
1086
|
singleDb: cliOverrides.singleDb,
|
|
1087
|
+
readReplicas: cliOverrides.readReplicas,
|
|
1079
1088
|
logLevel: cliOverrides.logLevel,
|
|
1080
1089
|
onDbReady: cliOverrides.onDbReady || undefined,
|
|
1081
1090
|
onHealthy: cliOverrides.onHealthy || undefined,
|