There was a previous assumption that blockindex would be quite small. With addressindex and spentindex enabled the blockindex is much larger and the amount of cache allocated for it should also increase. Furthermore, enabling compression should decrease the amount of disk space required and less data to write/read. The default leveldb max_open_files is set to 1000, for the blockindex the default is set to 1000 with compression. The 64 value that is current is kept for the utxo database and does not enable compression. Two additional options are added here to be able to configure the values for leveldb and the block index: - `-dbmaxopenfiles` A number of files for leveldb to keep open - `-dbcompression` Boolean 0 or 1 to enable snappy leveldb compression
87 lines
3.4 KiB
C++
87 lines
3.4 KiB
C++
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
|
// Copyright (c) 2009-2015 The Bitcoin Core developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#ifndef BITCOIN_TXDB_H
|
|
#define BITCOIN_TXDB_H
|
|
|
|
#include "coins.h"
|
|
#include "dbwrapper.h"
|
|
|
|
#include <map>
|
|
#include <string>
|
|
#include <utility>
|
|
#include <vector>
|
|
|
|
class CBlockFileInfo;
|
|
class CBlockIndex;
|
|
struct CDiskTxPos;
|
|
struct CAddressUnspentKey;
|
|
struct CAddressUnspentValue;
|
|
struct CAddressIndexKey;
|
|
struct CAddressIndexIteratorKey;
|
|
struct CAddressIndexIteratorHeightKey;
|
|
struct CTimestampIndexKey;
|
|
struct CTimestampIndexIteratorKey;
|
|
struct CSpentIndexKey;
|
|
struct CSpentIndexValue;
|
|
class uint256;
|
|
|
|
//! -dbcache default (MiB)
|
|
static const int64_t nDefaultDbCache = 100;
|
|
//! max. -dbcache in (MiB)
|
|
static const int64_t nMaxDbCache = sizeof(void*) > 4 ? 16384 : 1024;
|
|
//! min. -dbcache in (MiB)
|
|
static const int64_t nMinDbCache = 4;
|
|
|
|
/** CCoinsView backed by the coin database (chainstate/) */
|
|
class CCoinsViewDB : public CCoinsView
|
|
{
|
|
protected:
|
|
CDBWrapper db;
|
|
public:
|
|
CCoinsViewDB(size_t nCacheSize, bool fMemory = false, bool fWipe = false);
|
|
|
|
bool GetCoins(const uint256 &txid, CCoins &coins) const;
|
|
bool HaveCoins(const uint256 &txid) const;
|
|
uint256 GetBestBlock() const;
|
|
bool BatchWrite(CCoinsMap &mapCoins, const uint256 &hashBlock);
|
|
bool GetStats(CCoinsStats &stats) const;
|
|
};
|
|
|
|
/** Access to the block database (blocks/index/) */
|
|
class CBlockTreeDB : public CDBWrapper
|
|
{
|
|
public:
|
|
CBlockTreeDB(size_t nCacheSize, bool fMemory = false, bool fWipe = false, bool compression = true, int maxOpenFiles = 1000);
|
|
private:
|
|
CBlockTreeDB(const CBlockTreeDB&);
|
|
void operator=(const CBlockTreeDB&);
|
|
public:
|
|
bool WriteBatchSync(const std::vector<std::pair<int, const CBlockFileInfo*> >& fileInfo, int nLastFile, const std::vector<const CBlockIndex*>& blockinfo);
|
|
bool ReadBlockFileInfo(int nFile, CBlockFileInfo &fileinfo);
|
|
bool ReadLastBlockFile(int &nFile);
|
|
bool WriteReindexing(bool fReindex);
|
|
bool ReadReindexing(bool &fReindex);
|
|
bool ReadTxIndex(const uint256 &txid, CDiskTxPos &pos);
|
|
bool WriteTxIndex(const std::vector<std::pair<uint256, CDiskTxPos> > &list);
|
|
bool ReadSpentIndex(CSpentIndexKey &key, CSpentIndexValue &value);
|
|
bool UpdateSpentIndex(const std::vector<std::pair<CSpentIndexKey, CSpentIndexValue> >&vect);
|
|
bool UpdateAddressUnspentIndex(const std::vector<std::pair<CAddressUnspentKey, CAddressUnspentValue > >&vect);
|
|
bool ReadAddressUnspentIndex(uint160 addressHash, int type,
|
|
std::vector<std::pair<CAddressUnspentKey, CAddressUnspentValue> > &vect);
|
|
bool WriteAddressIndex(const std::vector<std::pair<CAddressIndexKey, CAmount> > &vect);
|
|
bool EraseAddressIndex(const std::vector<std::pair<CAddressIndexKey, CAmount> > &vect);
|
|
bool ReadAddressIndex(uint160 addressHash, int type,
|
|
std::vector<std::pair<CAddressIndexKey, CAmount> > &addressIndex,
|
|
int start = 0, int end = 0);
|
|
bool WriteTimestampIndex(const CTimestampIndexKey ×tampIndex);
|
|
bool ReadTimestampIndex(const unsigned int &high, const unsigned int &low, std::vector<uint256> &vect);
|
|
bool WriteFlag(const std::string &name, bool fValue);
|
|
bool ReadFlag(const std::string &name, bool &fValue);
|
|
bool LoadBlockIndexGuts();
|
|
};
|
|
|
|
#endif // BITCOIN_TXDB_H
|