外存高性能 NoSQL 數(shù)據(jù)庫
1.什么是外存
Exist 外存本質(zhì)上是一個(gè)內(nèi)存級(jí)別的nosql。 它提出了“面向變量”的數(shù)據(jù)訪問思想,讓用戶只見變量,不見接口,省去了繁瑣的接口調(diào)用。
以此實(shí)現(xiàn)了邏輯與數(shù)據(jù)分離的效果,一份單結(jié)點(diǎn)代碼自動(dòng)達(dá)到分布式效果。
目前提供了int8、uint8、uint64、float、double等基礎(chǔ)類型變量的操作,后續(xù)將實(shí)現(xiàn)map vector類型變量操作。
2.應(yīng)用場(chǎng)景對(duì)比
來看看面向變量的接口方式比傳統(tǒng)數(shù)據(jù)接口方式要方便多少
場(chǎng)景1:假設(shè)服務(wù)上有3個(gè)邏輯:用戶登錄時(shí),用戶發(fā)表文章,用戶發(fā)表評(píng)論時(shí),要提升用戶等級(jí) 。
傳統(tǒng)數(shù)據(jù)庫接口方式
申明數(shù)據(jù)庫連接 db;
db.connect();
OnLogin()
{
申明變量 level
get(表名,"level", level);
level++;
set(表名,"level", level);
}
OnSend()
{
申明變量 level
get(表名,"level", level);
level++
set(表名,"level", level);
}
OnReply()
{
申明變量 level
get(表名,"level", level);
level++
set(表名,"level", level);
}
面向變量的訪問方式
Exist::int32 m_var("level");//申明變量
OnLogin()
{
var++;//數(shù)據(jù)已經(jīng)在外存服務(wù)器上修改,下次訪問將在新值基礎(chǔ)上
}
OnSend()
{
var++;//數(shù)據(jù)已經(jīng)在外存服務(wù)器上修改,下次訪問將在新值基礎(chǔ)上
}
OnReply()
{
var++;//數(shù)據(jù)已經(jīng)在外存服務(wù)器上修改,下次訪問將在新值基礎(chǔ)上
}
就這么簡(jiǎn)單,用戶直接看到一個(gè)個(gè)的變量,就像操作內(nèi)存上的變量一樣操作數(shù)據(jù),根本不需要任何接口,外存由此得名
場(chǎng)景2:100萬用戶同時(shí)在線:用戶A要查詢用戶B的資料
傳統(tǒng)接口方式
m_otherNode;//其它結(jié)點(diǎn)/中轉(zhuǎn)定位服務(wù)
std::map<...> m_userList;//已經(jīng)登錄當(dāng)前結(jié)點(diǎn)的用戶的列表
OnFindUser( char *username )
{
map::iterater it = m_userList.find(username);
if ( it == m_userList.end() )//用戶未必再當(dāng)前結(jié)點(diǎn)登錄,
{
m_otherNode.Send("查詢用戶數(shù)據(jù)");//到其它結(jié)點(diǎn),或其它定位服務(wù)中專查詢
m_otherNode.Recv();
if (回應(yīng)用戶不存在)
{
回應(yīng)用戶不存在;
return;
}
}
回應(yīng)用戶信息
return;
};
面向變量接口方式
Exist::map<...> m_userList;//已經(jīng)登錄的用戶的列表,用戶信息在外存上
OnFindUser( char *username )
{
map::iterater it = m_userList.find(username);
if ( it == m_userList.end() )//用戶要么在外存中,要么不存在
{
回應(yīng),用戶不存在;
return;
}
回應(yīng)用戶信息;
return;
};
省去了到其它結(jié)點(diǎn)查詢的代碼,省去了記錄相關(guān)服務(wù)的連接對(duì)象,一套代碼同時(shí)滿足單結(jié)點(diǎn)與分布式需求,從此沒有分布式一說
map與vector尚未實(shí)現(xiàn),將在后續(xù)版本中實(shí)現(xiàn),請(qǐng)期待
支持平臺(tái):win linux
性能:?jiǎn)蝹€(gè)client測(cè)試,win 5000~6000tps,linux 最高達(dá)到3.7萬tps
支持編譯:VC++6.0和VS2010,VS2010以下用戶可以從 VC6.0工程轉(zhuǎn)換,linux直接make
歡迎各路朋友一起體驗(yàn)嘗鮮
