網遊記憶體資料庫的設計 2

2021-09-06 06:46:16 字數 2696 閱讀 9355

續第一篇,前兩天對核心儲存做了些修改,以前只打算與關聯式資料庫的行與表做對應,value型別只能使array或list,

現在把7種基本型別也加入到value支援的型別中,以使得資料庫更通用.

當然,這都不是本文的核心,本篇主要介紹乙個測試前端,以及測試的遠端呼叫協議.

先貼出測試前端的伺服器**:

#include "

netservice.h

"#include

"msg_loop.h

"#include

"datasocket.h

"#include

"systime.h

"#include

"db_protocal.h

"atomic_32_t wpacket_count = 0

;atomic_32_t rpacket_count = 0

;atomic_32_t buf_count = 0

;global_table_t gtb;

void

server_process_packet(datasocket_t s,rpacket_t r)

wpacket_t ret = p->execute(gtb,r,coro_id);

if(null !=ret)

data_send(s,ret);

destroy_protocal(&p);

}void

process_new_connection(datasocket_t s)

void

process_connection_disconnect(datasocket_t s,int32_t reason)

void

process_send_block(datasocket_t s)

const

char *ip;

uint32_t port;

int main(int argc,char **argv)

net_add_listener(n,ip,port);

msg_loop_t m =create_msg_loop(server_process_packet,process_new_connection,process_connection_disconnect,process_send_block);

while(1

)

return0;

}

目前只新增了三個協議,分別是獲取:cache_get;新增/修改:cache_set;刪除:cache_del.

伺服器處理協議並將結果返回給客戶端.

然後是測試客戶端:

#include "

db_protocal.h

"#include

"dbtype.h

"#include

#include ""

#include

"systime.h

"#include

"kendynet.h

"#include

"connector.h

"#include

"connection.h

"#include

"common_define.h

"#include

"netservice.h

"#include

"msg_loop.h

"#include

"co_sche.h

"sche_t g_sche =null;

uint32_t call_count = 0

;atomic_32_t wpacket_count = 0

;atomic_32_t rpacket_count = 0

;atomic_32_t buf_count = 0

;datasocket_t db_s;

int8_t test_select(

const

char *key,int32_t i)

void *test_coro_fun2(void *arg)

}void

server_process_packet(datasocket_t s,rpacket_t r)

void

process_new_connection(datasocket_t s)

}void

process_connection_disconnect(datasocket_t s,int32_t reason)

void

process_send_block(datasocket_t s)

int main(int argc,char **argv)

if(g_sche)

sche_schedule(g_sche);

}return0;

}

操作介面使用使用者級執行緒實現,以支援同步呼叫介面,使用者級執行緒發出請求後就阻塞自己,直到結果返回時才被喚醒:

關鍵部分在test_select,把自己的coro位址作為id打包到協議中,發往伺服器,然後呼叫coro_block阻塞。伺服器返回的資料報

中也帶了對應的coro_id,以通知客戶端的排程系統該喚醒哪個coro.coro被喚醒後從結果包中讀取操作結果和資料,返回給上層呼叫者.

如果還是不夠,可以通過表空間的劃分,啟動多個記憶體資料庫程序來服務請求。

h2記憶體資料庫和mysql資料庫的區別

h2不支援以下配置 engine innodb default charset utf8 comment 使用者表 h2記憶體資料庫 drop table if exists q user create table q user id int 11 not null auto increment c...

如何設計資料庫 2

資料規範化 僅有好的rdbms並不足以避免資料冗餘,必須在資料庫的設計中建立好的表結構。表設計後,很可能結構不合理,出現資料重複儲存,簡稱資料的冗餘,這對資料的增刪改查帶來很多後患,所以我們需要審核是否合理,就像施工圖設計後,還需要其他機構進行審核圖紙是否設計合理一樣。如何審核呢?需要一些有關資料庫...

資料庫課程設計2

個人認為大家對設計資料庫等思維上的問題都不存在問題,故將重點放在 撰寫,debug,環境配置上。前端使用html css js php 後端php mysql 工具使用 phpstorm,mysql bench,edge瀏覽器,firefox瀏覽器 學習html,php的基本語法等 詳盡的思考系統邊...