第八章-Zope對象數(shù)據(jù)庫_第1頁
第八章-Zope對象數(shù)據(jù)庫_第2頁
第八章-Zope對象數(shù)據(jù)庫_第3頁
第八章-Zope對象數(shù)據(jù)庫_第4頁
第八章-Zope對象數(shù)據(jù)庫_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

Zope對象數(shù)據(jù)庫(ZODB)Zope默認(rèn)將所有數(shù)據(jù)存放在Zope對象數(shù)據(jù)庫(ZODB)中。ZODB實現(xiàn)了Python對象的透明存儲,應(yīng)用的編寫幾乎不必考慮數(shù)據(jù)庫的操作。ZODB支持緩存、撤銷、事務(wù)、可插拔的存儲等高級特性。ZODB是Zope自帶的數(shù)據(jù)庫,但是也可以脫離于Zope獨(dú)立使用。本章適合系統(tǒng)管理員和系統(tǒng)集成人員閱讀。本章重點(diǎn)包括:ZODB的分區(qū)存儲配置ZODB的維護(hù)方法ZEO架構(gòu)的配置8.1

關(guān)系數(shù)據(jù)庫,還是對象數(shù)據(jù)庫關(guān)系數(shù)據(jù)庫(RDBMS)是一個很成熟的技術(shù)。這也是大多數(shù)軟件所采用的存儲技術(shù)。但是具體應(yīng)用的編寫,需要直接針對對象來操作。因此,往往通過一些O-R映射(對象-關(guān)系的映射),來將二者銜接。這最終導(dǎo)致基于關(guān)系數(shù)據(jù)庫的開發(fā)比較繁瑣。ZODB最大的優(yōu)點(diǎn)就是透明性,你根本不必編寫任何數(shù)據(jù)庫讀寫的代碼,省去了傳統(tǒng)的O-R映射代碼。Python的所有對象可保存為一個pickle數(shù)據(jù)塊,并可從pickle數(shù)據(jù)庫塊中恢復(fù)對象;而ZODB數(shù)據(jù)庫實際上就是對象pickle化后的一個數(shù)據(jù)庫??奢p松從ZODB數(shù)據(jù)庫中恢復(fù)一個對象。如果你的應(yīng)用中有大量不同類型的對象,相互之間有非常復(fù)雜的關(guān)系,而且可能模型可能經(jīng)常發(fā)生變化的時候,這時候關(guān)系數(shù)據(jù)庫可能無法承載了,而采用ZODB則是一個更好的選擇。內(nèi)容管理系統(tǒng)中存在各種不同的內(nèi)容類型,插件的安裝,要求系統(tǒng)能夠不斷擴(kuò)展。因此,ZODB特別適合內(nèi)容管理系統(tǒng)的開發(fā)。和關(guān)系數(shù)據(jù)庫一樣,ZODB也支持事務(wù):一次操作要么成功提交,要么失敗(執(zhí)行的時候拋出異常)回滾。不會出現(xiàn)事務(wù)執(zhí)行到一半出現(xiàn)異常,而數(shù)據(jù)已經(jīng)被改寫,導(dǎo)致數(shù)據(jù)不一致的情況。和關(guān)系數(shù)據(jù)庫相比,ZODB對象也存在一些缺點(diǎn),包括:ZODB中的數(shù)據(jù),不能脫離軟件獨(dú)立使用,而且目前只能使用python語言訪問自身是個黑箱,不支持跨語言的、通用的、類似SQL的訪問接口是九十年代才開始發(fā)展的技術(shù),不如關(guān)系數(shù)據(jù)庫從七十年代至現(xiàn)在發(fā)展得那么成熟8.2

Zope中ZODB的使用8.2.1

