西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁西西教程數(shù)據(jù)庫教程 → 數(shù)據(jù)庫內(nèi)存表功能發(fā)掘

數(shù)據(jù)庫內(nèi)存表功能發(fā)掘

相關(guān)軟件相關(guān)文章發(fā)表評論 來源:西西整理時間:2012/5/27 13:52:45字體大。A-A+

作者:佚名點(diǎn)擊:20次評論:0次標(biāo)簽: 數(shù)據(jù)庫

  • 類型:辦公軟件大。35KB語言:中文 評分:1.2
  • 標(biāo)簽:
立即下載

緩存只能本進(jìn)程使用,內(nèi)存表比緩存高級得多,支持不同電腦數(shù)據(jù)庫sql操作的緩存。現(xiàn)在8g內(nèi)存幾百元,而且越來越便宜,基于內(nèi)存的數(shù)據(jù)庫操作速度極快,對持久化要求不高的數(shù)據(jù)庫表完全可以用內(nèi)存表,也可用于通信。緩存有很多弱點(diǎn),不容控制,不易同步,難跨機(jī)器跨進(jìn)程,不標(biāo)準(zhǔn)化等。內(nèi)存表比緩存功能強(qiáng)大太多,主要是沾sql的光。

  內(nèi)存表(或稱內(nèi)存數(shù)據(jù)庫中的表),是數(shù)據(jù)庫把表中的數(shù)據(jù)完全放在內(nèi)存,重啟數(shù)據(jù)庫后,內(nèi)存表中的不會有任何數(shù)據(jù),但內(nèi)存表的表結(jié)構(gòu)還存在。首先需要明確一個觀念,使用內(nèi)存表和程序直接在內(nèi)存操作理論速度是一樣。以下為內(nèi)存表的power功能描述。

一、內(nèi)存表的優(yōu)點(diǎn):

(一)、速度很快

  沒有最快,只有更快。內(nèi)存的速度是除了cpu cache外最快的存儲設(shè)備,所以不要懷疑內(nèi)存表的速度。理論上內(nèi)存表的速度和最快通信方式速度是一樣,因為都在內(nèi)存中操作。缺點(diǎn)在于不能持久存儲,只有揚(yáng)長避短,才能發(fā)揮內(nèi)存表的優(yōu)勢。內(nèi)存速度可達(dá)6G/S以上,而硬盤速度不穩(wěn)定算為0.2G/S,相差30倍以上,有的系統(tǒng)甚至相差100倍以上.

(二)、標(biāo)準(zhǔn)sql操作

  兩個應(yīng)用程序的通信,是多么讓人痛苦,什么文件記錄鎖、管道、隊列、消息隊列、信號燈、共享內(nèi)存、com組件、soap、xml、soa、json/bson等等,全是奔通信而來,讓人眼花繚亂。巨大的復(fù)雜且不說,關(guān)是n個操作系統(tǒng)的兼容性就夠頭痛的。而基于sql的內(nèi)存表跨語言,跨平臺,跨虛擬機(jī)、跨數(shù)據(jù)庫、跨老菜鳥。說來說去,還是sql標(biāo)準(zhǔn)帶來的好處。

(三)、支持事務(wù)

  以上通信不支持事務(wù),是很多高性能通信都不能解決的問題,更別說自定義的socket協(xié)議。支持事務(wù)在通信可能不是必要,但有了更安全的選擇。

二、內(nèi)存表缺點(diǎn):

(一)、不能持久化

  不能存入硬盤,因為硬盤的速度太慢,所以出現(xiàn)了內(nèi)存表。持久化,只要做到服務(wù)正常停止時,把內(nèi)存表數(shù)據(jù)保存到普通數(shù)據(jù)表就可以了,比隊列之類的持久化容易得多。

(二)、占用內(nèi)存過大

  現(xiàn)在服務(wù)器內(nèi)存已經(jīng)很大了,很多內(nèi)存浪費(fèi)掉了。用內(nèi)存表,你的內(nèi)存使用量完全可以控制。

三、內(nèi)存表可發(fā)掘功能:

(一)、用于進(jìn)程通信

  不同程序的進(jìn)程通信、汲及各大操作系統(tǒng)內(nèi)部知識,實現(xiàn)難度大。完全可以內(nèi)存表來交換數(shù)據(jù),解決了硬盤數(shù)據(jù)表交換數(shù)據(jù)慢的問題,解決了進(jìn)程通信不標(biāo)準(zhǔn)化問題,解決多個操作系統(tǒng)進(jìn)程通信的困難。另外本機(jī)通信可以不通過tcp/ip協(xié)議,使用相關(guān)數(shù)據(jù)庫的管道通信,進(jìn)一步提高通信效率。

(二)、用于業(yè)務(wù)系統(tǒng)緩存

  一個數(shù)據(jù)庫支持的系統(tǒng),都有很多表。為了追求速度,我們經(jīng)常把不需要頻繁更新的表緩存在應(yīng)用程序中,但這種緩存不能多個程序共享,對緩存的控制也需要相當(dāng)?shù)募记。其實可以保持原有框架不動,建立?nèi)存表,表結(jié)構(gòu)和 “需緩存表” 一樣。在應(yīng)用程序啟動后把 “需緩存表” 數(shù)據(jù)插入內(nèi)存表中。當(dāng)有“需緩存表”有數(shù)據(jù)更新時,只要再插一份到內(nèi)存表。解決了自行控制緩存的風(fēng)險,通過內(nèi)存表的參數(shù)設(shè)置解決了內(nèi)存的使用量問題。

