您的位置:首页 > 数据库 > Redis

C++自制Redis 数据库(十二) 初级存储引擎已经测试完毕

2016-02-21 20:38 561 查看
简单数据库存储引擎基础测试,非压力测试,压力测试结果并不作为初级版本的性能衡量指标。

第一级测试:

1.独立元素测试成功

2.链表元素测试成功

第二级测试开始

1.链表添加元素测试 链表结合字符串 成功 链表结合整数 成功

2.整数类集合元素测试 整数类集合 成功

3.哈希表添加元素测试 整数类哈希表 成功 字符串类哈希表 成功

4.伪哈希表添加元素测试 整数类伪哈希表 成功 字符串类伪哈希表 成功

最基本的数据库存储引擎已经完成,以下是这个基础版本的描述,以及以一些功能描述,以及下一阶段重构后的开发。

基础数据结构:

SDS 字符串 ,Dlist双向链表,伪哈希表,哈希表,整数类集合

初级版本支持:short int32 long string char 等基础数据类型 和 以上数据结构的任意组合

这里我只做现阶段数据库类体系基础介绍

/*参数解释:

@key_name : 键值对的键

@type_data : 键值对的类型

@Data_ID : 数据库ID,默认为0号数据库

@obj : 键值对的值,为void * 类型

@index : 伪哈希表,和整数类集合的参数,有以下的一些情况

创建时:表示整数集的总元素个数,伪哈希表的预创建元素个数,这个版本不支持随意添加个数和类型升级

修改时:直接访问整数类集合的元素下标

@hash_key : 哈希表类以及伪哈希表的参数,表示哈希表内部的键

*/

[c]

class Data_All{

private:

Data_Base Data_A[16]; /*每个服务器有16个数据库实例*/

int key_count;

int server_id;

int thread_pool;

public:

Data_All();

bool Data_All_create(const char *key_name,int type_data,int Data_ID,void *obj,int index);

bool Data_All_add(const char *key_name,int type_data,int Data_ID,void *obj,int index,const char *hash_key);

bool Data_All_del(const char *key_name,int type_data,int Data_ID,void *obj,int index);

bool Data_All_find(const char *key_name,int type_data,int Data_ID,void *obj,int index,void *getbuff,const char *hash_key);

bool Data_All_set(const char *key_name,int type_data,int Data_ID,void *obj,int index,const char *hash_key);

int Data_All_keycount();

};

class Data_Base{

private:

Data_Table Data_b[16]; /*这是一个数据库的实例,具有16张表*/

int mask;

int key_count;

public:

Data_Base();

bool Data_Base_create(const char *key_name,int type_data,void *obj,int elem);

bool Data_Base_del(const char *key_name);

bool Data_Base_add(const char *key_name,int type_data,void *obj,int elem,const char *hash_key);

bool Data_Base_find(const char *key_name,int type_data,void *obj,int elem,void *getbuff,const char *hash_key);

bool Data_Base_set(const char *key_name,int type_data,void *obj,int elem,const char *hash_key);

unsigned int Data_Base_gethash(const void *key);

};

class Data_Table{

private:

mutable std::mutex mutex_;

Key_Val_Node *head;

Key_Val_Node *tail;

int keys_count;

public:

Data_Table();

bool Data_Table_Init();

bool Data_Table_create(unsigned int Hash,const char *key_name,void *obj,int type_data,int elem);

bool Data_Table_add(unsigned int Hash,const char *key_name,void *obj,int type_data,int elem,const char *hash_key);

bool Data_Table_del(unsigned int Hash,const char *key_name,void *obj,int type_data,int elem);

bool Data_Table_find(unsigned int Hash,void *obj,int type_data,unsigned int index,const char *key_name,void *getbuff,const char *hash_key);

bool Data_Table_set(unsigned int Hash,void *obj,int type_data,unsigned int index,const char *key_name,const char *hash_key);

int Data_Table_count();

};

class Key_Val_Node{

private:

void * data;

//std::shared_ptr<voivoicd> data;

int type ;

unsigned int hash;

std::string Key;

unsigned int create_time;

unsigned int cut_time;

int Server_ID ;

int data_type ;

public:

Key_Val_Node * next;

Key_Val_Node * prev;

Key_Val_Node(){}

Key_Val_Node(unsigned int Hash,std::string key_name,void * obj,int type_data,int elem);

~Key_Val_Node(){delete (char*)data;}

bool add_elem(void *obj,int type_data,unsigned int index,const char *key_name,const char *hash_key);

bool del_elem(void *obj,int type_data,unsigned int index,const char * key_name);

bool set_elem(void *obj,int type_data,unsigned int index,const char * key_name,const char *hash_key);

bool find_elem(void *obj,int type_data,unsigned int index,const char * key_name,void *getbuff,const char *hash_key);

bool find_type(int type_obj);

unsigned int gethash_elem();

};

[/c]

查看原文:http://zmrlinux.com/2016/02/21/c%e8%87%aa%e5%88%b6redis-%e6%95%b0%e6%8d%ae%e5%ba%93%ef%bc%88%e5%8d%81%e4%ba%8c%ef%bc%89-%e5%88%9d%e7%ba%a7%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8e%e5%b7%b2%e7%bb%8f%e6%b5%8b%e8%af%95%e5%ae%8c%e6%af%95/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: