lru. misc.
This commit is contained in:
parent
24cc9c85ef
commit
5de30139ae
@ -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,
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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());
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user