版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Zope對(duì)象數(shù)據(jù)庫(ZODB)Zope默認(rèn)將所有數(shù)據(jù)存放在Zope對(duì)象數(shù)據(jù)庫(ZODB)中。ZODB實(shí)現(xiàn)了Python對(duì)象的透明存儲(chǔ),應(yīng)用的編寫幾乎不必考慮數(shù)據(jù)庫的操作。ZODB支持緩存、撤銷、事務(wù)、可插拔的存儲(chǔ)等高級(jí)特性。ZODB是Zope自帶的數(shù)據(jù)庫,但是也可以脫離于Zope獨(dú)立使用。本章適合系統(tǒng)管理員和系統(tǒng)集成人員閱讀。本章重點(diǎn)包括:ZODB的分區(qū)存儲(chǔ)配置ZODB的維護(hù)方法ZEO架構(gòu)的配置8.1
關(guān)系數(shù)據(jù)庫,還是對(duì)象數(shù)據(jù)庫關(guān)系數(shù)據(jù)庫(RDBMS)是一個(gè)很成熟的技術(shù)。這也是大多數(shù)軟件所采用的存儲(chǔ)技術(shù)。但是具體應(yīng)用的編寫,需要直接針對(duì)對(duì)象來操作。因此,往往通過一些O-R映射(對(duì)象-關(guān)系的映射),來將二者銜接。這最終導(dǎo)致基于關(guān)系數(shù)據(jù)庫的開發(fā)比較繁瑣。ZODB最大的優(yōu)點(diǎn)就是透明性,你根本不必編寫任何數(shù)據(jù)庫讀寫的代碼,省去了傳統(tǒng)的O-R映射代碼。Python的所有對(duì)象可保存為一個(gè)pickle數(shù)據(jù)塊,并可從pickle數(shù)據(jù)庫塊中恢復(fù)對(duì)象;而ZODB數(shù)據(jù)庫實(shí)際上就是對(duì)象pickle化后的一個(gè)數(shù)據(jù)庫??奢p松從ZODB數(shù)據(jù)庫中恢復(fù)一個(gè)對(duì)象。如果你的應(yīng)用中有大量不同類型的對(duì)象,相互之間有非常復(fù)雜的關(guān)系,而且可能模型可能經(jīng)常發(fā)生變化的時(shí)候,這時(shí)候關(guān)系數(shù)據(jù)庫可能無法承載了,而采用ZODB則是一個(gè)更好的選擇。內(nèi)容管理系統(tǒng)中存在各種不同的內(nèi)容類型,插件的安裝,要求系統(tǒng)能夠不斷擴(kuò)展。因此,ZODB特別適合內(nèi)容管理系統(tǒng)的開發(fā)。和關(guān)系數(shù)據(jù)庫一樣,ZODB也支持事務(wù):一次操作要么成功提交,要么失敗(執(zhí)行的時(shí)候拋出異常)回滾。不會(huì)出現(xiàn)事務(wù)執(zhí)行到一半出現(xiàn)異常,而數(shù)據(jù)已經(jīng)被改寫,導(dǎo)致數(shù)據(jù)不一致的情況。和關(guān)系數(shù)據(jù)庫相比,ZODB對(duì)象也存在一些缺點(diǎn),包括:ZODB中的數(shù)據(jù),不能脫離軟件獨(dú)立使用,而且目前只能使用python語言訪問自身是個(gè)黑箱,不支持跨語言的、通用的、類似SQL的訪問接口是九十年代才開始發(fā)展的技術(shù),不如關(guān)系數(shù)據(jù)庫從七十年代至現(xiàn)在發(fā)展得那么成熟8.2
Zope中ZODB的使用8.2.1
查看數(shù)據(jù)庫文件每個(gè)Zope實(shí)例中,包括一個(gè)var的子目錄,ZODB就是存放在這里。Zope服務(wù)第一次啟動(dòng)后,會(huì)自動(dòng)生成2個(gè)數(shù)據(jù)庫文件:Data.fs這就是ZODB的核心數(shù)據(jù)庫文件。網(wǎng)站備份的時(shí)候,只需要備份這個(gè)文件。Data.fs.indexZODB數(shù)據(jù)庫的對(duì)象索引文件。這個(gè)文件不是必須的,不必備份。啟動(dòng)的時(shí)候,可根據(jù)Data.fs自動(dòng)生成。我們?cè)赯MI中看到的所有對(duì)象,均保存在ZODB中。包括:腳本、顯示模板、工具對(duì)象、內(nèi)容等。8.2.2
Zope的默認(rèn)數(shù)據(jù)庫配置Zope提供了ZODB的基本管理界面。進(jìn)入ZMI界面的根目錄中,依次單擊【Control_Panel】->【DatabaseManagement】,我們可看到這個(gè)Zope實(shí)例所使用ZODB的清單,如圖8.1所示?!緢D8.1】Zope使用的數(shù)據(jù)庫默認(rèn)包括main和temporary這2個(gè)數(shù)據(jù)庫。main數(shù)據(jù)庫對(duì)應(yīng)前面看到Data.fs文件中。而temporary數(shù)據(jù)庫是一個(gè)使用內(nèi)存存儲(chǔ)的臨時(shí)數(shù)據(jù)庫,用于存放session這樣一些臨時(shí)對(duì)象。在Zope實(shí)例的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個(gè)數(shù)據(jù)庫的配置。main數(shù)據(jù)庫采用了filestorage作為存儲(chǔ),這也是Zope默認(rèn)的存儲(chǔ)機(jī)制,它最終存儲(chǔ)到了實(shí)例的var子目錄下的Data.fs文件中,mount-point表示這個(gè)文件對(duì)應(yīng)ZODB的根節(jié)點(diǎn)(/);而temporary數(shù)據(jù)庫采用了temporarystorage作為存儲(chǔ),將對(duì)象保存在內(nèi)存中,它將加載到ZODB的/temp_folder處??煽吹?,Zope采用了分區(qū)、可插拔存儲(chǔ)。這里有2個(gè)加載點(diǎn)(mount-point),并且使用了2個(gè)不同的存儲(chǔ)方法(storage)。Zope的ZODB和數(shù)據(jù)庫存儲(chǔ)之間關(guān)系如下:/(Zope根)<--main.fs(filestorage)|--..|--..`--temp_folder/<--內(nèi)存(temporarystorage)8.3
ZODB數(shù)據(jù)庫的存儲(chǔ)和加載8.3.1
MountPoint:使用多個(gè)ZODB數(shù)據(jù)庫8.3.1.1
加載時(shí)創(chuàng)建加載點(diǎn)對(duì)象為了避免單個(gè)zodb的數(shù)據(jù)庫文件過于龐大,可在zope.conf中配置更多的storage分開存放。這需要我們確定加載點(diǎn)的對(duì)象類型。如前面temporarystorage中,配置文件中有如下設(shè)置:container-classProducts.TemporaryFolder.TemporaryContainer如果要加載一個(gè)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)啟動(dòng)Zope后,可在ZMI的添加下拉框中選擇ZODBMountPoint,選擇【Createnewfoldersifthemountedobjectsdon'tyetexist】,單擊【Createselectedmountpoint】,如圖8.2所示。【圖8.2】加載時(shí)創(chuàng)建一個(gè)BTreeFolder2對(duì)象這樣,就可以創(chuàng)建一個(gè)test_folder的BTree文件夾,并掛接到一個(gè)獨(dú)立的名字為test.fs的storage上。在ZMI中可看到這個(gè)文件夾,如圖8.3所示?!緢D8.3】加載后的BTree文件夾8.3.1.2
加載初始化好的storage上面的加載很方便,但是有些對(duì)象不能簡單根據(jù)類(class)簡單創(chuàng)建,比如Plone站點(diǎn),或者Plone的文件夾,這些對(duì)象的創(chuàng)建過程很復(fù)雜。這樣,我們就需要預(yù)先在單獨(dú)的實(shí)例中,將這個(gè)storage初始化好,手工先創(chuàng)建一個(gè)加載點(diǎn)的對(duì)象。比如,我們可將Plone站點(diǎn)/plone單獨(dú)存放到一個(gè)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)建一個(gè)空的臨時(shí)Zope實(shí)例,在ZMI中,創(chuàng)建一個(gè)id為plone的Plone站點(diǎn)。完成后停止此實(shí)例,將實(shí)例的var文件夾中的Data.fs改名為plone.fs保存起來。此臨時(shí)Zope實(shí)例可刪除。配置ZODB的存儲(chǔ)結(jié)構(gòu)將plone.fs放置到需要運(yùn)行的Zope實(shí)例的var文件夾中,同時(shí)調(diào)整配置文件etc/zope.conf,在末尾增加如下配置:<zodb_dbplone>#PloneFileStoragedatabase<filestorage>path$INSTANCE/var/plone.fs</filestorage>mount-point/plone</zodb_db>重新啟動(dòng)Zope實(shí)例ZMI中,在添加下拉框中選擇【ZODBMountPoint】,出現(xiàn)下圖的加載表單。我們可以看到前面加載的test_folder的狀態(tài)為OK。選擇路徑plone,單擊【Createselectedmountpoint】,將plone掛載到ZODB樹上,如圖8.4所示?!緢D8.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】常見的幾種存儲(chǔ)名字說明FileStorage默認(rèn)的存儲(chǔ)介質(zhì),使用一個(gè)文件存儲(chǔ)。簡單、性能好,但文件會(huì)越來越大TemporaryStorage將對(duì)象保存在內(nèi)存中,適合保存session等臨時(shí)對(duì)象。DirectoryStorage數(shù)據(jù)分散在文件夾中,pack操作非常慢。也可去除保留歷史功能,不必pack。OracleStorage存儲(chǔ)在Oracle數(shù)據(jù)庫中。仍然保存的是不可直接查看的對(duì)象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)擊任何一個(gè)數(shù)據(jù)庫,可對(duì)數(shù)據(jù)庫進(jìn)行監(jiān)視和維護(hù)操作。ZODB最常用的FileStorage存儲(chǔ),所有操作均在數(shù)據(jù)文件末尾記錄,能夠保留所有操作歷史,它能夠支持撤銷(undo)操作。這樣,即便是刪除操作,也不能減小數(shù)據(jù)庫文件的大小。頻繁修改,可能導(dǎo)致數(shù)據(jù)庫文件大小迅速增加。ZODB數(shù)據(jù)庫管理頁面中,可對(duì)數(shù)據(jù)庫進(jìn)行擠壓(pack)操作,清除部分或者全部undo歷史,減小數(shù)據(jù)庫文件的大小。界面如圖8.6所示?!緢D8.6】擠壓(pack)ZODB數(shù)據(jù)庫8.4.2
數(shù)據(jù)庫緩存ZODB數(shù)據(jù)庫中存放了大量的對(duì)象。一旦Zope啟動(dòng),需要首先將這些對(duì)象從數(shù)據(jù)庫中讀取到內(nèi)存中,才能被利用。將對(duì)象從數(shù)據(jù)庫加載到內(nèi)存的過程,通常比較慢。但是一旦加載到內(nèi)存中,ZODB會(huì)將對(duì)象保留在內(nèi)存的緩沖區(qū)中一段時(shí)間,避免反復(fù)加載導(dǎo)致性能下降。第一次訪問Plone站點(diǎn)的時(shí)候,由于大量對(duì)象初次加載,因此頁面打開會(huì)比較慢;之后的訪問,由于對(duì)象已經(jīng)進(jìn)入內(nèi)存,速度則會(huì)加快很多。由于內(nèi)存大小有限,不能將全部對(duì)象加載到內(nèi)存中。Zope默認(rèn)支持緩存5000個(gè)對(duì)象。根據(jù)服務(wù)器內(nèi)存的大小,可在zope.conf文件中調(diào)整緩存對(duì)象數(shù)目:<zodb_dbplone>#PloneFileStoragedatabase<filestorage>path$INSTANCE/var/plone.fs</filestorage>mount-point/plone#每個(gè)線程緩存5000個(gè)對(duì)象(注:不是內(nèi)存大小)cache_size100000</zodb_db>注釋這里的cache_size,表示一個(gè)線程的緩存對(duì)象數(shù)目。Zope的線程數(shù)量是在zserver-threads參數(shù)中設(shè)定的,二者相乘cache_size*zserver-threads才是總的緩存對(duì)象數(shù)目。在調(diào)整cache-size的時(shí)候,需要同時(shí)考慮zserver-threads參數(shù)。ZMI的【DatabaseManagement】頁面提供了一組緩存監(jiān)視和管理工具:Activity:ZODB讀寫圖表,便于調(diào)整cache的設(shè)置。如果ZODB對(duì)象加載太多,則可能需要增加緩存。CacheParameters:查看緩存參數(shù),以及當(dāng)前緩存的占用情況FlushCache:在這里可清除內(nèi)存中的緩存對(duì)象,釋放內(nèi)存8.4.3
數(shù)據(jù)庫備份Zope默認(rèn)的filestroage,直接備份數(shù)據(jù)庫文件即可(var/Data.fs)。這種備份也稱做完全備份。如果數(shù)據(jù)庫文件比較大,這樣保留多天完全備份會(huì)占用大量空間。Zope提供了一個(gè)增量備份的工具,可僅僅備份上次備份后修改的內(nèi)容。這個(gè)增量工具位于Zope軟件安裝目錄下的bin/repozo.py中??蓤?zhí)行如下命令備份并壓縮:repozo.py-Bvz-fData.fs-r[備份到的文件夾路徑]其中的-z參數(shù)表示壓縮后備份??杉由?F/--full參數(shù),強(qiáng)制做一個(gè)完全備份:repozo.py-Bvz-F-fData.fs-r[備份到的文件夾路徑]如果要從備份數(shù)據(jù)中恢復(fù)一個(gè)最新版本到文件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還包括幾個(gè)其他的filestorage工具腳本,均位于zope安裝目錄下的bin文件夾中。比如fstail.py可查看/導(dǎo)出ZODB最近的事務(wù)執(zhí)行情況,類似undo中的事務(wù)清單;fstest.py可對(duì)數(shù)據(jù)庫進(jìn)行完整性測試。具體使用方法,可查看各自腳本文件中的注釋說明文本。8.5
ZEO架構(gòu)如果網(wǎng)站的訪問請(qǐng)求越來越多,那么站點(diǎn)的訪問響應(yīng)可能會(huì)越來越慢。最差的情況下,太多的請(qǐng)求可能導(dǎo)致站點(diǎn)完全過載,停止處理請(qǐng)求甚至崩潰。所有的應(yīng)用服務(wù)器,不僅僅是Zope,都會(huì)遇到這個(gè)問題。最直接的處理方法是使用多臺(tái)計(jì)算機(jī)來提供服務(wù)。但使用多臺(tái)計(jì)算機(jī),也存在另外的問題。比如,如果你使用3臺(tái)運(yùn)行Zope的計(jì)算機(jī)來提供服務(wù),那么這3臺(tái)計(jì)算機(jī)上的數(shù)據(jù)和訪問結(jié)果必須完全相同。對(duì)于內(nèi)容不斷變化的網(wǎng)站,手工同步多個(gè)站點(diǎn)的數(shù)據(jù)是不大可能的。為了解決這個(gè)問題,Zope公司開發(fā)了Zope企業(yè)對(duì)象(ZEO:ZopeEnterpriseObjects)。8.5.1
ZEO是什么ZEO是讓你的站點(diǎn)可以在多臺(tái)計(jì)算機(jī)上運(yùn)行的技術(shù)。這也常被叫做負(fù)載均衡技術(shù)。在多臺(tái)計(jì)算機(jī)上運(yùn)行Zope,你可將請(qǐng)求分布到多臺(tái)計(jì)算機(jī)上,減少單臺(tái)計(jì)算機(jī)的負(fù)載量。同時(shí),如果其中一臺(tái)服務(wù)器出問題了,其他的服務(wù)器仍然能夠繼續(xù)服務(wù)。ZEO在多臺(tái)服務(wù)器上運(yùn)行Zope,并能夠確保各個(gè)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)會(huì)連接到公共的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請(qǐng)求處理,是服務(wù)器;另外一方面,從ZEOServer那里得到數(shù)據(jù),是客戶機(jī)。8.5.2
什么時(shí)候使用ZEO有很多理由使用ZEO,比如:你的網(wǎng)站點(diǎn)擊訪問量越來越大,希望得到更快的處理。你可使用ZEO,進(jìn)行負(fù)載均衡,提高響應(yīng)。你的網(wǎng)站非常關(guān)鍵,需要24*7上線。這樣ZEO可給你一個(gè)容錯(cuò)的環(huán)境。希望把你的站點(diǎn)分布到很多的鏡像站點(diǎn)上。充分利用服務(wù)器的多CPU。目前一個(gè)Zope實(shí)例只能利用一個(gè)CPU(Python的限制),使用ZEO,可充分利用多處理器的服務(wù)器架構(gòu)。你希望在服務(wù)器正常運(yùn)行的同時(shí),能夠開辟一個(gè)調(diào)試站點(diǎn)。這對(duì)開發(fā)人員非常有用。與此同時(shí),部署ZEO意味著更加復(fù)雜的安裝、配置、管理方面的操作。部署ZEO適合高級(jí)用戶使用。大多數(shù)Zope用戶,并不必需要ZEO。8.5.3
ZEO原理前面我們知道ZODB有一個(gè)叫做ClientStorage特殊存儲(chǔ),這個(gè)存儲(chǔ)就是實(shí)現(xiàn)了ZEOClient的功能,用來和ZEOServer通訊。如圖8.8所示:【圖8.8】ZEO工作原理圖我們看到,ClientStorage遠(yuǎn)程連接到ZEOServer后,最終還是連接到了一個(gè)FileStorage。因此,ClientStorage實(shí)際上就是遠(yuǎn)程的FileStorage的代理。ZODB完全屏蔽了各種Storage的差異。對(duì)于Zope應(yīng)用服務(wù)器上運(yùn)行的對(duì)象來說,完全無需知道底層的存儲(chǔ)機(jī)制。8.5.4
安裝和配置ZEO8.5.4.1
安裝ZEOServer要運(yùn)行ZEOServer,需要首先創(chuàng)建一個(gè)ZEO實(shí)例(ZEOInstance),也就是ZEOServer的運(yùn)行環(huán)境。Zope軟件的bin目錄中,包括一個(gè)mkzeoinstance.py腳本,運(yùn)行它可創(chuàng)建一個(gè)ZEO實(shí)例。比如:mkzeoinstance.py/var/zope/plone/zeo9000其中,/var/zope/plone/zeo是ZEO實(shí)例的安裝目錄,9000是服務(wù)監(jiān)聽端口。ZEO實(shí)例的目錄結(jié)構(gòu),和Zope實(shí)例的目錄結(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可在各種平臺(tái)上運(yùn)行。不幸的是,迄今為止,默認(rèn)創(chuàng)建實(shí)例安裝后,Zope的ZEOServer在Windows平臺(tái)上并沒有可直接使用的運(yùn)行腳本,這需要我們手工完成??稍趜eo\bin目錄下添加一個(gè)批處理文件運(yùn)行zeo服務(wù)器,文件名為runzeo.bat:@setPYTHON=<<python.exe文件的完整路徑>>@setSOFTWARE_HOME=<<zope安裝路徑\lib\python>>@setINSTANCE_HOME=<<zeo實(shí)例的安裝目錄>>@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需要替換為實(shí)際的路徑。如果希望以服務(wù)的方式運(yùn)行ZEOServer,則需要在zeo\bin下手工添加一個(gè)zeoservice.py的文件:importos.pathimportsysfromnt_svcutils.serviceimportServicePYTHON=r'<<python.exe文件的完整路徑>>'SOFTWARE_HOME=r'<<zope安裝路徑\lib\python>>'INSTANCE_HOME=r'<<zeo實(shí)例的安裝目錄>>'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)整為實(shí)際的路徑。安裝為服務(wù)的方法為:pythonzeoservice.pyinstall如果需要安裝為自啟動(dòng)的方式,可執(zhí)行:pythonzeoservice.pyinstall--startupauto啟動(dòng)服務(wù),可執(zhí)行:pythonzeoservice.pystart8.5.4.3
ClientStorage的配置默認(rèn)情況下,ZEOServer上包括一個(gè)名字為1的Storage??烧{(diào)整zope.conf的配置,讓整個(gè)Zope根連接到ZEOServer上。首先需要把從前整個(gè)<zodb_dbmain>節(jié)注釋掉,然后增加下面的配置:<zodb_dbmain>mount-point/#ZODB緩存,單位為數(shù)據(jù)庫的對(duì)象cache-size5000<zeoclient>#ZEO服務(wù)器的主機(jī)和端口serverlocalhost:9000#ZEO服務(wù)中的Storage名storage1#一個(gè)名字namezeostorage#臨時(shí)緩存文件的存放文件夾var$INSTANCE/var#ZEOClient在文件系統(tǒng)上的緩存,單位為字節(jié)cache-size200MB#注意:去除下行注釋,可永久保存緩存,但此功能面前還不成熟#clientzeo1</zeoclient></zodb_db>上面的配置zeoclient節(jié)中,包括連接和ZEO緩存2部分配置。連接方面,server指定了ZEO服務(wù)器和端口信息;storage是在ZEOServer上的Storage的名字,下面會(huì)詳細(xì)介紹。這里的ZEO緩存,不同于前面的ZODB緩存。ZODB緩存是在內(nèi)存中緩存已經(jīng)讀取的對(duì)象;而ZEO緩存,是在ZEOClient的文件系統(tǒng)中,緩存從ZEOServer上讀取的對(duì)象,避免每次耗時(shí)的網(wǎng)絡(luò)讀取。zeoclient節(jié)中的cache-size是字節(jié)數(shù),而不是對(duì)象數(shù)量。緩存將存放在var參數(shù)指定的位置。如果不設(shè)置client參數(shù),每次服務(wù)器重新啟動(dòng),將重新生成緩存;而一旦設(shè)置client名字,可將緩存永久保存,下次啟動(dòng)可直接讀取上次遺留的緩存數(shù)據(jù),避免再次從服務(wù)器讀取。配置完成后,重新啟動(dòng)Zope服務(wù)器,即可生效。8.5.4.4
配置ZEOServerZEOServer實(shí)際上是一個(gè)獨(dú)立的存儲(chǔ)服務(wù)器,它監(jiān)聽某個(gè)端口,為ZEOClientStorage提供服務(wù)。ZEO實(shí)例的配置文件位于etc/zeo.conf。這個(gè)文件包括zeo、filestorage等多個(gè)節(jié)。典型的zeo節(jié)如下:<zeo>address9000read-onlyfalseinvalidation-queue-size100#pid-filename$INSTANCE/var/ZEO.pid#monitor-addressPORT#transaction-timeoutSECONDS</zeo>其中,address是服務(wù)器的監(jiān)聽端口,這里使用的9000號(hào)端口,可ClientStorage中的端口一致。由于連接到這個(gè)端口并不需要權(quán)限認(rèn)證,為了避免惡意連接破壞數(shù)據(jù),一般需要在服務(wù)器上設(shè)置防火墻,只允許指定的服務(wù)器來連接。如果是ZEOServer和ZEOClient都在同一臺(tái)計(jì)算機(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到這個(gè)端口,檢查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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 洗手護(hù)士保持手部清潔
- 2025-2030全球游戲QA和測試服務(wù)行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國三維木質(zhì)墻板行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025年全球及中國電儲(chǔ)水熱水器行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025-2030全球加厚防爆高壓鍋行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國鋁箔膠囊行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025年全球及中國工作站用橋式起重機(jī)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025-2030全球法務(wù)技術(shù)服務(wù)行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025合同模板房地產(chǎn)收購合同昆山某國際廣場整體購買協(xié)議
- 借款合同擔(dān)保書范本
- 2025年個(gè)人合法二手車買賣合同(4篇)
- 2025年山西國際能源集團(tuán)限公司所屬企業(yè)招聘43人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 《小英雄雨來》讀書分享會(huì)
- 中央導(dǎo)管相關(guān)血流感染防控
- 農(nóng)業(yè)行政執(zhí)法現(xiàn)狀及相關(guān)法律法規(guī)課件
- 產(chǎn)時(shí)子癇應(yīng)急演練文檔
- 小學(xué)美術(shù)-《神奇的肥皂粉》教學(xué)設(shè)計(jì)學(xué)情分析教材分析課后反思
- 測量管理體系內(nèi)審檢查表
- 班組月度考核評(píng)分表
- 部編版一年級(jí)下冊(cè)《道德與法治》教學(xué)工作計(jì)劃及全冊(cè)教案
- 三重一大事項(xiàng)決策流程
評(píng)論
0/150
提交評(píng)論