續第一篇,前兩天對核心儲存做了些修改,以前只打算與關聯式資料庫的行與表做對應,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的基本語法等 詳盡的思考系統邊...