日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

ASP.NET應(yīng)用中緩存Oracle數(shù)據(jù)

瀏覽:198日期:2023-10-27 12:58:18
作者:;夢可,; 出處:ITPUB為了創(chuàng)建可擴(kuò)展、高性能的基于WEB的應(yīng)用,ASP.NET提供一個稱為數(shù)據(jù)緩存(Data;Caching)的特性。數(shù)據(jù)緩存支持將頻繁訪問的數(shù)據(jù)對象可編程地存放在內(nèi)存中。這一特性可擴(kuò)展以廣泛地提高查詢Oracle數(shù)據(jù)庫中數(shù)據(jù)的ASP.NET應(yīng)用的性能。本文講述一個策略,可用于采用Web;Farm環(huán)境中的ASP.NET;Web應(yīng)用緩存Oracle數(shù)據(jù)庫數(shù)據(jù)。為了創(chuàng)建可擴(kuò)展、高性能的基于WEB的應(yīng)用,ASP.NET提供一個稱為數(shù)據(jù)緩存(Data;Caching)的特性。數(shù)據(jù)緩存支持將頻繁訪問的數(shù)據(jù)對象可編程地存放在內(nèi)存中。這一特性可擴(kuò)展以廣泛地提高查詢Oracle數(shù)據(jù)庫中數(shù)據(jù)的ASP.NET應(yīng)用的性能。本文講述一個策略,可用于采用Web;Farm環(huán)境中的ASP.NET;Web應(yīng)用緩存Oracle數(shù)據(jù)庫數(shù)據(jù)。這個技巧允許在內(nèi)存中緩存頻繁訪問的Oracle數(shù)據(jù)庫數(shù)據(jù),而不是頻繁訪問數(shù)據(jù)庫來取數(shù)據(jù)。這可以幫助避免到Oracle數(shù)據(jù)庫服務(wù)器的不必要的遠(yuǎn)路。進(jìn)一步的,文章提出了一個保持緩存數(shù)據(jù)以使其始終與Oracle數(shù)據(jù)同步的實(shí)現(xiàn)。ASP.NET中的數(shù)據(jù)緩存ASP.NET中的數(shù)據(jù)緩存由Cache類和System.Web.Caching命名空間中的CacheDependency類支持。Cache類提供向緩存插入和從中取出數(shù)據(jù)的方法。CacheDependency類允許為緩存中數(shù)據(jù)項(xiàng)的指定其依賴項(xiàng)。當(dāng)我們用Insert和Add方法將項(xiàng)目加入緩存中,可以指定一個項(xiàng)目的過期(expiration)策略。我們可以用Insert方法的absoluteExpiration屬性來定義緩存中一個項(xiàng)目的生命期。這個屬性允許你指定相應(yīng)數(shù)據(jù)項(xiàng)過期的準(zhǔn)確時間。也可以使用slidingExpiration屬性來指定項(xiàng)目過期的流逝時間(基于它被訪問的時間)。一旦一個項(xiàng)目過期,它從緩存中被清除。除非它再次被加入緩存中,否則再試圖訪問,將返回一個空值。設(shè)定緩存依賴ASP.NET使我們可以基于一個外部文件、目錄或另一個緩存項(xiàng)來定義一個緩存項(xiàng)的依賴,即所謂文件依賴與鍵依賴。若一個依賴項(xiàng)改變,緩存項(xiàng)自動失效并被從緩存中清除。當(dāng)相應(yīng)的數(shù)據(jù)源改變時,我們可以用這種方法來從緩存中刪除項(xiàng)目。例如,若我們的應(yīng)用從一個XML文件中取數(shù)據(jù)并顯示在一個表格(grid)中,我們可以把文件中的數(shù)據(jù)存放到緩存中,并設(shè)定緩存依賴于那個XML文件。當(dāng)XML文件被更新,數(shù)據(jù)項(xiàng)就從緩存中被清除出去。這一事件發(fā)生時,應(yīng)用重新讀入XML文件,最新的數(shù)據(jù)項(xiàng)副本被再一次插入緩存中。進(jìn)一步的,回調(diào)事件處理器可被設(shè)定為一個監(jiān)聽者,當(dāng)緩存項(xiàng)被刪除時得到通知。這使得我們不需要反復(fù)輪詢緩存來確定數(shù)據(jù)項(xiàng)是否已無效。Oracle數(shù)據(jù)庫上的ASP.NET緩存依賴現(xiàn)在考慮這樣一個情景:數(shù)據(jù)存放于Oracle數(shù)據(jù)庫中,一個ASP.NET應(yīng)用通過ADO.NET來訪問。進(jìn)一步,我們假設(shè)數(shù)據(jù)庫表中的數(shù)據(jù)一般是靜態(tài)的,并被這個Web應(yīng)用頻繁訪問。表上的DML操作很少而對數(shù)據(jù)有很多Select。這種情況是數(shù)據(jù)緩存技術(shù)的理想應(yīng)用。但不幸的是,ASP.NET并不允許設(shè)定一個緩存項(xiàng)依賴于存放在數(shù)據(jù)庫表中的數(shù)據(jù)。進(jìn)一步,現(xiàn)實(shí)世界中,基于Web的系統(tǒng),Web服務(wù)器和Oracle數(shù)據(jù)庫服務(wù)器總是會運(yùn)行在不同的機(jī)器上,使得緩存無效操作更有挑戰(zhàn)性。另外,多數(shù)基于Web的應(yīng)用采用Web;farms,同一個應(yīng)用的實(shí)例在不同的Web服務(wù)器上跑以負(fù)載均衡。這種情況使得數(shù)據(jù)庫緩存問題稍稍復(fù)雜一些。為了進(jìn)一步研究上述問題的解決方案,我們舉一個Web應(yīng)用的例子來說明如何實(shí)現(xiàn)。例子中,我們使用VB.NET實(shí)現(xiàn)的ASP.NET應(yīng)用,通過Oracle;Data;Provider;for;.NET;(ODP)來訪問;Oracle;9i數(shù)據(jù)庫。這個例子使用Oracle數(shù)據(jù)庫中一個名為Employee的表。我們?yōu)樵摫砩蟟nsert,;update,;delete設(shè)定觸發(fā)器。這些觸發(fā)器調(diào)用一個封裝了一個Java存儲過程的PL/SQL函數(shù)。這個Java存儲過程負(fù)責(zé)更新緩存依賴的文件。ASP.NET;Tier的VB.NET實(shí)現(xiàn)我們設(shè)計(jì)了含一個回調(diào)方法的監(jiān)聽類來處理緩存項(xiàng)無效時的通知。這個回調(diào)方法RemovedCallback用一個代理(delegate)函數(shù)來注冊。回調(diào)方法onRemove的聲明必須與CacheItemRemovedCallback代理聲明又相同的簽名。Dim;onRemove;As;CacheItemRemovedCallback;=;Nothing;onRemove;=;New;CacheItemRemovedCallback(AddressOf;RemovedCallback);監(jiān)聽事件處理方法RemovedCallback負(fù)責(zé)處理數(shù)據(jù)庫觸發(fā)器的通知,其定義如下。若緩存項(xiàng)失效,可用數(shù)據(jù)庫方法調(diào)用getRecordFromdatabase()從數(shù)據(jù)庫取出數(shù)據(jù)。參數(shù)”key”指從緩存中刪除的項(xiàng)的索引位置。參數(shù)”value”指從緩存中刪除的數(shù)據(jù)對象。參數(shù)"CacheItemRemovedReason"指從緩存中刪除數(shù)據(jù)項(xiàng)的原因。PublicSub;RemovedCallback(ByVal;key;AsString,;ByVal;value;AsObject,;ByVal;reason;As;CacheItemRemovedReason);Dim;Source;As;DataView;Source;=;getRecordFromdatabase();Cache.Insert("employeeTable;",;Source,;New;System.Web.Caching.CacheDependency("d:/download/tblemployee.txt"),;Cache.NoAbsoluteExpiration,;Cache.NoSlidingExpiration,;CacheItemPriority.Normal,;onRemove);EndSub;方法getRecordFromdatabase()負(fù)責(zé)查詢數(shù)據(jù)庫表Employee并返回一個DataView對象引用。它使用一個名為getEmployee的存儲過程來抽象從Employee表中取數(shù)據(jù)的SQL。這個方法有一個名為p_empid的參數(shù),表示Employee的主鍵。PublicFunction;getRecordFromdatabase;(ByVal;p_empid;As;Int32);As;DataView Dim;con;As;OracleConnection;=;Nothing Dim;cmd;As;OracleCommand;=;Nothing Dim;ds;As;DataSet;=;Nothing Trycon;=;getDatabaseConnection(;"UserId=scott;Password=tiger;Data;Source=testingdb;")cmd;=;New;OracleCommand("Administrator.getEmployee",;con)cmd.CommandType;=;CommandType.StoredProcedurecmd.Parameters.Add(New;OracleParameter("employeeId",;OracleDbType.Int64)).Value;=;p_empidDim;param;AsNew;OracleParameter("RC1",;OracleDbType.RefCursor)cmd.Parameters.Add(param).Direction;=;ParameterDirection.OutputDim;myCommand;AsNew;OracleDataAdapter(cmd)ds;=;New;DataSetmyCommand.Fill(ds)Dim;table;As;DataTable;=;ds.Tables(0)Dim;index;As;Int32;=;table.Rows.CountReturn;ds.Tables(0).DefaultView Catch;ex;As;ExceptionThrowNew;Exception("Exception;in;Database;Tier;Method;getRecordFromdatabase;();";+;ex.Message,;ex) FinallyTry cmd.Dispose()Catch;ex;As;ExceptionFinally cmd;=;NothingEndTryTry con.Close()Catch;ex;As;ExceptionFinally con;=;NothingEndTry EndTryEndFunction;函數(shù)getDatabaseConnection接受一個連接字符串(connection;stirng)為參數(shù),返回一個OracleConnection對象引用。PublicFunction;getDatabaseConnection(ByVal;strconnection;as;string);As;OracleConnection Dim;con;As;Oracle.DataAccess.Client.OracleConnection;=;Nothing Trycon;=;New;Oracle.DataAccess.Client.OracleConnectioncon.ConnectionString;=;strconnectioncon.Open()Return;con Catch;ex;As;ExceptionThrowNew;Exception("Exception;in;Database;Tier;Method;getOracleConnection();"+;ex.Message,;ex) EndTryEndFunction;;Oracle數(shù)據(jù)庫Tier實(shí)現(xiàn)定義Employee表上DML事件的觸發(fā)器體如下。這個觸發(fā)器簡單的調(diào)用一個PL/SQL包裹函數(shù)來更新名為tblemployee.txt的操作系統(tǒng)文件。文件副本在兩臺機(jī)器(機(jī)器1和機(jī)器2)上更新。兩臺機(jī)器運(yùn)行同一個Web應(yīng)用的不同實(shí)例來均衡負(fù)載。這里administrator指Oracle數(shù)據(jù)庫的方案(schema)對象所有者。begin administrator.plfile('machine1//download//;tblemployee.txt'); administrator.plfile('machine2//download//;tblemployee.txt');end;為更新緩存依賴文件,我們需要寫一個C函數(shù)或Java存儲過程。我們的例子中選擇了Java存儲過程,因?yàn)镺racle數(shù)據(jù)庫服務(wù)器有一個內(nèi)置的JVM,使得書寫Java存儲過程很方便。必須有足夠的內(nèi)存分配給Oracle實(shí)例的系統(tǒng)全局區(qū)(SGA)中的Java池。靜態(tài)方法updateFile接受一個絕對路徑作為參數(shù),并在合適的目錄中創(chuàng)建緩存依賴文件。若文件已經(jīng)存在,則先刪除然后創(chuàng)建。import;java.io.*;public;class;UpdFile;{public;static;void;updateFile(String;filename);{ try;{File;f;=;new;File(filename);f.delete();f.createNewFile(); } catch;(IOException;e) {//;log;exception }};NPL/SQL包裹實(shí)現(xiàn)如下。包裹函數(shù)以文件名為參數(shù),調(diào)用Java存儲過程中updateFile方法。(p_filename;IN;VARCHAR2)AS;LANGUAGE;JAVANAME;'UpdFile.updateFile;(java.lang.String)';Web;Farm部署中的Oracle數(shù)據(jù)緩存正如我們討論的例子中所示,Web服務(wù)器1和機(jī)器2構(gòu)成了一個Web;Farm來為我們的Web應(yīng)用提供負(fù)載均衡。每臺機(jī)器運(yùn)行同一個Web應(yīng)用的一個實(shí)例。在這個情況下,每個實(shí)例可以擁有自己的存放在Cache對象中的緩存數(shù)據(jù)副本。當(dāng)Employee表改變,相應(yīng)的數(shù)據(jù)庫觸發(fā)器更新兩臺機(jī)器上的文件tblemployee.txt。每個實(shí)例都指定一個到tblemployee.txt的緩存依賴,Web;Farm的兩個實(shí)例都可以正確更新,使得兩個實(shí)例上的數(shù)據(jù)緩存可以和數(shù)據(jù)庫表Employee保持同步。結(jié)論數(shù)據(jù)緩存是優(yōu)化Oracle數(shù)據(jù)庫上ASP.NET應(yīng)用的有效技巧。盡管ASP.NET不允許設(shè)定緩存的數(shù)據(jù)庫依賴,Oracle觸發(fā)器協(xié)同Java存儲過程可以擴(kuò)展ASP.NET緩存的威力從而允許Oracle數(shù)據(jù)庫緩存。這個技巧也可以適用于Web;Farm部署。
標(biāo)簽: Oracle 數(shù)據(jù)庫
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日产精品一区二区| 国产精品美女午夜爽爽| 99久久99久久精品国产片果冰| 欧美亚洲自偷自偷| 日本欧美一区二区在线观看| 成人免费电影网址| 91精品久久久久久久久久不卡| 久久精品国产成人一区二区三区| 欧美日韩国产一区二区在线观看| 亚洲精品极品| 天堂va欧美ⅴa亚洲va一国产| 亚洲精品美女| 中文字幕日韩亚洲| 亚洲小说春色综合另类电影| 一区二区三区网站| 日韩精品成人| 日本午夜免费一区二区| 国产精品.xx视频.xxtv| 欧美日韩一区自拍| 你懂的国产精品永久在线| 亚洲精品伊人| 国产精品任我爽爆在线播放| 国产成人精品一区二区三区在线| 日韩国产欧美| 午夜久久久久| 日本成人精品| 国产夫妻在线| 在线一区电影| 国产精品jk白丝蜜臀av小说| av中文字幕在线观看第一页| 亚洲高清成人| 欧美三级第一页| 日韩在线不卡| 免费不卡在线视频| 欧美激情aⅴ一区二区三区 | 91视频久久| 鲁大师影院一区二区三区| 你懂的亚洲视频| japanese国产精品| 国产亚洲一卡2卡3卡4卡新区| 欧洲毛片在线视频免费观看| 国产精品tv| 亚洲欧美伊人| 国产日韩高清一区二区三区在线 | 亚洲欧美高清| 国产成人免费精品| 石原莉奈在线亚洲三区| 欧美丰满日韩| 免费成人性网站| 91精品国产成人观看| 日韩不卡一二三区| 国产精品呻吟| 天堂√中文最新版在线| 日韩av中文字幕一区| 夜久久久久久| 欧美日韩视频网站| 精品国产乱码久久久久久樱花| 中文字幕亚洲影视| 精品91久久久久| 欧美日韩尤物久久| 国产精品一级| 国产精品免费99久久久| 亚洲网址在线观看| 婷婷丁香综合| 久久精品官网| 午夜av成人| 欧美成人精品三级网站| 国产色99精品9i| 亚洲久草在线| 在线看片日韩| 亚洲精品免费观看| 婷婷成人av| 亚洲一区av| 亚洲精品国产日韩| 日韩av一区二区三区四区| 久久99伊人| 亚洲久草在线| 国产欧美一区二区精品久久久 | 成人午夜精品| 少妇精品导航| 国产精品嫩草99av在线| 中文字幕日韩亚洲| 久久精品av麻豆的观看方式| 国产精品久久久久77777丨| 国产精品久久久久久久免费软件| 激情久久一区二区| 免费在线小视频| 亚洲在线免费| 国产欧美日韩一区二区三区四区 | 91亚洲成人| 久久成人国产| 欧美国产中文高清| 亚洲精品.com| 亚洲毛片网站| 精品国产乱码久久久| 99国产精品99久久久久久粉嫩| 国产精品97| 国产精品极品| 欧美日韩国产观看视频| 蜜臀久久99精品久久久画质超高清| 天堂久久av| 99精品美女| 日韩一区二区三区精品视频第3页| 国产成人精品亚洲线观看| 国产一级一区二区| 国产剧情一区二区在线观看| 丝袜av一区| 国产精品久久久久久久久久久久久久久 | 免费不卡中文字幕在线| 97精品久久| 影视先锋久久| 国产免费久久| 亚州av一区| 日韩天堂av| 日韩黄色大片| 精品久久久中文字幕| 91午夜精品| 亚洲一区久久| 日韩欧美一区二区三区免费观看| 国产人成精品一区二区三| 天堂а√在线最新版中文在线| 蜜桃视频一区二区三区| 在线视频观看日韩| 日韩和的一区二在线| 国产一区二区精品久| 国产精品一区二区三区www| 日韩一区二区三区四区五区| 亚洲网址在线观看| 蜜桃久久精品一区二区| 免费视频一区三区| 日韩欧美另类一区二区| 精品亚洲精品| 精品国产欧美| 日韩高清中文字幕一区二区| 国产伦久视频在线观看| 国产欧美日韩一级| 婷婷精品久久久久久久久久不卡| 午夜精品影视国产一区在线麻豆| 夜夜嗨一区二区三区| 首页国产欧美日韩丝袜| 美女精品在线| 日本综合视频| 欧美日韩一区二区三区四区在线观看 | 免费久久精品| 久久中文字幕一区二区三区| 麻豆视频一区二区| 日韩免费看片| 亚洲在线观看| 日韩精品免费视频一区二区三区| 欧美在线日韩| 国产精品白丝一区二区三区| 国产在线观看91一区二区三区| 色综合狠狠操| 国产高清一区二区| 日本成人中文字幕在线视频| 国产成人精品一区二区免费看京| 日本精品不卡| 亚洲a级精品| 精品一区不卡| 欧美精品自拍| 91亚洲无吗| 日韩精品一区二区三区免费观看| 日本欧美在线看| 午夜久久中文| 亚洲久久一区| 国产一区二区三区久久久久久久久| 动漫av一区| 三上悠亚国产精品一区二区三区| 欧美伊人久久| 久久一区亚洲| 亚洲视频播放| 日韩av免费| 日韩av一区二区三区四区| 久久久天天操| 日韩中文av| 午夜国产一区二区| 欧美日韩精品一区二区三区视频 | 婷婷精品在线| 日韩电影免费网站| 国产乱人伦丫前精品视频| 激情欧美日韩一区| 日韩视频网站在线观看| 免费在线观看日韩欧美| 欧美国产视频| 丝袜美腿成人在线| 午夜电影亚洲| se01亚洲视频| 欧美黄页在线免费观看| 日本一区二区三区视频在线看| 欧美日韩高清| 亚洲大片在线| 在线日韩欧美| 久久激情一区| 久久国产电影| 神马午夜久久| 99在线|亚洲一区二区| 99精品视频在线| 久久精品91| 日韩视频网站在线观看| 久久中文字幕av|