hybrid-disk-cache
Version:
A hybrid disk cache utilize both the database and the file system.
59 lines (58 loc) • 2.03 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var _1 = __importDefault(require("."));
function log(start, count) {
var _a = process.hrtime(start), secs = _a[0], ns = _a[1];
var ms = ns / 1000;
var speed = (secs * 1000000 + ms) / count;
console.log(' done: %s μs/record.', speed.toFixed(2));
}
function benchData(size) {
if (size === void 0) { size = 6; }
var base = [1, 2, 5];
// from 10B to 5MB
var full = new Array(size)
.fill(0)
.flatMap(function (_, exp) { return base.map(function (b) { return b * Math.pow(10, exp); }); })
.map(function (i) { return Buffer.from(new Array(i).fill(0)); });
return full;
}
function benchWrite(cache, batch, size) {
if (size === void 0) { size = 6; }
console.log('> generating bench data from 10B to %sB', 5 * Math.pow(10, size));
var full = benchData(size);
var count = 0;
console.log('> starting %s x %s writes', batch, full.length);
var start = process.hrtime();
for (var i = 0; i < batch; i++) {
for (var j = 0; j < full.length; j++) {
cache.set('key-' + j, full[j]);
count += 1;
}
}
log(start, count);
return full.map(function (_, i) { return 'key-' + i; });
}
function benchRead(cache, batch, keys) {
var count = 0;
console.log('> starting %s x %s reads', batch, keys.length);
var start = process.hrtime();
for (var i = 0; i < batch; i++) {
for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
var key = keys_1[_i];
cache.get(key);
count += 1;
}
}
log(start, count);
}
if (require.main === module) {
var cache = new _1.default();
console.log('> cache located at: %s', cache.path);
var batch = 3000;
var keys = benchWrite(cache, batch, 5);
benchRead(cache, batch, keys);
}
;