lru cache. coin cache.
This commit is contained in:
parent
690f1629c3
commit
80c6c5975e
@ -65,10 +65,9 @@ function ChainDB(chain, options) {
|
|||||||
else
|
else
|
||||||
this._cacheWindow = network.block.majorityWindow + 1;
|
this._cacheWindow = network.block.majorityWindow + 1;
|
||||||
|
|
||||||
// this.cacheHash = new bcoin.lru(this._cacheWindow);
|
this.coinCache = new NullCache(100000);
|
||||||
// this.cacheHeight = new bcoin.lru(this._cacheWindow);
|
this.cacheHash = new bcoin.lru(this._cacheWindow);
|
||||||
this.cacheHash = new DumbCache(this._cacheWindow * 10);
|
this.cacheHeight = new bcoin.lru(this._cacheWindow);
|
||||||
this.cacheHeight = new DumbCache(this._cacheWindow * 10);
|
|
||||||
|
|
||||||
this._init();
|
this._init();
|
||||||
}
|
}
|
||||||
@ -777,7 +776,7 @@ ChainDB.prototype.removeBlock = function removeBlock(hash, batch, callback) {
|
|||||||
|
|
||||||
ChainDB.prototype.connectBlock = function connectBlock(block, batch, callback) {
|
ChainDB.prototype.connectBlock = function connectBlock(block, batch, callback) {
|
||||||
var self = this;
|
var self = this;
|
||||||
var i, j, tx, input, output, key, address, hash, uniq;
|
var i, j, tx, input, output, key, address, hash, uniq, coin;
|
||||||
|
|
||||||
if (this.options.spv) {
|
if (this.options.spv) {
|
||||||
self.emit('add block', block);
|
self.emit('add block', block);
|
||||||
@ -818,11 +817,13 @@ ChainDB.prototype.connectBlock = function connectBlock(block, batch, callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
batch.del('u/t/' + key);
|
batch.del('u/t/' + key);
|
||||||
|
self.coinCache.remove(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (j = 0; j < tx.outputs.length; j++) {
|
for (j = 0; j < tx.outputs.length; j++) {
|
||||||
output = tx.outputs[j];
|
output = tx.outputs[j];
|
||||||
key = hash + '/' + j;
|
key = hash + '/' + j;
|
||||||
|
coin = bcoin.coin(tx, j);
|
||||||
|
|
||||||
if (self.options.indexAddress) {
|
if (self.options.indexAddress) {
|
||||||
address = output.getAddress();
|
address = output.getAddress();
|
||||||
@ -836,7 +837,8 @@ ChainDB.prototype.connectBlock = function connectBlock(block, batch, callback) {
|
|||||||
batch.put('u/a/' + address + '/' + key, DUMMY);
|
batch.put('u/a/' + address + '/' + key, DUMMY);
|
||||||
}
|
}
|
||||||
|
|
||||||
batch.put('u/t/' + key, bcoin.coin(tx, j).toRaw());
|
batch.put('u/t/' + key, coin.toRaw());
|
||||||
|
self.coinCache.set(key, coin);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -898,6 +900,7 @@ ChainDB.prototype.disconnectBlock = function disconnectBlock(block, batch, callb
|
|||||||
}
|
}
|
||||||
|
|
||||||
batch.put('u/t/' + key, input.coin.toRaw());
|
batch.put('u/t/' + key, input.coin.toRaw());
|
||||||
|
self.coinCache.set(key, input.coin);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (j = 0; j < tx.outputs.length; j++) {
|
for (j = 0; j < tx.outputs.length; j++) {
|
||||||
@ -917,6 +920,7 @@ ChainDB.prototype.disconnectBlock = function disconnectBlock(block, batch, callb
|
|||||||
}
|
}
|
||||||
|
|
||||||
batch.del('u/t/' + key);
|
batch.del('u/t/' + key);
|
||||||
|
self.coinCache.remove(key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1113,10 +1117,15 @@ ChainDB.prototype.getCoinsByAddress = function getCoinsByAddress(addresses, call
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
ChainDB.prototype.getCoin = function getCoin(hash, index, callback) {
|
ChainDB.prototype.getCoin = function getCoin(hash, index, callback) {
|
||||||
var key = 'u/t/' + hash + '/' + index;
|
var self = this;
|
||||||
|
var key = hash + '/' + index;
|
||||||
var coin;
|
var coin;
|
||||||
|
|
||||||
this.db.get(key, function(err, data) {
|
coin = this.coinCache.get(key);
|
||||||
|
if (coin)
|
||||||
|
return utils.asyncify(callback)(null, coin);
|
||||||
|
|
||||||
|
this.db.get('u/t/' + key, function(err, data) {
|
||||||
if (err && err.type !== 'NotFoundError')
|
if (err && err.type !== 'NotFoundError')
|
||||||
return callback(err);
|
return callback(err);
|
||||||
|
|
||||||
@ -1131,6 +1140,8 @@ ChainDB.prototype.getCoin = function getCoin(hash, index, callback) {
|
|||||||
return callback(e);
|
return callback(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.coinCache.set(key, coin);
|
||||||
|
|
||||||
return callback(null, coin);
|
return callback(null, coin);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user