一和二
如何做一个国产数据库一
如何做一个国产数据库二
1、数据结构重新定义
再次重新定义数据结构
typedef struct sdata
{uint32_t index;char vardata[128];
}sdata;typedef struct sdata_index
{uint32_t index;uint32_t offset;
}sdata_index;//增加的数据库上下文环境结构体
typedef struct db_context
{char v_tablename[256];sdata_index *v_index = NULL;uint32_t v_tindex = 0;uint32_t v_nindex = 0;
}db_context;
2、增删改查
此次增加了一个数据库的db_context 结构体,包含文件名称,索引内存保存,两个index的内存保存,在增加四个api函数,以前的函数变成工具,定义tool.h 和tool.cpp.
增加api.h 和api.cpp,增加四个函数声明:
int Insert(void *data,db_context *v_context);
int Delete(void *key, db_context *v_context);
int Update(void *key, void *data, db_context *v_context);
void *Select(void *key, db_context *v_context);
今天实现Insert 函数,暂不测试,因为单元测试需要单独一个教程才行
xx xx xx xx | xx xx xx xx | xx xx xx xx – xx xx xx xx
4字节最大索引| 4字节当前索引 4bytes index 4bytes offset
data
…
*/
//2M的空间做索引
//uint32_t indext;//索引总长度
//uint32_t indexn;//索引长度,内容为x个索引 indexn <= indext
2.1 实现索引读的函数
#define INDEX_BYTES 2 * 1024 * 1024
//int index_num = INDEX_BYTES / sizeof(int) * 2; //max index number is 162144sdata_index* bfile_read_index(const char * file, uint32_t &indext,uint32_t &indexn)
{size_t nr;indext = 0;indexn = 0;FILE * fp = fopen(file, "rb");if (fp == NULL)return NULL;//读取最大的index值容量nr = fread(&indext, sizeof(uint32_t), 1, fp);if (nr == 0){fclose(fp);return NULL;}//读取存储的索引值nr = fread(&indexn, sizeof(uint32_t), 1, fp);if (nr == 0){fclose(fp);return NULL;}//4字节索引号 4字节偏移地址uint8_t * index = (uint8_t*)malloc(indexn * sizeof(uint32_t) * 2);nr = fread(index, indexn * sizeof(uint32_t) * 2, 1, fp);if (nr == 0){fclose(fp);free(index);return NULL;}return (sdata_index*)index;
}
2.2 实现初始化数据库的函数
该函数并不完整,等待完善,有很多需要注意的地方
int Initialize(const char *tname, db_context *context)
{if (context == NULL)return -1;strcpy(context->v_tablename,tname);if (context->v_index == NULL)context->v_index = bfile_read_index(tname, /*filename*/context->v_tindex, context->v_nindex);if (context->v_index == NULL)return -1;return 0;
}
2.3实现插入
整个增加的流程为:
#mermaid-svg-LnXl96nwWtNZ1uYc .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-LnXl96nwWtNZ1uYc .label text{fill:#333}#mermaid-svg-LnXl96nwWtNZ1uYc .node rect,#mermaid-svg-LnXl96nwWtNZ1uYc .node circle,#mermaid-svg-LnXl96nwWtNZ1uYc .node ellipse,#mermaid-svg-LnXl96nwWtNZ1uYc .node polygon,#mermaid-svg-LnXl96nwWtNZ1uYc .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-LnXl96nwWtNZ1uYc .node .label{text-align:center;fill:#333}#mermaid-svg-LnXl96nwWtNZ1uYc .node.clickable{cursor:pointer}#mermaid-svg-LnXl96nwWtNZ1uYc .arrowheadPath{fill:#333}#mermaid-svg-LnXl96nwWtNZ1uYc .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-LnXl96nwWtNZ1uYc .flowchart-link{stroke:#333;fill:none}#mermaid-svg-LnXl96nwWtNZ1uYc .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-LnXl96nwWtNZ1uYc .edgeLabel rect{opacity:0.9}#mermaid-svg-LnXl96nwWtNZ1uYc .edgeLabel span{color:#333}#mermaid-svg-LnXl96nwWtNZ1uYc .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-LnXl96nwWtNZ1uYc .cluster text{fill:#333}#mermaid-svg-LnXl96nwWtNZ1uYc div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-LnXl96nwWtNZ1uYc .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-LnXl96nwWtNZ1uYc text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-LnXl96nwWtNZ1uYc .actor-line{stroke:grey}#mermaid-svg-LnXl96nwWtNZ1uYc .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-LnXl96nwWtNZ1uYc .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-LnXl96nwWtNZ1uYc #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-LnXl96nwWtNZ1uYc .sequenceNumber{fill:#fff}#mermaid-svg-LnXl96nwWtNZ1uYc #sequencenumber{fill:#333}#mermaid-svg-LnXl96nwWtNZ1uYc #crosshead path{fill:#333;stroke:#333}#mermaid-svg-LnXl96nwWtNZ1uYc .messageText{fill:#333;stroke:#333}#mermaid-svg-LnXl96nwWtNZ1uYc .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-LnXl96nwWtNZ1uYc .labelText,#mermaid-svg-LnXl96nwWtNZ1uYc .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-LnXl96nwWtNZ1uYc .loopText,#mermaid-svg-LnXl96nwWtNZ1uYc .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-LnXl96nwWtNZ1uYc .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-LnXl96nwWtNZ1uYc .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-LnXl96nwWtNZ1uYc .noteText,#mermaid-svg-LnXl96nwWtNZ1uYc .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-LnXl96nwWtNZ1uYc .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-LnXl96nwWtNZ1uYc .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-LnXl96nwWtNZ1uYc .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-LnXl96nwWtNZ1uYc .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LnXl96nwWtNZ1uYc .section{stroke:none;opacity:0.2}#mermaid-svg-LnXl96nwWtNZ1uYc .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-LnXl96nwWtNZ1uYc .section2{fill:#fff400}#mermaid-svg-LnXl96nwWtNZ1uYc .section1,#mermaid-svg-LnXl96nwWtNZ1uYc .section3{fill:#fff;opacity:0.2}#mermaid-svg-LnXl96nwWtNZ1uYc .sectionTitle0{fill:#333}#mermaid-svg-LnXl96nwWtNZ1uYc .sectionTitle1{fill:#333}#mermaid-svg-LnXl96nwWtNZ1uYc .sectionTitle2{fill:#333}#mermaid-svg-LnXl96nwWtNZ1uYc .sectionTitle3{fill:#333}#mermaid-svg-LnXl96nwWtNZ1uYc .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LnXl96nwWtNZ1uYc .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-LnXl96nwWtNZ1uYc .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LnXl96nwWtNZ1uYc .grid path{stroke-width:0}#mermaid-svg-LnXl96nwWtNZ1uYc .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-LnXl96nwWtNZ1uYc .task{stroke-width:2}#mermaid-svg-LnXl96nwWtNZ1uYc .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LnXl96nwWtNZ1uYc .taskText:not([font-size]){font-size:11px}#mermaid-svg-LnXl96nwWtNZ1uYc .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LnXl96nwWtNZ1uYc .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-LnXl96nwWtNZ1uYc .task.clickable{cursor:pointer}#mermaid-svg-LnXl96nwWtNZ1uYc .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-LnXl96nwWtNZ1uYc .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-LnXl96nwWtNZ1uYc .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-LnXl96nwWtNZ1uYc .taskText0,#mermaid-svg-LnXl96nwWtNZ1uYc .taskText1,#mermaid-svg-LnXl96nwWtNZ1uYc .taskText2,#mermaid-svg-LnXl96nwWtNZ1uYc .taskText3{fill:#fff}#mermaid-svg-LnXl96nwWtNZ1uYc .task0,#mermaid-svg-LnXl96nwWtNZ1uYc .task1,#mermaid-svg-LnXl96nwWtNZ1uYc .task2,#mermaid-svg-LnXl96nwWtNZ1uYc .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-LnXl96nwWtNZ1uYc .taskTextOutside0,#mermaid-svg-LnXl96nwWtNZ1uYc .taskTextOutside2{fill:#000}#mermaid-svg-LnXl96nwWtNZ1uYc .taskTextOutside1,#mermaid-svg-LnXl96nwWtNZ1uYc .taskTextOutside3{fill:#000}#mermaid-svg-LnXl96nwWtNZ1uYc .active0,#mermaid-svg-LnXl96nwWtNZ1uYc .active1,#mermaid-svg-LnXl96nwWtNZ1uYc .active2,#mermaid-svg-LnXl96nwWtNZ1uYc .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-LnXl96nwWtNZ1uYc .activeText0,#mermaid-svg-LnXl96nwWtNZ1uYc .activeText1,#mermaid-svg-LnXl96nwWtNZ1uYc .activeText2,#mermaid-svg-LnXl96nwWtNZ1uYc .activeText3{fill:#000 !important}#mermaid-svg-LnXl96nwWtNZ1uYc .done0,#mermaid-svg-LnXl96nwWtNZ1uYc .done1,#mermaid-svg-LnXl96nwWtNZ1uYc .done2,#mermaid-svg-LnXl96nwWtNZ1uYc .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-LnXl96nwWtNZ1uYc .doneText0,#mermaid-svg-LnXl96nwWtNZ1uYc .doneText1,#mermaid-svg-LnXl96nwWtNZ1uYc .doneText2,#mermaid-svg-LnXl96nwWtNZ1uYc .doneText3{fill:#000 !important}#mermaid-svg-LnXl96nwWtNZ1uYc .crit0,#mermaid-svg-LnXl96nwWtNZ1uYc .crit1,#mermaid-svg-LnXl96nwWtNZ1uYc .crit2,#mermaid-svg-LnXl96nwWtNZ1uYc .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-LnXl96nwWtNZ1uYc .activeCrit0,#mermaid-svg-LnXl96nwWtNZ1uYc .activeCrit1,#mermaid-svg-LnXl96nwWtNZ1uYc .activeCrit2,#mermaid-svg-LnXl96nwWtNZ1uYc .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-LnXl96nwWtNZ1uYc .doneCrit0,#mermaid-svg-LnXl96nwWtNZ1uYc .doneCrit1,#mermaid-svg-LnXl96nwWtNZ1uYc .doneCrit2,#mermaid-svg-LnXl96nwWtNZ1uYc .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-LnXl96nwWtNZ1uYc .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-LnXl96nwWtNZ1uYc .milestoneText{font-style:italic}#mermaid-svg-LnXl96nwWtNZ1uYc .doneCritText0,#mermaid-svg-LnXl96nwWtNZ1uYc .doneCritText1,#mermaid-svg-LnXl96nwWtNZ1uYc .doneCritText2,#mermaid-svg-LnXl96nwWtNZ1uYc .doneCritText3{fill:#000 !important}#mermaid-svg-LnXl96nwWtNZ1uYc .activeCritText0,#mermaid-svg-LnXl96nwWtNZ1uYc .activeCritText1,#mermaid-svg-LnXl96nwWtNZ1uYc .activeCritText2,#mermaid-svg-LnXl96nwWtNZ1uYc .activeCritText3{fill:#000 !important}#mermaid-svg-LnXl96nwWtNZ1uYc .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LnXl96nwWtNZ1uYc g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-LnXl96nwWtNZ1uYc g.classGroup text .title{font-weight:bolder}#mermaid-svg-LnXl96nwWtNZ1uYc g.clickable{cursor:pointer}#mermaid-svg-LnXl96nwWtNZ1uYc g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-LnXl96nwWtNZ1uYc g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-LnXl96nwWtNZ1uYc .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-LnXl96nwWtNZ1uYc .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-LnXl96nwWtNZ1uYc .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-LnXl96nwWtNZ1uYc .dashed-line{stroke-dasharray:3}#mermaid-svg-LnXl96nwWtNZ1uYc #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-LnXl96nwWtNZ1uYc #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-LnXl96nwWtNZ1uYc #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-LnXl96nwWtNZ1uYc #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-LnXl96nwWtNZ1uYc #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-LnXl96nwWtNZ1uYc #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-LnXl96nwWtNZ1uYc #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-LnXl96nwWtNZ1uYc #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-LnXl96nwWtNZ1uYc .commit-id,#mermaid-svg-LnXl96nwWtNZ1uYc .commit-msg,#mermaid-svg-LnXl96nwWtNZ1uYc .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LnXl96nwWtNZ1uYc .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LnXl96nwWtNZ1uYc .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LnXl96nwWtNZ1uYc g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LnXl96nwWtNZ1uYc g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-LnXl96nwWtNZ1uYc g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-LnXl96nwWtNZ1uYc g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-LnXl96nwWtNZ1uYc g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-LnXl96nwWtNZ1uYc g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-LnXl96nwWtNZ1uYc .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-LnXl96nwWtNZ1uYc .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-LnXl96nwWtNZ1uYc .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-LnXl96nwWtNZ1uYc .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-LnXl96nwWtNZ1uYc .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-LnXl96nwWtNZ1uYc .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-LnXl96nwWtNZ1uYc .edgeLabel text{fill:#333}#mermaid-svg-LnXl96nwWtNZ1uYc .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-LnXl96nwWtNZ1uYc .node circle.state-start{fill:black;stroke:black}#mermaid-svg-LnXl96nwWtNZ1uYc .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-LnXl96nwWtNZ1uYc #statediagram-barbEnd{fill:#9370db}#mermaid-svg-LnXl96nwWtNZ1uYc .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-LnXl96nwWtNZ1uYc .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-LnXl96nwWtNZ1uYc .statediagram-state .divider{stroke:#9370db}#mermaid-svg-LnXl96nwWtNZ1uYc .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-LnXl96nwWtNZ1uYc .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-LnXl96nwWtNZ1uYc .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-LnXl96nwWtNZ1uYc .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-LnXl96nwWtNZ1uYc .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-LnXl96nwWtNZ1uYc .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-LnXl96nwWtNZ1uYc .note-edge{stroke-dasharray:5}#mermaid-svg-LnXl96nwWtNZ1uYc .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-LnXl96nwWtNZ1uYc .error-icon{fill:#522}#mermaid-svg-LnXl96nwWtNZ1uYc .error-text{fill:#522;stroke:#522}#mermaid-svg-LnXl96nwWtNZ1uYc .edge-thickness-normal{stroke-width:2px}#mermaid-svg-LnXl96nwWtNZ1uYc .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-LnXl96nwWtNZ1uYc .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-LnXl96nwWtNZ1uYc .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-LnXl96nwWtNZ1uYc .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-LnXl96nwWtNZ1uYc .marker{fill:#333}#mermaid-svg-LnXl96nwWtNZ1uYc .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-LnXl96nwWtNZ1uYc {color: rgba(0, 0, 0, 0.75);font: ;}
打开数据库
初始化读取
读取上次索引信息
写入当次索引+偏移
写入索引量last+1
int Insert(void *data, db_context *context)
{if (context->v_nindex < context->v_tindex){FILE * fp = fopen(context->v_tablename, "wb");if (fp == NULL)return -1;fpos_t pos = 4 + 4 + (context->v_nindex) * (8);fsetpos(fp, &pos);//int last_index = context->v_nindex - 1;uint32_t indexlast = context->v_index[context->v_nindex - 1].index ;uint32_t indexinsert = indexlast + 1;size_t n = fwrite(&indexinsert, sizeof(uint32_t), 1, fp);if (n != sizeof(uint32_t)){fclose(fp);return -1;}sdata *pdata = (sdata*)data;size_t vsize = sizeof(pdata->vardata);uint32_t datasize = vsize * indexlast;fpos_t offset = 4 + 4 + INDEX_BYTES + datasize;n = fwrite(&offset, sizeof(uint32_t), 1, fp);if (n != sizeof(uint32_t)){fclose(fp);return -1;}fsetpos(fp, &offset);n = fwrite(data, vsize, 1, fp);if (n != vsize){fclose(fp);return -1;}fpos_t index = sizeof(uint32_t);fsetpos(fp, &index);uint32_t newnindex = context->v_nindex + 1;n = fwrite(&newnindex, sizeof(uint32_t), 1, fp);if (n != sizeof(int)){fclose(fp);return -1;}fclose(fp);return 0;}return -1;
}int Delete(void *key, db_context *v_context)
{}
int Update(void *key, void *data, db_context *v_context)
{}
void *Select(void *key, db_context *v_context)
{}
上面说了,先实现增加函数,其他先不实现,也不测试,单元测试需要一个严格的定义和测试用例,此次先为增加流程的初步代码实现,有待完善。
如何做一个国产数据库(三)相关推荐
- 如何做一个国产数据库(七) 网络传输 java做订阅客户端
如何做一个国产数据库一 如何做一个国产数据库二 如何做一个国产数据库三 如何做一个国产数据库四 如何做一个国产数据库五 如何做一个国产数据库六 server端协议定义 再次强调一下我们的protoco ...
- 如何做一个国产数据库(六) 网络传输 nodejs做测试客户端
如何做一个国产数据库一 如何做一个国产数据库二 如何做一个国产数据库三 如何做一个国产数据库四 如何做一个国产数据库五 网络实战服务器 我们再四中说过使用tcp进行协议的链接,对我们所定义的协议如果有 ...
- 如何做一个国产数据库(二)
如果做一个国产数据库一链接 承接上文,继续 1.重新定义数据结构 typedef struct sdata {uint32_t index;char vardata[128]; }sdata;type ...
- 如何做一个国产数据库(四)
网络 这次要用到网络了,存储的时候我们都使用网络来输入输出,当然,像本机是可以使用进程间通信的,不过为了简单,我们此次都使用tcp协议. 协议 此次使用libuv来做网络的传输,我们首先定一个协议,做 ...
- 如何做一个国产数据库系统(一)
做国产数据库之二 做一个国产数据库 做一个数据库系统真的是要懂的是基础,各种基础,网络,文件系统,操作系统,性能,测试,各方面都要懂 使用基本方法 索引文件+数据文件+ B+ 树 ,hash空间 如图 ...
- 如何用Excel做一个战斗模拟器(三)战斗过程模拟
如何用Excel做一个战斗模拟器(一)升级经验表 如何用Excel做一个战斗模拟器(二)属性表 目录索引 定义战斗子过程 定位战斗双方基础属性 利用基础属性与战斗公式进行计算 战斗过程的运算与输出 判 ...
- 如何做一个mysql数据库_如何创建一个简单的mysql数据库
这篇文章主要介绍了操作MySQL日志的一些方法,对日志的删除操作做了重点讲解,需要的朋友可以参考下. 一.创建数据库 注:已经安装好mysql. windows下运行cmd进入命令窗口,本人用的是wi ...
- 做一个回填数据库的报表
BI 软件市场越来越热闹,但由此也给软件用户带来了"选择恐惧症",在貌似功能类似的情况下,用户会转而关注到底哪款软件更加炫酷.便捷.易上手.但事实上,仍旧有不少实用性的功能是 BI ...
- 2020年11月国产数据库排行:GaussDB砥砺前行成第八,EsgynDB 4.2亿战绩晋级20强!
编辑说明:国产数据库流行度排行榜,是墨天轮网站根据数据库的受欢迎程度对国产数据库进行排名,排行榜每月更新. 转眼间11月来了,2020年也只剩下1个月左右了,墨天轮2020年11月国产数据库排行榜新鲜 ...
最新文章
- 库克喜提 8 亿年终奖,2020 年整体薪酬增长 28%
- app专项测试(稳定性测试、安全性测试)
- python100以内孪生素数_python用递归筛选法求N以内的孪生质数(孪生素数)
- java retry 实现,java-retry实现
- Html5 Egret游戏开发 成语大挑战(五)界面切换和数据处理
- eclipse 环境安装
- kindle文件转PDF文件
- 字道-最美中国字硬笔书法教学|培养孩子正确的执笔写字姿势有多重要?看完你就明白了!
- web test performance tools / linux performance tools / windows performance tools
- matlab:matlab神经网络工具的使用
- tp6 防止XSS攻击之表单提交安全校验
- 2021年华为总监知乎1867赞的Java面试题全集解析助我修行,不吃透感觉都对不起他(上)
- HYBBS2.3轻论坛M-TOUCH模板源码
- 数据结构之中缀表达式计算
- day19TreeSet类
- 人工神经元的数学模型,神经元模型图片
- psim什么版本能和matlab联合仿真,psim与simulink联合仿真步骤
- 在电脑上弹钢琴是什么体验?
- phpwind index.php?m=designc=api,phpwind v9存在命令执行漏洞(登陆后台)
- 借助国内ChatGPT平替+MindShow,飞速制作PPT
热门文章
- [2014]Hiring Report of IT Company
- 数据结构与算法 相关经典书籍推荐
- 苹果今年秋季或发布史上最多新品
- 判4年!旷视科技司机敲诈董事长300万元未遂
- 国产性能车天花板?145万买极星1,认真的么?
- 农夫山泉终于“玩砸了”
- 亿元大奖后抑郁被网友质疑卖惨 信小呆:不想再被打扰
- 外媒:特斯拉申请新商标 寻求进入餐饮业
- RedmiK40系列首销5分钟破30万台 旗舰焊门员实至名归
- 运营九年,这款音乐手游宣布停服!将从应用商店下架...