查看數(shù)據(jù)庫文件每個Zope實例中,包括一個var的子目錄,ZODB就是存放在這里。Zope服務(wù)第一次啟動后,會自動生成2個數(shù)據(jù)庫文件:Data.fs這就是ZODB的核心數(shù)據(jù)庫文件。網(wǎng)站備份的時候,只需要備份這個文件。Data.fs.indexZODB數(shù)據(jù)庫的對象索引文件。這個文件不是必須的,不必備份。啟動的時候,可根據(jù)Data.fs自動生成。我們在ZMI中看到的所有對象,均保存在ZODB中。包括:腳本、顯示模板、工具對象、內(nèi)容等。8.2.2

Zope的默認(rèn)數(shù)據(jù)庫配置Zope提供了ZODB的基本管理界面。進(jìn)入ZMI界面的根目錄中,依次單擊【Control_Panel】->【DatabaseManagement】,我們可看到這個Zope實例所使用ZODB的清單,如圖8.1所示。【圖8.1】Zope使用的數(shù)據(jù)庫默認(rèn)包括main和temporary這2個數(shù)據(jù)庫。main數(shù)據(jù)庫對應(yīng)前面看到Data.fs文件中。而temporary數(shù)據(jù)庫是一個使用內(nèi)存存儲的臨時數(shù)據(jù)庫,用于存放session這樣一些臨時對象。在Zope實例的etc/zope.conf配置文件末尾,可以相應(yīng)看到如下配置:<zodb_dbmain>#MainFileStoragedatabase<filestorage>path$INSTANCE/var/Data.fs</filestorage>mount-point/</zodb_db><zodb_dbtemporary>#Temporarystoragedatabase(forsessions)<temporarystorage>nametemporarystorageforsessioning</temporarystorage>mount-point/temp_foldercontainer-classProducts.TemporaryFolder.TemporaryContainer</zodb_db>這里包括main和temporary這2個數(shù)據(jù)庫的配置。main數(shù)據(jù)庫采用了filestorage作為存儲,這也是Zope默認(rèn)的存儲機(jī)制,它最終存儲到了實例的var子目錄下的Data.fs文件中,mount-point表示這個文件對應(yīng)ZODB的根節(jié)點(diǎn)(/);而temporary數(shù)據(jù)庫采用了temporarystorage作為存儲,將對象保存在內(nèi)存中,它將加載到ZODB的/temp_folder處??煽吹?,Zope采用了分區(qū)、可插拔存儲。這里有2個加載點(diǎn)(mount-point),并且使用了2個不同的存儲方法(storage)。Zope的ZODB和數(shù)據(jù)庫存儲之間關(guān)系如下:/(Zope根)<--main.fs(filestorage)|--..|--..`--temp_folder/<--內(nèi)存(temporarystorage)8.3

ZODB數(shù)據(jù)庫的存儲和加載8.3.1

MountPoint:使用多個ZODB數(shù)據(jù)庫8.3.1.1

加載時創(chuàng)建加載點(diǎn)對象為了避免單個zodb的數(shù)據(jù)庫文件過于龐大,可在zope.conf中配置更多的storage分開存放。這需要我們確定加載點(diǎn)的對象類型。如前面temporarystorage中,配置文件中有如下設(shè)置:container-classProducts.TemporaryFolder.TemporaryContainer如果要加載一個BTreeFolder(BTreeFolder2),類似的在可在zope.conf中設(shè)置:<zodb_dbtest_folder>#PloneFileStoragedatabase<filestorage>path$INSTANCE/var/test.fs</filestorage>mount-point/test_foldercontainer-classProducts.BTreeFolder2.BTreeFolder2.BTreeFolder2</zodb_db>其中Products.BTreeFolder2.BTreeFolder2.BTreeFolder2是類(class)的完整路徑。這樣重現(xiàn)啟動Zope后,可在ZMI的添加下拉框中選擇ZODBMountPoint,選擇【Createnewfoldersifthemountedobjectsdon'tyetexist】,單擊【Createselectedmountpoint】,如圖8.2所示?!緢D8.2】加載時創(chuàng)建一個BTreeFolder2對象這樣,就可以創(chuàng)建一個test_folder的BTree文件夾,并掛接到一個獨(dú)立的名字為test.fs的storage上。在ZMI中可看到這個文件夾,如圖8.3所示?!緢D8.3】加載后的BTree文件夾8.3.1.2

