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

[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]

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值