前一段时间公司遇到了一个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来进行存储数据,仅仅支持增删改查操作,简单的不能再简单了,今天就进行到这里,明天再来增强。