42 lines
1.4 KiB
JavaScript
42 lines
1.4 KiB
JavaScript
|
|
import fs from 'node:fs';
|
||
|
|
import path from 'node:path';
|
||
|
|
|
||
|
|
const manifestPath = process.argv[2] || 'tmp/shards-bench/manifest.json';
|
||
|
|
const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
|
||
|
|
const baseDir = path.dirname(manifestPath);
|
||
|
|
|
||
|
|
const shardSizes = [];
|
||
|
|
for (const shard of manifest.shards || []) {
|
||
|
|
const filePath = path.join(baseDir, shard.key);
|
||
|
|
const stat = fs.statSync(filePath);
|
||
|
|
shardSizes.push({
|
||
|
|
key: shard.key,
|
||
|
|
bytes: stat.size,
|
||
|
|
relationId: shard.relationId,
|
||
|
|
direction: shard.direction,
|
||
|
|
rangeStart: shard.rangeStart,
|
||
|
|
rangeEnd: shard.rangeEnd,
|
||
|
|
edgeCount: shard.edgeCount
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
if (!shardSizes.length) {
|
||
|
|
console.log('No shards found.');
|
||
|
|
process.exit(0);
|
||
|
|
}
|
||
|
|
|
||
|
|
shardSizes.sort((a, b) => a.bytes - b.bytes);
|
||
|
|
const totalBytes = shardSizes.reduce((sum, s) => sum + s.bytes, 0);
|
||
|
|
const toMb = (bytes) => (bytes / 1024 / 1024).toFixed(2);
|
||
|
|
const pick = (q) => shardSizes[Math.floor((shardSizes.length - 1) * q)];
|
||
|
|
|
||
|
|
console.log('Shard size distribution');
|
||
|
|
console.log(` shards: ${shardSizes.length}`);
|
||
|
|
console.log(` total: ${toMb(totalBytes)} MB`);
|
||
|
|
console.log(` avg: ${toMb(totalBytes / shardSizes.length)} MB`);
|
||
|
|
console.log(` p50: ${toMb(pick(0.5).bytes)} MB`);
|
||
|
|
console.log(` p90: ${toMb(pick(0.9).bytes)} MB`);
|
||
|
|
console.log(` p95: ${toMb(pick(0.95).bytes)} MB`);
|
||
|
|
console.log(` p99: ${toMb(pick(0.99).bytes)} MB`);
|
||
|
|
console.log(` max: ${toMb(shardSizes[shardSizes.length - 1].bytes)} MB`);
|