加載初始化好的storage上面的加載很方便,但是有些對象不能簡單根據(jù)類(class)簡單創(chuàng)建,比如Plone站點(diǎn),或者Plone的文件夾,這些對象的創(chuàng)建過程很復(fù)雜。這樣,我們就需要預(yù)先在單獨(dú)的實例中,將這個storage初始化好,手工先創(chuàng)建一個加載點(diǎn)的對象。比如,我們可將Plone站點(diǎn)/plone單獨(dú)存放到一個filestorage(plone.fs)中,即:/(Zope根)<--main.fs(filestorage)|--..|--plone/<--plone.fs(filestorage)|--test_folder/<--test.fs(filestorage)`--temp_folder/<--內(nèi)存(temporarystorage)可如下操作:初始化待加載數(shù)據(jù)庫(plone.fs)創(chuàng)建一個空的臨時Zope實例,在ZMI中,創(chuàng)建一個id為plone的Plone站點(diǎn)。完成后停止此實例,將實例的var文件夾中的Data.fs改名為plone.fs保存起來。此臨時Zope實例可刪除。配置ZODB的存儲結(jié)構(gòu)將plone.fs放置到需要運(yùn)行的Zope實例的var文件夾中,同時調(diào)整配置文件etc/zope.conf,在末尾增加如下配置:<zodb_dbplone>#PloneFileStoragedatabase<filestorage>path$INSTANCE/var/plone.fs</filestorage>mount-point/plone</zodb_db>重新啟動Zope實例ZMI中,在添加下拉框中選擇【ZODBMountPoint】,出現(xiàn)下圖的加載表單。我們可以看到前面加載的test_folder的狀態(tài)為OK。選擇路徑plone,單擊【Createselectedmountpoint】,將plone掛載到ZODB樹上,如圖8.4所示。【圖8.4】加載數(shù)據(jù)庫一旦加載,我們可看到ZMI根下出現(xiàn)了plone的站點(diǎn)文件夾?;氐絑MI->Control_Panel->DatabaseManagement中,我們也可看到新添加的plone數(shù)據(jù)庫,如圖8.5所示。【圖8.5】已經(jīng)加載的數(shù)據(jù)庫8.3.2

其他的Storage安裝一些插件產(chǎn)品后,Zope常用的幾種Storage見表8.1:【表8.1】常見的幾種存儲名字說明FileStorage默認(rèn)的存儲介質(zhì),使用一個文件存儲。簡單、性能好,但文件會越來越大TemporaryStorage將對象保存在內(nèi)存中,適合保存session等臨時對象。DirectoryStorage數(shù)據(jù)分散在文件夾中,pack操作非常慢。也可去除保留歷史功能,不必pack。OracleStorage存儲在Oracle數(shù)據(jù)庫中。仍然保存的是不可直接查看的對象pickle.ZEOClientStorage采用C/S架構(gòu),和遠(yuǎn)程的ZODB數(shù)據(jù)庫服務(wù)器通信,組成ZEO架構(gòu),下文將介紹8.4

數(shù)據(jù)庫的管理維護(hù)8.4.1

擠壓數(shù)據(jù)庫(pack)在上節(jié)中的【DatabaseManagement】頁面中,點(diǎn)擊任何一個數(shù)據(jù)庫,可對數(shù)據(jù)庫進(jìn)行監(jiān)視和維護(hù)操作。ZODB最常用的FileStorage存儲,所有操作均在數(shù)據(jù)文件末尾記錄,能夠保留所有操作歷史,它能夠支持撤銷(undo)操作。這樣,即便是刪除操作,也不能減小數(shù)據(jù)庫文件的大小。頻繁修改,可能導(dǎo)致數(shù)據(jù)庫文件大小迅速增加。ZODB數(shù)據(jù)庫管理頁面中,可對數(shù)據(jù)庫進(jìn)行擠壓(pack)操作,清除部分或者全部undo歷史,減小數(shù)據(jù)庫文件的大小。界面如圖8.6所示?!緢D8.6】擠壓(pack)ZODB數(shù)據(jù)庫8.4.2

數(shù)據(jù)庫緩存ZODB數(shù)據(jù)庫中存放了大量的對象。一旦Zope啟動,需要首先將這些對象從數(shù)據(jù)庫中讀取到內(nèi)存中,才能被利用。將對象從數(shù)據(jù)庫加載到內(nèi)存的過程,通常比較慢。但是一旦加載到內(nèi)存中,ZODB會將對象保留在內(nèi)存的緩沖區(qū)中一段時間,避免反復(fù)加載導(dǎo)致性能下降。第一次訪問Plone站點(diǎn)的時候,由于大量對象初次加載,因此頁面打開會比較慢;之后的訪問,由于對象已經(jīng)進(jìn)入內(nèi)存,速度則會加快很多。由于內(nèi)存大小有限,不能將全部對象加載到內(nèi)存中。Zope默認(rèn)支持緩存5000個對象。根據(jù)服務(wù)器內(nèi)存的大小,可在zope.conf文件中調(diào)整緩存對象數(shù)目:<zodb_dbplone>#PloneFileStoragedatabase<filestorage>path$INSTANCE/var/plone.fs</filestorage>mount-point/plone#每個線程緩存5000個對象(注:不是內(nèi)存大小)cache_size100000</zodb_db>注釋這里的cache_size,表示一個線程的緩存對象數(shù)目。Zope的線程數(shù)量是在zserver-threads參數(shù)中設(shè)定的,二者相乘cache_size*zserver-threads才是總的緩存對象數(shù)目。在調(diào)整cache-size的時候,需要同時考慮zserver-threads參數(shù)。ZMI的【DatabaseManagement】頁面提供了一組緩存監(jiān)視和管理工具:Activity:ZODB讀寫圖表,便于調(diào)整cache的設(shè)置。如果ZODB對象加載太多,則可能需要增加緩存。CacheParameters:查看緩存參數(shù),以及當(dāng)前緩存的占用情況FlushCache:在這里可清除內(nèi)存中的緩存對象,釋放內(nèi)存8.4.3

數(shù)據(jù)庫備份Zope默認(rèn)的filestroage,直接備份數(shù)據(jù)庫文件即可(var/Data.fs)。這種備份也稱做完全備份。如果數(shù)據(jù)庫文件比較大,這樣保留多天完全備份會占用大量空間。Zope提供了一個增量備份的工具,可僅僅備份上次備份后修改的內(nèi)容。這個增量工具位于Zope軟件安裝目錄下的bin/repozo.py中??蓤?zhí)行如下命令備份并壓縮:repozo.py-Bvz-fData.fs-r[備份到的文件夾路徑]其中的-z參數(shù)表示壓縮后備份??杉由?F/--full參數(shù),強(qiáng)制做一個完全備份:repozo.py-Bvz-F-fData.fs-r[備份到的文件夾路徑]如果要從備份數(shù)據(jù)中恢復(fù)一個最新版本到文件Data.fs,可執(zhí)行:repozo.py-R-r[備份到的文件夾路徑]-oData.fs如果要恢復(fù)2006年12月8日的備份,則可執(zhí)行:repozo.py-R-r[備份到的文件夾路徑]-D2006-12-08-oData.fs8.4.4

其他的維護(hù)工具另外,Zope還包括幾個其他的filestorage工具腳本,均位于zope安裝目錄下的bin文件夾中。比如fstail.py可查看/導(dǎo)出ZODB最近的事務(wù)執(zhí)行情況,類似undo中的事務(wù)清單;fstest.py可對數(shù)據(jù)庫進(jìn)行完整性測試。具體使用方法,可查看各自腳本文件中的注釋說明文本。8.5

ZEO架構(gòu)如果網(wǎng)站的訪問請求越來越多,那么站點(diǎn)的訪問響應(yīng)可能會越來越慢。最差的情況下,太多的請求可能導(dǎo)致站點(diǎn)完全過載,停止處理請求甚至崩潰。所有的應(yīng)用服務(wù)器,不僅僅是Zope,都會遇到這個問題。最直接的處理方法是使用多臺計算機(jī)來提供服務(wù)。但使用多臺計算機(jī),也存在另外的問題。比如,如果你使用3臺運(yùn)行Zope的計算機(jī)來提供服務(wù),那么這3臺計算機(jī)上的數(shù)據(jù)和訪問結(jié)果必須完全相同。對于內(nèi)容不斷變化的網(wǎng)站,手工同步多個站點(diǎn)的數(shù)據(jù)是不大可能的。為了解決這個問題,Zope公司開發(fā)了Zope企業(yè)對象(ZEO:ZopeEnterpriseObjects)。8.5.1

ZEO是什么ZEO是讓你的站點(diǎn)可以在多臺計算機(jī)上運(yùn)行的技術(shù)。這也常被叫做負(fù)載均衡技術(shù)。在多臺計算機(jī)上運(yùn)行Zope,你可將請求分布到多臺計算機(jī)上,減少單臺計算機(jī)的負(fù)載量。同時,如果其中一臺服務(wù)器出問題了,其他的服務(wù)器仍然能夠繼續(xù)服務(wù)。ZEO在多臺服務(wù)器上運(yùn)行Zope,并能夠確保各個Zope能夠共享相同的數(shù)據(jù)庫。ZEO使用C/S架構(gòu)。ZEO服務(wù)器(ZEOServer)相當(dāng)于傳統(tǒng)關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)庫服務(wù)器,用于集中管理數(shù)據(jù);ZEO客戶(ZEOClient)會連接到公共的ZEO服務(wù)器上獲得數(shù)據(jù)。如圖8.7所示:【圖8.7】ZEO拓?fù)浣Y(jié)構(gòu)(C/S結(jié)構(gòu))這里的ZEOClient,一般就是前面的Zope網(wǎng)站服務(wù)器。他們一方面是提供web請求處理,是服務(wù)器;另外一方面,從ZEOServer那里得到數(shù)據(jù),是客戶機(jī)。8.5.2

什么時候使用ZEO有很多理由使用ZEO,比如:你的網(wǎng)站點(diǎn)擊訪問量越來越大,希望得到更快的處理。你可使用ZEO,進(jìn)行負(fù)載均衡,提高響應(yīng)。你的網(wǎng)站非常關(guān)鍵,需要24*7上線。這樣ZEO可給你一個容錯的環(huán)境。希望把你的站點(diǎn)分布到很多的鏡像站點(diǎn)上。充分利用服務(wù)器的多CPU。目前一個Zope實例只能利用一個CPU(Python的限制),使用ZEO,可充分利用多處理器的服務(wù)器架構(gòu)。你希望在服務(wù)器正常運(yùn)行的同時,能夠開辟一個調(diào)試站點(diǎn)。這對開發(fā)人員非常有用。與此同時,部署ZEO意味著更加復(fù)雜的安裝、配置、管理方面的操作。部署ZEO適合高級用戶使用。大多數(shù)Zope用戶,并不必需要ZEO。8.5.3

ZEO原理前面我們知道ZODB有一個叫做ClientStorage特殊存儲,這個存儲就是實現(xiàn)了ZEOClient的功能,用來和ZEOServer通訊。如圖8.8所示:【圖8.8】ZEO工作原理圖我們看到,ClientStorage遠(yuǎn)程連接到ZEOServer后,最終還是連接到了一個FileStorage。因此,ClientStorage實際上就是遠(yuǎn)程的FileStorage的代理。ZODB完全屏蔽了各種Storage的差異。對于Zope應(yīng)用服務(wù)器上運(yùn)行的對象來說,完全無需知道底層的存儲機(jī)制。8.5.4

安裝和配置ZEO8.5.4.1

安裝ZEOServer要運(yùn)行ZEOServer,需要首先創(chuàng)建一個ZEO實例(ZEOInstance),也就是ZEOServer的運(yùn)行環(huán)境。Zope軟件的bin目錄中,包括一個mkzeoinstance.py腳本,運(yùn)行它可創(chuàng)建一個ZEO實例。比如:mkzeoinstance.py/var/zope/plone/zeo9000其中,/var/zope/plone/zeo是ZEO實例的安裝目錄,9000是服務(wù)監(jiān)聽端口。ZEO實例的目錄結(jié)構(gòu),和Zope實例的目錄結(jié)構(gòu)類似。在Linux上可以直接以守護(hù)進(jìn)程方式運(yùn)行ZEOServer:bin/zeoctlstart或者在命令行上運(yùn)行,以便調(diào)試程序:bin/runzeo8.5.4.2

windows上運(yùn)行ZEOServer和Zope服務(wù)器一樣,ZEOServer可在各種平臺上運(yùn)行。不幸的是,迄今為止,默認(rèn)創(chuàng)建實例安裝后,Zope的ZEOServer在Windows平臺上并沒有可直接使用的運(yùn)行腳本,這需要我們手工完成??稍趜eo\bin目錄下添加一個批處理文件運(yùn)行zeo服務(wù)器,文件名為runzeo.bat:@setPYTHON=<<python.exe文件的完整路徑>>@setSOFTWARE_HOME=<<zope安裝路徑\lib\python>>@setINSTANCE_HOME=<<zeo實例的安裝目錄>>@setPYTHONPATH=%SOFTWARE_HOME%@setCONFIG_FILE=%INSTANCE_HOME%\etc\zeo.conf@setZEO_RUN=%SOFTWARE_HOME%\ZEO\runzeo.py"%PYTHON%""%ZEO_RUN%"-C"%CONFIG_FILE%"注意,上面的PYTHON、SOFTWARE_HOME、INSTANCE_HOME需要替換為實際的路徑。如果希望以服務(wù)的方式運(yùn)行ZEOServer,則需要在zeo\bin下手工添加一個zeoservice.py的文件:importos.pathimportsysfromnt_svcutils.serviceimportServicePYTHON=r'<<python.exe文件的完整路徑>>'SOFTWARE_HOME=r'<<zope安裝路徑\lib\python>>'INSTANCE_HOME=r'<<zeo實例的安裝目錄>>'ZOPE_BIN=r'<<zope安裝路徑\bin>>'ZEO_RUN=SOFTWARE_HOME+r'\ZEO\runzeo.py'CONFIG_FILE=os.path.join(INSTANCE_HOME,'etc','zeo.conf')PYTHONSERVICE_EXE=ZOPE_BIN+r'\PythonService.exe'#Setuptheenvironment,sosub-processesseethesevariablesparts=os.environ.get("PYTHONPATH","").split(os.pathsep)ifSOFTWARE_HOMEnotinparts:parts=filter(None,[SOFTWARE_HOME]+parts)os.environ["PYTHONPATH"]=os.pathsep.join(parts)os.environ["INSTANCE_HOME"]=INSTANCE_HOMEsys.path.insert(0,SOFTWARE_HOME)servicename='ZEO_'+str(hash(INSTANCE_HOME.lower()))classInstanceService(Service):_svc_name_=servicename_svc_display_name_='ZEOinstanceat'+INSTANCE_HOME_exe_name_=PYTHONSERVICE_EXEprocess_runner=PYTHONprocess_args='"'+ZEO_RUN+'"-C"'+CONFIG_FILE+'"'if__name__=='__main__':importwin32serviceutilwin32serviceutil.HandleCommandLine(InstanceService)同樣上面的PYTHON、SOFTWARE_HOME、INSTANCE_HOME、ZOPE_BIN需要調(diào)整為實際的路徑。安裝為服務(wù)的方法為:pythonzeoservice.pyinstall如果需要安裝為自啟動的方式,可執(zhí)行:pythonzeoservice.pyinstall--startupauto啟動服務(wù),可執(zhí)行:pythonzeoservice.pystart8.5.4.3

ClientStorage的配置默認(rèn)情況下,ZEOServer上包括一個名字為1的Storage??烧{(diào)整zope.conf的配置,讓整個Zope根連接到ZEOServer上。首先需要把從前整個<zodb_dbmain>節(jié)注釋掉,然后增加下面的配置:<zodb_dbmain>mount-point/#ZODB緩存,單位為數(shù)據(jù)庫的對象cache-size5000<zeoclient>#ZEO服務(wù)器的主機(jī)和端口serverlocalhost:9000#ZEO服務(wù)中的Storage名storage1#一個名字namezeostorage#臨時緩存文件的存放文件夾var$INSTANCE/var#ZEOClient在文件系統(tǒng)上的緩存,單位為字節(jié)cache-size200MB#注意:去除下行注釋,可永久保存緩存,但此功能面前還不成熟#clientzeo1</zeoclient></zodb_db>上面的配置zeoclient節(jié)中,包括連接和ZEO緩存2部分配置。連接方面,server指定了ZEO服務(wù)器和端口信息;storage是在ZEOServer上的Storage的名字,下面會詳細(xì)介紹。這里的ZEO緩存,不同于前面的ZODB緩存。ZODB緩存是在內(nèi)存中緩存已經(jīng)讀取的對象;而ZEO緩存,是在ZEOClient的文件系統(tǒng)中,緩存從ZEOServer上讀取的對象,避免每次耗時的網(wǎng)絡(luò)讀取。zeoclient節(jié)中的cache-size是字節(jié)數(shù),而不是對象數(shù)量。緩存將存放在var參數(shù)指定的位置。如果不設(shè)置client參數(shù),每次服務(wù)器重新啟動,將重新生成緩存;而一旦設(shè)置client名字,可將緩存永久保存,下次啟動可直接讀取上次遺留的緩存數(shù)據(jù),避免再次從服務(wù)器讀取。配置完成后,重新啟動Zope服務(wù)器,即可生效。8.5.4.4

配置ZEOServerZEOServer實際上是一個獨(dú)立的存儲服務(wù)器,它監(jiān)聽某個端口,為ZEOClientStorage提供服務(wù)。ZEO實例的配置文件位于etc/zeo.conf。這個文件包括zeo、filestorage等多個節(jié)。典型的zeo節(jié)如下:<zeo>address9000read-onlyfalseinvalidation-queue-size100#pid-filename$INSTANCE/var/ZEO.pid#monitor-addressPORT#transaction-timeoutSECONDS</zeo>其中,address是服務(wù)器的監(jiān)聽端口,這里使用的9000號端口,可ClientStorage中的端口一致。由于連接到這個端口并不需要權(quán)限認(rèn)證,為了避免惡意連接破壞數(shù)據(jù),一般需要在服務(wù)器上設(shè)置防火墻,只允許指定的服務(wù)器來連接。如果是ZEOServer和ZEOClient都在同一臺計算機(jī)上運(yùn)行,而且使用的是unix/linux的操作系統(tǒng),則也可使用unix域套接字(Unix-domainsocket),比如在zeo.conf中設(shè)置:address$INSTANCE/var/zeo.sock這樣在ZEOClient的zope.conf中需要這樣設(shè)置ZEOClientStorage到ZEOServer之間的鏈接地址:<zeoclient>server/path/to/zeo/var/zeo.sock....如果設(shè)置monitor-address,則可telenet到這個端口,檢查ZEOServer的運(yùn)行情況,包括連接數(shù)量,Storage清單,沖突發(fā)生情況等。比如將9001做為監(jiān)聽端口:monitor-address9001可如下查看服務(wù)器運(yùn)行情況,如下:$telnetlocalhost9001Trying127.0.0.1...Connectedtolocalhost.Escapecharacteris'^]'.ZEOmonitorserverversion3.4.4TueDec1211:38:452006Storage:1Serverstarted:TueDec1211:34:492006Clients:1Clientsverifying:0Activetransactions:0Commits:28Aborts:0Loads:1Stores:420Conflicts:0Conflictsresolved:0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論