gStore/KVstore/ISArray/ISArray.h

66 lines
1.8 KiB
C++

/*=======================================================================
* File name: ISArray.h
* Author: Zongyue Qin
* Mail: qinzongyue@pku.edu.cn
* Last Modified: 2018-02-09
* Description:
* a Key-Value Index for ID-Value pair in form of Array
* =======================================================================*/
#include "ISEntry.h"
#include "ISBlockManager.h"
using namespace std;
#define ISMAXKEYNUM 1 << 30
#define ISMIN(a, b) a < b ? a : b
class ISArray
{
private:
// stores at most 1 billion keys
static const unsigned int MAX_KEY_NUM = 300000000;
static const unsigned int SET_KEY_NUM = 10 * 1000 * 1000; // minimum initial keys num, same as RDFParser::TRIPLE_NUM_PER_GROUP
static const unsigned int SET_KEY_INC = SET_KEY_NUM; // minimum keys num inc
static const unsigned int SEG_LEN = 1 << 8;
unsigned long long MAX_CACHE_SIZE;
private:
ISEntry* array;
ISEntry *cache_head;
int cache_tail_id;
FILE* ISfile; // file that records index-store
string ISfile_name;
string filename;
string dir_path;
ISBlockManager *BM;
unsigned CurEntryNum; // how many entries are available
unsigned CurKeyNum; // how many keys are stored
bool CurEntryNumChange;
//Cache
unsigned CurCacheSize;
//map <unsigned, long> index_time_map;
//multimap <long, unsigned> time_index_map;
bool AddInCache(unsigned _key, char *_str, unsigned _len);
bool SwapOut();
bool UpdateTime(unsigned _key);
void RemoveFromLRUQueue(unsigned _key);
bool PreLoad();
mutex AccessLock;
public:
ISArray();
ISArray(string _dir_path, string _filename, string mode, unsigned long long buffer_size, unsigned _key_num = 0);
~ISArray();
bool search(unsigned _key, char *& _str, unsigned& _len);
bool modify(unsigned _key, char *_str, unsigned _len);
bool remove(unsigned _key);
bool insert(unsigned _key, char *_str, unsigned _len);
bool save();
};