zoukankan      html  css  js  c++  java
  • 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来进行存储数据,仅仅支持增删改查操作,简单的不能再简单了,今天就进行到这里,明天再来增强。

  • 相关阅读:
    unix/linux中图形界面那些事
    vmware虚拟机工具vmware tools介绍及安装排错
    debian软件源source.list文件格式说明
    Python 基础学习 总结篇
    Git 学习(八)其他
    Git 学习(七)标签管理
    Git 学习(六)分支管理
    Git 学习(五)远程仓库
    Git 学习(四)操作修改和版本穿梭
    页面元素定位 XPath 简介
  • 原文地址:https://www.cnblogs.com/weiguangyue/p/14224172.html
Copyright © 2011-2022 走看看