????????????????????????????????????第三章: 持久性
? ? ? ? PPS在運(yùn)行時(shí)是在內(nèi)存中維護(hù)它的對(duì)象的。如有需要,它將:
? ? ? ? ? ?? (1)將其對(duì)象保存到持久存儲(chǔ)中,可以在運(yùn)行時(shí)按需保存,也可以在關(guān)閉時(shí)保存
? ? ? ? ? ?? (2)在啟動(dòng)時(shí)恢復(fù)其對(duì)象,或者立即恢復(fù),也可在第一次加載時(shí)(延遲加載)
? ?? ( 注:PPS也可以用于創(chuàng)建很少(或從未)被發(fā)布或被訂閱,但需要持久性的對(duì)象?!瓣P(guān)機(jī)”指的是PPS服務(wù)器進(jìn)程的有序退出。有序退出可以由SIGTERM、SIGINT或SIGQUIT觸發(fā)。由于其他信號(hào)(例如SIGKILL、SIGSEGV和SIGABRT)不會(huì)導(dǎo)致有序退出,因此它們不會(huì)構(gòu)成持久性目的的“關(guān)閉”。)
一:持久存儲(chǔ)
????????PPS支持跨重啟的持久存儲(chǔ)。這種存儲(chǔ)需要可靠的文件系統(tǒng)。
????????PPS使用的底層持久存儲(chǔ)依賴于一個(gè)可靠的文件系統(tǒng),例如:
? ? ? ? (1) disk — Power-Safe filesystem
? ? ? ? (2)NAND Flash — ETFS filesystem
? ? ? ? (3)Nor Flash — FFS3 filesystem
? ? ? ? (4)other — customer-generated filesystem
????????如果需要將對(duì)象持久化到專用的硬件,比如小型NVRAM(不支持文件系統(tǒng)),那么可以創(chuàng)建自己的客戶端,訂閱要保存的PPS對(duì)象。在每個(gè)對(duì)象更改時(shí),PPS將通知您的客戶端,允許客戶端實(shí)時(shí)更新NVRAM。
????????持久性和文件系統(tǒng)的限制
????????存儲(chǔ)PPS對(duì)象的持久性目錄使用與PPS根目錄完全相同的目錄層次結(jié)構(gòu)。因此,對(duì)象持久性受到路徑和文件名長(zhǎng)度以及底層文件系統(tǒng)的目錄嵌套限制的限制。
????????例如,QNX Neutrino NFS服務(wù)器支持最大嵌套深度為15個(gè)級(jí)別。此限制也適用于使用此服務(wù)的PPS。
二:保存對(duì)象
? ? ?? 在關(guān)閉時(shí),PPS總是將修改后的對(duì)象保存在一個(gè)持久的文件系統(tǒng)中。你還可以通過調(diào)用對(duì)象上的fsync()接口來強(qiáng)制PPS在任何時(shí)候保存對(duì)象。
? ? ?? 當(dāng)PPS將其數(shù)據(jù)保存在持久文件系統(tǒng)中時(shí),它將每個(gè)對(duì)象保存在自己的文件中,保存在復(fù)制PPS對(duì)象樹的層次結(jié)構(gòu)的目錄層次結(jié)構(gòu)中。例如,對(duì)于默認(rèn)配置,PPS對(duì)象/ PPS /example/object1存儲(chǔ)在/var/pps/example/object1.
? ? ?? PPS目錄的默認(rèn)位置是/var/pps.可以使用PPS -p選項(xiàng)更改此位置.
? ? ??您 可以編輯PPS文件的持久版本。如果安全性對(duì)您的系統(tǒng)很重要,您應(yīng)該讓PPS將其數(shù)據(jù)保存在加密的文件系統(tǒng)中。
? ? ?? 您可以設(shè)置對(duì)象和屬性限定符,使PPS不保存特定的對(duì)象或?qū)傩浴?/p>
? ? ?? 為持久存儲(chǔ)更改目錄
? ? ?? root PPS對(duì)象樹(默認(rèn)為/ PPS)看起來像這樣:

? ? ? PPS從持久化樹(默認(rèn)情況下為/var/PPS)填充根對(duì)象樹,其中存儲(chǔ)您希望持久化的對(duì)象和屬性。
? ? ?? 當(dāng)需要要指定一個(gè)不同的目錄作為持久存儲(chǔ)時(shí):
? ? ? (1)創(chuàng)建您自己的持久性目錄(如mkdir /myobjects)。
? ? ? (2)從不同的掛載點(diǎn)(例如/fs/ PPS)啟動(dòng)PPS服務(wù),并指定新的持久性目錄:
? ? ? ? ? ? ?? pps -m /fs/pps -p /myobjects
三:加載對(duì)象
? ? ?? 當(dāng)PPS啟動(dòng)時(shí),它會(huì)立即從持久文件系統(tǒng)上以已編碼的文件名構(gòu)建目錄層次結(jié)構(gòu)。
? ? ?? 在其默認(rèn)配置中,PPS到第一次訪問某個(gè)文件時(shí)才會(huì)延遲加載目錄中的對(duì)象。訪問對(duì)象可以通過對(duì)PPS對(duì)象的進(jìn)行open()調(diào)用,也可以是對(duì)PPS目錄的進(jìn)行readdir()調(diào)用。
? ? ?? 您可以通過在啟動(dòng)時(shí)提供-l(“el”)選項(xiàng)來更改配置,以擁有PPS。