• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      關于網(wǎng)站緩存機制設計優(yōu)化策略的研究

      2013-08-15 00:44:03尹衍林
      關鍵詞:關鍵字內(nèi)存頁面

      尹衍林

      (雞西大學 電氣與信息工程系,黑龍江 雞西 158100)

      在網(wǎng)站設計過程中,完全依靠實時數(shù)據(jù)庫查詢,雖然可以獲得最快的數(shù)據(jù)同步,但是會增加服務器的壓力,從而影響服務器執(zhí)行的效率,緩存技術可以解決效率方面的問題。通過使用適當?shù)木彺嬖O置,可以向用戶提供較好的應用程序體驗。如果缺乏整體緩存機制設計,不僅會導致網(wǎng)絡的性能低劣,還會引發(fā)一些功能缺陷。

      1 緩存機制設計的原則

      無論是頁面緩存還是數(shù)據(jù)緩存,在設計的過程中都應當盡量遵循以下一些基本原則。

      1.1 適量適用原則

      緩存的使用是建立在占用內(nèi)存(甚至磁盤空間)的基礎上的,所以緩存的濫用必然導致大量磁盤空間和內(nèi)存的無謂消耗。因此,雖然緩存的查詢速度非??欤覀?nèi)匀灰M量保持緩存的清潔和簡約,需要用到緩存的地方,毫不猶豫地使用它,但是對于一些不太可能被訪問到的數(shù)據(jù),盡量不要隨意地、長時間地保存在緩存中,那樣雖然在表面上也并不會影響整個網(wǎng)站數(shù)據(jù)的查詢,但是這些數(shù)據(jù)會在無意中失去管理,成為內(nèi)存中的垃圾,甚至還可能為網(wǎng)站數(shù)據(jù)安全帶來風險。

      1.2 功能與效率平衡原則

      眾所周知,緩存中的內(nèi)容與數(shù)據(jù)庫中的內(nèi)容很難在每時每刻都保持絕對一致,這種一致性只能無限地接近,在這個無限接近的過程當中,需要付出性能的代價。由于網(wǎng)站服務器的CPU數(shù)量和性能在長時間內(nèi)是基本穩(wěn)定的,與擴展性相對較強的內(nèi)存相比,CPU可以說是整個系統(tǒng)中的稀缺資源,因此在獲得更好的數(shù)據(jù)更新效果的同時,也要注意到緩存更新所帶來的效率問題。

      1.3 同步原則

      這里的同步不是指數(shù)據(jù)庫數(shù)據(jù)與緩存數(shù)據(jù)的同步,而是指不同的緩存項中的數(shù)據(jù),甚至是分布式系統(tǒng)中不同服務器中的數(shù)據(jù)同步。這種數(shù)據(jù)同步優(yōu)先級別要大大高于數(shù)據(jù)庫與緩存之間的同步。因為數(shù)據(jù)庫與緩存之間的同步很少會帶來操作上的歧義,但是不同緩存項中的數(shù)據(jù)如果產(chǎn)生了差別,就可能在兩個不同的地方針對同一筆數(shù)據(jù)或者流程采取不同的操作,對于網(wǎng)站系統(tǒng)來說,這樣的漏洞比程序本身的Bug更難控制。

      1.4 充分利用原則

      緩存中一旦建立了相應數(shù)據(jù)的緩存項,就應當充分利用它。這要求緩存的通用性和兼容性更強,并且建立很好的接口;緩存模塊只有建立在良好的設計基礎之上,才能更好地實現(xiàn)。

      1.5 靈活原則

      具體問題具體分析,這一理論貫穿于軟件開發(fā)的整個過程,以上四種原則是緩存機制設置的最基本原則,在實際應用過程中,難免會出現(xiàn)一些特殊問題或受特殊因素的影響而使設計發(fā)生改變,因此在創(chuàng)建緩存模塊的過程中,要全面考慮,根據(jù)不同的情況靈活應用。

      2 緩存優(yōu)化設計

      2.1 頁面緩存優(yōu)化設計

      以問答模塊為例,問答等模塊都是建立在用戶模塊基礎上的,也就是說用戶登錄以后才能使用該模塊的功能。系統(tǒng)在多數(shù)頁面中往往會包含用戶的個人信息(如用戶名、站內(nèi)信提示、賬戶信息等),這樣的頁面一旦被整個緩存起來,在一段時間內(nèi),所有的用戶都將看到一模一樣的個人信息,這顯然是不合理的。所以在模塊中使用頁面緩存時要非常注意,盡量不要整個頁面都使用頁面緩存,而是緩存局面的用戶控件或者服務器控件。

      由于頁面緩存的靈活性低于數(shù)據(jù)緩存,所以在一些可以使用頁面緩存但是數(shù)據(jù)變動較為頻繁的頁面中,我們將更優(yōu)先考慮頁面緩存,如問題詳細信息頁面的回答列表。

      2.2 數(shù)據(jù)緩存優(yōu)化設計

      數(shù)據(jù)緩存優(yōu)化設計是整個緩存機制的重點,這不僅因為數(shù)據(jù)緩存的代碼會比較復雜,不像頁面緩存那樣可以簡單地進行配置,更重要的是數(shù)據(jù)緩存貫穿整個模塊乃至整個網(wǎng)站,可能會涉及到網(wǎng)頁的任何一個頁面,其變動性和靈活性對緩存擴展性的要求很高,并且數(shù)據(jù)緩存在很多情況下會直接關系到整個網(wǎng)站的數(shù)據(jù)安全和穩(wěn)定性。因此,構(gòu)建一個強大穩(wěn)定的緩存模塊是十分必要的。

      正因為數(shù)據(jù)緩存是所有緩存的重中之重,網(wǎng)站和其中任何子模塊的緩存設計都應當把數(shù)據(jù)緩存放在最重要的位置。對于問題模塊來說,幾乎所有內(nèi)容都可以使用緩存,因此我們的目標是,盡可能使所有頁面請求的數(shù)據(jù)都從緩存中讀取,而不是直接從數(shù)據(jù)庫讀取。對于數(shù)據(jù)庫數(shù)據(jù)的緩存通常有兩種做法——全部緩存和部分緩存。

      全部緩存是將所有數(shù)據(jù)庫的信息一個不漏地放入緩存中,以緩存查詢完全替代數(shù)據(jù)庫查詢。這種做法的優(yōu)點是:更新條件簡單,只需要從數(shù)據(jù)庫中讀取所有數(shù)據(jù)即可;查詢邏輯簡單,只需要查詢緩存中的數(shù)據(jù),如果緩存中不存在,就表示數(shù)據(jù)庫中也不存在,沒有必要再到數(shù)據(jù)庫中查詢。缺點是:占用更多的內(nèi)存,查詢時程序可能面臨更多的冗余數(shù)據(jù);一旦數(shù)據(jù)更新過程出錯,可能導致不完全的查詢。雖然為了保證查詢的可靠性,我們可以把在緩存中查詢不到的數(shù)據(jù)再從數(shù)據(jù)庫查詢,但是這樣會降低全部緩存的效率,甚至有時候還不如直接從數(shù)據(jù)庫查詢。

      為了彌補全部緩存的不足,我們可以使用部分緩存。部分緩存是指把一部分數(shù)據(jù)存入緩存中,當程序查詢數(shù)據(jù)的時候,優(yōu)先從緩存中查詢,當緩存中不存在此數(shù)據(jù)時,再從數(shù)據(jù)庫查詢。如果數(shù)據(jù)量十分龐大,并且命中率比較低的時候,部分緩存是一個不錯的方案。部分緩存中數(shù)據(jù)可以是系統(tǒng)約定的,也可以是從數(shù)據(jù)庫中查詢到數(shù)據(jù),返回的時候順便記錄到緩存中。在緩存過期之前,再次查詢相同數(shù)據(jù)的時候,程序能夠很快地從緩存中找到數(shù)據(jù)。

      與全部緩存相比,部分緩存的優(yōu)點顯而易見,即更加節(jié)約內(nèi)存,數(shù)據(jù)更有效,查詢效率更高。同樣,部分緩存也存在不足,如重復查詢。數(shù)據(jù)重復,這個問題和線程有關,假設A和B兩個進程同時以相同的目標查詢緩存,結(jié)果緩存中不存在,然后程序自動分別將這兩個查詢結(jié)果添加到緩存中[1]。

      解決這個問題的方法是使用一些設計模式(單例模式)限制對緩存的訪問,在同一個時間內(nèi)只允許一個線程訪問緩存。但是這種做法在應對這個缺陷的時候,還是會存在一些問題,如果數(shù)據(jù)庫查詢速度比較慢就會出現(xiàn)一些問題。

      在設計各緩存模塊的過程中,應當運用靈活原則,在充分考慮數(shù)據(jù)庫特征的基礎上,采取全部緩存和部分緩存兩個策略,可以將兩者的一些思路結(jié)合起來應用。對于一些數(shù)據(jù)量不大、相對比較固定、查詢頻率比較高的數(shù)據(jù),可以使用全部緩存,如目錄和用戶信息;對于數(shù)據(jù)量大、查詢頻率不高的數(shù)據(jù),可以使用部分緩存,如提問信息。

      數(shù)據(jù)緩存和頁面緩存不同,配置的靈活性為我們提供了足夠多的架構(gòu)空間。因此,一個設計合理的數(shù)據(jù)緩存模塊將有助于網(wǎng)站建設的成功。

      3 其他一些緩存機制的建議

      3.1 索引

      搜索引擎的索引是一個核心單元,幾乎所有的搜索都是圍繞著索引進行的,從搜索機器人的抓錄網(wǎng)頁,到SEO的一些優(yōu)化原則,搜索引擎到處都離不開索引。

      當關鍵字上升到索引之后,就成了系統(tǒng)程序的組成部分,而不僅僅是用戶感興趣的一些字詞,在搜索引擎(包括站內(nèi)搜索模塊)的開發(fā)過程中,處理好索引,包括索引的內(nèi)容、方式和結(jié)構(gòu),將有助于搜索效率的提高,使日后網(wǎng)站維護更加便捷。從緩存中匹配關鍵字,根據(jù)關鍵字查詢到對應記錄,可以在很大程度上提高搜索效率。還可以在服務器后臺配置數(shù)據(jù)庫時預先將數(shù)據(jù)中的關鍵字存儲到數(shù)據(jù)庫中,并為這些關鍵字和數(shù)據(jù)建立關聯(lián),這樣當從數(shù)據(jù)庫中查詢數(shù)據(jù)時,就不必重復查找關鍵字,也不必在有限的關鍵字產(chǎn)生的時候遍歷所有的緩存中的數(shù)據(jù),同時,也可以使用一些更高效的索引方法,將更多的關鍵字提供給程序,以最直接的方式查詢。

      3.2 多線程同步

      當網(wǎng)站發(fā)展到一定規(guī)模之后,一臺服務器已不堪重負,就會用到分布式系統(tǒng)。這不僅僅是數(shù)據(jù)庫和服務器的分離,還包括多臺服務器同時處理業(yè)務邏輯。各臺服務器的內(nèi)存是相對獨立的,如何處理不同服務器內(nèi)存中數(shù)據(jù)的同步是一個難題。對于訪問網(wǎng)站的用戶來說,訪問的往往是同一個(或一些)域名下的信息,不同的服務器返回的數(shù)據(jù)和結(jié)果對他來說應該是沒有差別的。網(wǎng)站的數(shù)據(jù)更新非???,有時一秒鐘內(nèi)可能就有幾個、十幾個甚至更多的請求,如何保證各個線程之間數(shù)據(jù)的同步就成了一個突出的問題。在緩存模塊的應用中也有一個有關多線程的應用,更新緩存通常會為其設定一個過期的時間或者依賴項,當緩存過期后,內(nèi)容被清空,此時并沒有及時更新緩存,而是等待下一次訪問的時候更新。這樣保證了緩存過期后第一次訪問時是最新的數(shù)據(jù),但是通常情況下需要花費很多時間查詢和初始化數(shù)據(jù)。在這種情況下,可以建立一個獨立的線程(或者服務),在服務器后臺運行,不依靠用戶訪問來觸發(fā)緩存更新事件,而是讓系統(tǒng)自覺地更新,這些更新可以依據(jù)時間、緩存項或者是其他一些更加靈活的條件來實現(xiàn)。

      3.3 關鍵字

      這里的關鍵字是指查詢字符串本身。在搜索引擎中,并不是所有的字符串都能夠成為查詢的關鍵字,如不構(gòu)成實踐意義的符號,或者對搜索過程造成影響的符號、字符,如星號、頓號、單引號等,這些比較特殊的字符應當在程序進行實際搜索之前過濾掉。

      對于程序來說,它本身是不能理解關鍵字的真實含義和多個關鍵字之間的聯(lián)系的,如“再接再厲”常常會被人們錯誤的寫成“再接再勵”,所以當用戶搜索“再接再勵”時,他的實際意圖可能是搜索“再接再厲”關鍵字,這時需要一個人性化的搜索引擎對此給出提示,為用戶提供一個有可能更準確的關鍵字[2],一般而言可以通過兩種方法來實現(xiàn)。一是用固定關鍵字關聯(lián),即將多個常用的關鍵字進行關聯(lián),它們之間和字母、漢字的關系一般是比較固定的;二是拼音關聯(lián),在電腦上輸入錯別字是常有的事情,如果使用拼音輸入法,這些錯別字除了發(fā)音相同、相近之外,可能并沒有太多的區(qū)別,如將“再接再厲”輸入成“再接再利”就無法使用一種固定關鍵字關聯(lián)的辦法,這個時候?qū)ⅰ霸俳釉賲枴钡钠匆粲涗浵聛恚c用戶輸入的關鍵字的拼音進行比較,當拼音相同或者相近的時候,系統(tǒng)就可以給出對應熱門關鍵字的友好提示。

      3.4 數(shù)據(jù)庫訪問

      基于數(shù)據(jù)庫訪問的特征以及存儲器硬件特點,所有這些緩存所圍繞的一個主題都是避免執(zhí)行更多的數(shù)據(jù)庫操作[3]。緩存中的信息最終來源于數(shù)據(jù)庫,所以如果能夠盡量加快或者減少緩存和數(shù)據(jù)庫之間的交流,也能提高緩存模塊的使用效率。

      4 總結(jié)

      在網(wǎng)站的開發(fā)過程中,要建立一套完善的緩存機制,并根據(jù)網(wǎng)站的現(xiàn)狀進行更新和升級,靈活地使用這些緩存。因此,很多時候需要專門為緩存組建一些模塊,使網(wǎng)站在運行過程中能夠更可靠、更穩(wěn)定地使用緩存。

      [1]朱印宏.ASP.NET3.5+SQLServer網(wǎng)站模塊化開發(fā)[M].北京:清華大學出版社,2009:471-472.

      [2]趙玉偉,趙小雨,喬木.緩存技術在B/S架構(gòu)信息系統(tǒng)中的應用[J].計算機工程,2008,34(1):233-235.

      [3]楊立身,曹志義.內(nèi)存緩存技術在門戶網(wǎng)站開發(fā)中的應用研究[J].電腦知識與技術,2008,3(7):1415-1416.

      猜你喜歡
      關鍵字內(nèi)存頁面
      大狗熊在睡覺
      刷新生活的頁面
      履職盡責求實效 真抓實干勇作為——十個關鍵字,盤點江蘇統(tǒng)戰(zhàn)的2021
      華人時刊(2022年1期)2022-04-26 13:39:28
      成功避開“關鍵字”
      “春夏秋冬”的內(nèi)存
      當代陜西(2019年13期)2019-08-20 03:54:22
      基于內(nèi)存的地理信息訪問技術
      基于用戶反饋的關系數(shù)據(jù)庫關鍵字查詢系統(tǒng)
      同一Word文檔 縱橫頁面并存
      淺析ASP.NET頁面導航技術
      誘導性虛假下載鏈接不完全評測
      404 Not Found

      404 Not Found


      nginx
      临沧市| 当阳市| 驻马店市| 库尔勒市| 柳河县| 昔阳县| 加查县| 阿荣旗| 兴和县| 潍坊市| 涿鹿县| 久治县| 新乐市| 阜阳市| 淮南市| 青铜峡市| 万宁市| 彭州市| 通山县| 孝昌县| 文昌市| 临邑县| 威海市| 宁陵县| 将乐县| 张家川| 东丰县| 天津市| 九寨沟县| 南通市| 咸阳市| 葵青区| 扬州市| 萨迦县| 虎林市| 湘潭市| 永靖县| 赣榆县| 井研县| 平湖市| 宁海县|