(三)、代替網(wǎng)絡(luò)通信

  特別對于局域網(wǎng)應(yīng)用,很多時候需要通信網(wǎng)絡(luò)通信來解決服務(wù)器和客戶端的數(shù)據(jù)同步問題。網(wǎng)絡(luò)通信的本質(zhì)是進(jìn)程通信的延伸,但又有自已特點(diǎn)。如會話控制,通信協(xié)議控制。而基于內(nèi)存表的通信建立在堅實的c/s數(shù)據(jù)庫服務(wù)器上。在更高層解決了很多網(wǎng)絡(luò)通信問,你只要關(guān)注于通信協(xié)議的業(yè)務(wù)邏輯。當(dāng)需要傳輸二進(jìn)制大數(shù)據(jù)時,其實我們可以在基于內(nèi)存表的通信基礎(chǔ)上,讓服務(wù)器再通過scoket把二進(jìn)制傳入。在局域網(wǎng)c/s框架下,你可以通過權(quán)限控制,動態(tài)建立內(nèi)存表,來完成用戶交互。

(四)、構(gòu)建分布式系統(tǒng)

  當(dāng)你的系統(tǒng)遇到高并發(fā),高流量時,你需要構(gòu)建分布式,可水平擴(kuò)展的業(yè)務(wù)系統(tǒng)。而你的多個業(yè)務(wù)系統(tǒng)如果共享數(shù)據(jù)是一大難題.內(nèi)存表可以解決這個問題,速度是建立在內(nèi)存中,通信是建立高性能數(shù)據(jù)庫c/s模式上,你只要專注于業(yè)務(wù)邏輯。

(五)、構(gòu)建跨語言跨平臺通信

  通用數(shù)據(jù)庫系統(tǒng),在各大流行語言中都可以訪問。通過數(shù)據(jù)庫表通信,以前遇到的問題是通信速度太慢,而基于內(nèi)存模式,解決了通信慢的問題,好處在于使各種語言通過標(biāo)準(zhǔn)sql訪問通信內(nèi)容?梢曰谶@種方式,實現(xiàn)c#和java在局域網(wǎng)通信,解決通信協(xié)議問題。通過orm方式,完全實現(xiàn)對象和list<t>在不同系統(tǒng)的穿梭,避免重復(fù)發(fā)明輪子。對于小并發(fā)量局域網(wǎng)通信完全夠用。對于大并發(fā),見問答。

  內(nèi)存表在上面系統(tǒng)中,類似于設(shè)計模式中的中介者模式。中介者模式的特點(diǎn)是,用一個中介對象封閉一系列的對象交互,各個對象不需要相互作用,使其耦合松散,從而獨(dú)立改變它們之間的交互。

四、內(nèi)存表問答:

(一)、如何做到數(shù)據(jù)庫的全內(nèi)存操作,不要經(jīng)過老牛般的硬盤?

  你可以把數(shù)據(jù)庫安裝在“內(nèi)存硬盤”中,“內(nèi)存硬盤”是用內(nèi)存虛擬硬盤,這樣數(shù)據(jù)庫在讀取諸如用戶權(quán)限、配置信息時,也是從內(nèi)存加載,有效克服最后的瓶頸。至于“內(nèi)存硬盤”如果和硬盤同步,也有解決方案。

(二)、基于內(nèi)存表通信的速度有我自行開發(fā)的socket快嗎?

  如果兩臺電腦通過socket對連,內(nèi)存表通信肯定沒有socket快,但也慢不到那里去,因為都在內(nèi)存操作。內(nèi)存表只是一個中介者,有了這個中介者會帶來很多好處,如訪問容易,就像在不同電腦之間加入路由器一樣。

(三)、基于內(nèi)存表的緩存系統(tǒng)怎么在現(xiàn)有系統(tǒng)上集成?

  你可以把“需要緩存”、不常執(zhí)行新增刪除修改的表,改為內(nèi)存表。把原來的數(shù)據(jù)表,改個名字,系統(tǒng)啟動時,用程序把數(shù)據(jù)表插入內(nèi)存表。這樣代碼和sql做到最少改動。原數(shù)據(jù)表的新增刪除修改部分代碼,增加"改名后的數(shù)據(jù)表"操作部分。

  極少更新的表,可以不修改現(xiàn)有任何代碼,建立一個伺服程序,過段時間把數(shù)據(jù)表同步到內(nèi)存表中(操作最好帶事務(wù),不然讀”內(nèi)存表“程序可能出現(xiàn)數(shù)據(jù)出錯),當(dāng)然時間間隔你可以根據(jù)情況自行調(diào)整。

(四)、大家都知道數(shù)據(jù)庫連接數(shù)是有限的,如果用內(nèi)存表通信支持高并發(fā)?

  對于高并發(fā),內(nèi)存數(shù)據(jù)庫的并發(fā)量高于基于硬盤的并發(fā)量。這時任何基于傳統(tǒng)數(shù)據(jù)庫驅(qū)動的程序會感到更吃力,因為傳統(tǒng)數(shù)據(jù)庫有i/o的瓶頸。這時你只要使用傳統(tǒng)分流數(shù)據(jù)庫并發(fā)方式來操作就可以了,如物理分庫, 數(shù)據(jù)庫集群、負(fù)載均衡、路由選擇庫表散列。另外你可以使用高效率c/c++來接收通信,把收到內(nèi)容放入隊列,隊列程序再放入內(nèi)存表,使用java/c#擅長邏輯處理的程序從內(nèi)存表中取出做業(yè)務(wù)邏輯處理,處理完后的結(jié)果放在內(nèi)存表,隊列程序從內(nèi)存表中取出到發(fā)送隊列,c/c++從發(fā)送隊列發(fā)送給客戶端。

    相關(guān)評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

    發(fā)表評論 查看所有評論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)