No.0 项目起步

前一段时间公司遇到了一个Oracle数据库死锁问题,所以最近稍微熟悉熟悉mysql数据库,感觉纯粹的看书,看博客,不如自己写一个简单的DB程序来体会一下数据库的复杂性,所以,这里写一个系列,来记录自己编写程序的过程。

首先,我们就写一个最简单最简单的db,就仅仅支持最简单的get,put,exist,del这四个操作的内存数据库,然后逐步复杂化,满足我们的最终目的。这里使用我不熟悉的c++语言来挑战一下自己,这也是顺便练习练习自己的c++编程语言了,哈哈。

说干就干,贴出花费大概半小时写的代码.

server.cpp文件的代码如下所示:

//
// Author : xiaomo
// Email  : weiyue888999@126.com
//

#include<map>
#include<iostream>
using namespace std;

class Mydb{
public:
	Mydb(){};
	Mydb(Mydb & mydb) = delete;
	Mydb & operator = (Mydb & mydb) = delete;
	~Mydb(){};
	string * get(const string & key);
	bool exist(const string & key);
	bool put(const string & key,const string & value);
	bool del(const string & key);
private:
	map<string,string> db;
};

string * Mydb::get(const string & key){
	auto it = this->db.find(key);
	if(it != this->db.end()){
		string value = it->second;
		string * ret = new string(value);
		return ret;
	}
	return nullptr;
}

bool Mydb::exist(const string & key){
	auto it = this->db.find(key);
	return it != this->db.end();
}

bool Mydb::put(const string & key,const string & value){
	auto it = this->db.find(key);
	if(it != this->db.end()){
		it->second = value;
		return true;
	}else{
		this->db.insert(pair<string,string>(key,value));
		return true;
	}
}
bool Mydb::del(const string & key){
	auto it  = this->db.find(key);
	if(it != this->db.end()){
		this->db.erase(it);
		return true;
	}
	return false;
}
int main(const int argc,const char * argv[])
{
	Mydb mydb;
	mydb.put(string("name"),string("xiaomo"));

	bool is_exist = mydb.exist(string("name"));
	cout<<is_exist<<endl;

	string * val = mydb.get(string("name"));
	cout<<*val<<endl;

	delete val;

	mydb.del(string("name"));

	cout<<mydb.exist(string("name"))<<endl;

	return 0;
}

使用g++ server.cpp进行编译。
可以看出以上代码真是朴实无华,基本上就是利用c++的map来进行存储数据,仅仅支持增删改查操作,简单的不能再简单了,今天就进行到这里,明天再来增强。

原文地址:https://www.cnblogs.com/weiguangyue/p/14224172.html