posts - 297,  comments - 1618,  trackbacks - 0
           

          文:阿蜜果

          日期:2011-2-14

          1、概念

          近年來,內(nèi)存容量不斷提高,價格不斷下跌,操作系統(tǒng)已經(jīng)可以支持更大的地址空間,充分利用技術(shù)提升系統(tǒng)性能成為一個熱點。

          可從數(shù)據(jù)庫方面來考慮,此種方案可使用“內(nèi)存數(shù)據(jù)庫”,另一種方案是使用“內(nèi)存對象緩存系統(tǒng)”,將某些量小、使用次數(shù)多的數(shù)據(jù)以key/value的方式保存在內(nèi)存對象緩存系統(tǒng)中,減少數(shù)據(jù)庫查詢訪問帶來的性能下降。

          在本文中,主要講述后者,但在本章也對“內(nèi)存數(shù)據(jù)庫”的概念進行說明。

          1.1 內(nèi)存數(shù)據(jù)庫

          內(nèi)存數(shù)據(jù)庫,就是將數(shù)據(jù)放在內(nèi)存中直接操作的數(shù)據(jù)庫。相對于磁盤,內(nèi)存的數(shù)據(jù)讀寫速度要高出幾個數(shù)量級,將數(shù)據(jù)保存在內(nèi)存中相比從磁盤上訪問能夠極大地提高應用的性能。

          在數(shù)據(jù)庫技術(shù)中,目前主要使用兩種方法來使用大量的內(nèi)存:

          1)              在傳統(tǒng)的數(shù)據(jù)庫中,增大緩沖池,將一個事務所涉及的數(shù)據(jù)都放在緩沖池中,組織成相應的數(shù)據(jù)結(jié)構(gòu)來進行查詢和更新處理,也就是常說的共享內(nèi)存技術(shù),這種方法優(yōu)化的主要目標是最小化磁盤訪問。

          2)              使用內(nèi)存數(shù)據(jù)庫技術(shù)(也叫主存數(shù)據(jù)庫)技術(shù),也就是干脆重新設(shè)計一種數(shù)據(jù)庫管理系統(tǒng),對查詢處理、并發(fā)控制和恢復的算法和數(shù)據(jù)結(jié)構(gòu)進行重新設(shè)計,以更有效的使用CPU周期和內(nèi)存,這種技術(shù)近乎把整個數(shù)據(jù)庫放進內(nèi)存中,因而產(chǎn)生一種根本性的變化。

          1.2 內(nèi)存對象緩存系統(tǒng)

          內(nèi)存對象緩存系統(tǒng)用于動態(tài)Web應用以減輕數(shù)據(jù)庫負載。它通過在內(nèi)存中緩存數(shù)據(jù)和對象來減少讀取數(shù)據(jù)庫的次數(shù),從而提供動態(tài)、數(shù)據(jù)庫驅(qū)動網(wǎng)站的速度。

          常用的是Memcached 是一個高性能的分布式內(nèi)存對象緩存系統(tǒng),它基于一個存儲鍵/值對的hashmap。其守護進程(daemon )是用C寫的,但是客戶端可以用任何語言來編寫,并通過memcached協(xié)議與守護進程通信。但是它并不提供冗余(例如,復制其hashmap條目);當某個服務器S停止運行或崩潰了,所有存放在S上的鍵/值對都將丟失。

          MemcachedDanga Interactive開發(fā),用于提升LiveJournal.com訪問速度的。LJ每秒動態(tài)頁面訪問量幾千次,用戶700萬。Memcached將數(shù)據(jù)庫負載大幅度降低,更好的分配資源,更快速訪問。

          2、應用場景

          Memcached一般與數(shù)據(jù)庫系統(tǒng)配合使用,它用于存儲一些經(jīng)常需要讀取的數(shù)據(jù),從來達到提高性能的目的。

          下面講幾個在呼叫中心系統(tǒng)中的應用實例。

          2.1 任務可執(zhí)行性檢查

          例如,外呼任務需要在指定“任務開始時間”和“任務結(jié)束時間”中運行,并且在“啟用”狀態(tài)才能運行,而且單個外呼任務的進程需要通過查詢數(shù)據(jù)庫定時檢查(例如:1分鐘)該任務是繼續(xù)運行,還是終止運行。當多個外呼任務并行運行時,這種查詢會給系統(tǒng)增加負擔。

          若使用內(nèi)存對象緩存系統(tǒng),將每個任務的狀態(tài)信息以key/value對的方式存儲在Memcached的“任務信息表”中(key=任務idvalue:是否可運行標志),在插入任務時,在Memcached的“任務狀態(tài)表”中插入一條數(shù)據(jù);當“任務開始時間”和“任務結(jié)束時間”或“狀態(tài)”發(fā)生改變時,根據(jù)key對應改變Memcached的“任務信息表”的value值。在外呼任務進行中,查詢?nèi)蝿帐欠窨蛇\行時不再需要查詢數(shù)據(jù)庫,一般情況下只需要查詢Memcached即可,從而減少了對數(shù)據(jù)庫的訪問。

          2.2 日程檢查

                   在呼叫中心路由時,有時候需要提供根據(jù)日程進行路由的功能,例如滿足某個日程(例如:每年的“10100:00:00”到“10723:59:59”的日程)時才路由到A中繼。一個日程可以對應多個條目,若在路由前需要要驗證當前時間是否滿足日程,那對應需要查詢兩表的信息,還需要是否滿足日程條件。當并發(fā)很多個用戶進行呼叫時,這種檢查會給系統(tǒng)增加很大的負荷,在此處也可以使用內(nèi)存對象緩存系統(tǒng)來解決問題。

                   開發(fā)定時觸發(fā)(1分鐘執(zhí)行一次)程序去日程表和日程條目表中查詢多條信息,將當前時間與某個日程比較,將其存入Memcached中的“日程表”中,key為日程鍵,value為當前時間是否在當前日程內(nèi)的標志。

                   路由程序根據(jù)日程鍵檢查Memcached中的“日程表”,若滿足某個日程,則路由到A中繼,基本不再需要針對日程對數(shù)據(jù)庫進行查詢。

          3、應用禁忌

          3.1 不要將Memcached當數(shù)據(jù)庫用

          Memcached 的首要目的就是加快數(shù)據(jù)的響應時間,否則數(shù)據(jù)從其他數(shù)據(jù)源構(gòu)建或恢復需要很長時間。一個典型的例子就是從一個數(shù)據(jù)庫中恢復信息,特別是在信息顯示給用戶前 需要對信息進行格式化或處理的時候。Memcached 被設(shè)計用來將信息存儲在內(nèi)存中以避免每次在數(shù)據(jù)需要恢復時重復執(zhí)行相同的任務。

          切不可將 Memcached 用作運行應用程序所需信息的惟一信息源;數(shù)據(jù)應總是可以從其他信息源獲取。此外,要記住 Memcached 只是一個鍵/值的存儲。不能在數(shù)據(jù)上執(zhí)行查詢,或者對內(nèi)容進行迭代來提取信息。

          3.2 不要使用Memcached存儲大批量數(shù)據(jù)

                   首先Memcached空間大小不算大,而且主要用于緩存,所以不應該在Memcached中存儲大批量數(shù)據(jù)。若在Memcached中按照一定格式存儲數(shù)據(jù)表的行數(shù)據(jù),而且表的數(shù)據(jù)量又很大,首先空間不允許,而且查詢非常麻煩,此類數(shù)據(jù)適合保存在數(shù)據(jù)庫中。

          3.2 Memcached并不安全

          為了確保最佳性能,Memcached 并未提供任何形式的安全性,沒有身份驗證,也沒有加密。這意味著對 memcached 服務器的訪問應該這么處理:一是通過將它們放到應用程序部署環(huán)境相同的私有側(cè),二是如果安全性是必須的,那么就使用 UNIX® socket 并只允許當前主機上的應用程序訪問此 Memcached 服務器。

          這多少犧牲了一些靈活性和彈性,以及跨網(wǎng)絡上的多臺機器共享 RAM 緩存的能力,但這是在目前的情況下確保 memcached 數(shù)據(jù)安全性的惟一一種解決方案。

          4、附錄

                   《常用內(nèi)存數(shù)據(jù)庫介紹》:

          http://www.360doc.com/content/10/1202/16/3196411_74404034.shtml

                   《內(nèi)存數(shù)據(jù)庫_百度百科》:

                   http://baike.baidu.com/view/1210875.htm

                   memcached_百度百科》:

                   http://baike.baidu.com/view/794242.htm

          《使用memcached提升站點性能》:

                   http://www.oschina.net/bbs/thread/11008
          posted on 2011-02-15 12:42 阿蜜果 閱讀(2692) 評論(0)  編輯  收藏 所屬分類: Java解決方案
          <2011年2月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272812345
          6789101112

                生活將我們磨圓,是為了讓我們滾得更遠——“圓”來如此。
                我的作品:
                玩轉(zhuǎn)Axure RP  (2015年12月出版)
                

                Power Designer系統(tǒng)分析與建模實戰(zhàn)  (2015年7月出版)
                
               Struts2+Hibernate3+Spring2   (2010年5月出版)
               

          留言簿(263)

          隨筆分類

          隨筆檔案

          文章分類

          相冊

          關(guān)注blog

          積分與排名

          • 積分 - 2298168
          • 排名 - 3

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 镇沅| 交口县| 望谟县| 永胜县| 拉萨市| 绥芬河市| 桦南县| 汽车| 苍南县| 横峰县| 富蕴县| 高要市| 天台县| 平武县| 宜良县| 乃东县| 门头沟区| 施甸县| 贵州省| 会宁县| 东明县| 英吉沙县| 井研县| 黑山县| 文登市| 宜兰市| 新邵县| 溧水县| 方正县| 洛隆县| 屯留县| 兴业县| 伊吾县| 闽清县| 萨嘎县| 阜阳市| 横山县| 玛纳斯县| 延寿县| 滁州市| 沁阳市|