lru. misc.

This commit is contained in:
Christopher Jeffrey 2016-02-16 01:23:07 -08:00
parent 24cc9c85ef
commit 5de30139ae
3 changed files with 32 additions and 19 deletions

View File

@ -52,9 +52,6 @@ function BlockDB(options) {
compression: true, compression: true,
cacheSize: 16 * 1024 * 1024, cacheSize: 16 * 1024 * 1024,
writeBufferSize: 8 * 1024 * 1024, writeBufferSize: 8 * 1024 * 1024,
// https://leveldb.googlecode.com/git-history/master/doc/index.html
// Higher block size = better for iterators
// Lower block size = better for gets
// blockSize: 4 * 1024, // blockSize: 4 * 1024,
maxOpenFiles: 8192, maxOpenFiles: 8192,
// blockRestartInterval: 16, // blockRestartInterval: 16,

View File

@ -1212,10 +1212,10 @@ function pbkdf2(key, salt, iterations, dkLen) {
throw new TypeError('salt must a string or array'); throw new TypeError('salt must a string or array');
if (typeof key === 'string') if (typeof key === 'string')
key = utils.toArray(key, null); key = new Buffer(key, 'ascii');
if (typeof salt === 'string') if (typeof salt === 'string')
salt = utils.toArray(salt, null); salt = new Buffer(salt, 'ascii');
var DK = new Buffer(dkLen); var DK = new Buffer(dkLen);
var U = new Buffer(hLen); var U = new Buffer(hLen);
@ -1254,6 +1254,10 @@ function pbkdf2(key, salt, iterations, dkLen) {
return DK; return DK;
} }
HD.cache = new bcoin.lru(500, function(key, value) {
return 1;
});
var cache = { var cache = {
data: {}, data: {},
count: 0 count: 0

View File

@ -29,7 +29,7 @@ LRU.prototype._getSize = function _getSize(item) {
var keySize = item.key.length * 2; var keySize = item.key.length * 2;
if (this.getSize) if (this.getSize)
return keySize + this.getSize(item.value); return this.getSize(item.key, item.value);
if (item.value == null) if (item.value == null)
return keySize + 1; return keySize + 1;
@ -56,16 +56,29 @@ LRU.prototype._getSize = function _getSize(item) {
}; };
LRU.prototype._compact = function _compact() { LRU.prototype._compact = function _compact() {
var item; var item, next;
if (this.size <= this.maxSize) if (this.size <= this.maxSize)
return; return;
for (item = this.head; item; item = item.next) { for (item = this.head; item; item = next) {
if (this.size < this.maxSize) if (this.size <= this.maxSize)
break; break;
this.remove(item.key); this.size -= this._getSize(item);
delete this.data[item.key];
next = item.next;
item.prev = null;
item.next = null;
} }
if (!item) {
this.head = null;
this.tail = null;
return;
}
this.head = item;
item.prev = null;
}; };
LRU.prototype.set = function set(key, value) { LRU.prototype.set = function set(key, value) {
@ -201,16 +214,16 @@ var a3 = '3';
var a4 = '4'; var a4 = '4';
var a5 = '5'; var a5 = '5';
var a6 = '6'; var a6 = '6';
var lru = new LRU(((2 * 4) + 4) * 2); var lru = new LRU(4, function() { return 1; });
lru.set('a1', a1); lru.set('a1', a1);
assert(lru.get('a1') === '1'); assert(lru.get('a1') === '1');
assert(lru.size === ((2 * 1) + 1) * 2); assert(lru.size === 1);
assert(lru.head.key === 'a1' && lru.tail.key === 'a1' && !lru.head.prev && !lru.head.next); assert(lru.head.key === 'a1' && lru.tail.key === 'a1' && !lru.head.prev && !lru.head.next);
lru._keys(); lru._keys();
// console.log(lru._keys()); // console.log(lru._keys());
lru.set('a2', a2); lru.set('a2', a2);
assert(lru.get('a2') === '2'); assert(lru.get('a2') === '2');
assert(lru.size === ((2 * 2) + 2) * 2); assert(lru.size === 2);
assert(lru.head.key === 'a1' && lru.tail.key === 'a2' assert(lru.head.key === 'a1' && lru.tail.key === 'a2'
&& !lru.head.prev && lru.head.next.key === 'a2' && !lru.head.prev && lru.head.next.key === 'a2'
&& !lru.tail.next && lru.tail.prev.key === 'a1'); && !lru.tail.next && lru.tail.prev.key === 'a1');
@ -218,17 +231,17 @@ lru._keys();
// console.log(lru._keys()); // console.log(lru._keys());
lru.set('a3', a3); lru.set('a3', a3);
assert(lru.get('a3') === '3'); assert(lru.get('a3') === '3');
assert(lru.size === ((2 * 3) + 3) * 2); assert(lru.size === 3);
lru._keys(); lru._keys();
// console.log(lru._keys()); // console.log(lru._keys());
lru.set('a3', a3); lru.set('a3', a3);
assert(lru.get('a3') === '3'); assert(lru.get('a3') === '3');
assert(lru.size === ((2 * 3) + 3) * 2); assert(lru.size === 3);
lru._keys(); lru._keys();
// console.log(lru._keys()); // console.log(lru._keys());
lru.set('a4', a4); lru.set('a4', a4);
assert(lru.get('a4') === '4'); assert(lru.get('a4') === '4');
assert(lru.size === ((2 * 4) + 4) * 2); assert(lru.size === 4);
lru._keys(); lru._keys();
// console.log(lru._keys()); // console.log(lru._keys());
assert(lru.get('a1')); assert(lru.get('a1'));
@ -243,16 +256,15 @@ assert(lru.head.key === 'a2' && lru.tail.key === 'a4'
&& !lru.tail.next && lru.tail.prev.key === 'a3'); && !lru.tail.next && lru.tail.prev.key === 'a3');
lru.set('a5', a5); lru.set('a5', a5);
assert(lru.get('a5') === '5'); assert(lru.get('a5') === '5');
assert(lru.size === ((2 * 4) + 4) * 2); assert(lru.size === 4);
assert(!lru.get('a1')); assert(!lru.get('a1'));
lru._keys(); lru._keys();
// console.log(lru._keys()); // console.log(lru._keys());
lru.get('a2'); lru.get('a2');
lru._keys(); lru._keys();
// console.log(lru._keys());
lru.set('a6', a6); lru.set('a6', a6);
assert(lru.get('a6') === '6'); assert(lru.get('a6') === '6');
assert(lru.size === ((2 * 4) + 4) * 2); assert(lru.size === 4);
assert(!lru.get('a3')); assert(!lru.get('a3'));
lru._keys(); lru._keys();
// console.log(lru._keys()); // console.log(lru._keys());