当前位置: 首页 > 操作系统&&数据库, 数据库 > 正文

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

简单数据库存储引擎基础测试,非压力测试,压力测试结果并不作为初级版本的性能衡量指标。

第一级测试:

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 : 哈希表类以及伪哈希表的参数,表示哈希表内部的键
*/


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();

};

本文固定链接: 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/ | Kernel & Me

该日志由 root 于2016年02月21日发表在 操作系统&&数据库, 数据库 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: C++自制Redis 数据库(十二) 初级存储引擎已经测试完毕 | Kernel & Me