????????????????????????????????????第三章: 持久性
? ? ? ? PPS在運行時是在內(nèi)存中維護它的對象的拣展。如有需要彭沼,它將:
? ? ? ? ? ?? (1)將其對象保存到持久存儲中,可以在運行時按需保存备埃,也可以在關(guān)閉時保存
? ? ? ? ? ?? (2)在啟動時恢復(fù)其對象姓惑,或者立即恢復(fù),也可在第一次加載時(延遲加載)
? ?? ( 注:PPS也可以用于創(chuàng)建很少(或從未)被發(fā)布或被訂閱按脚,但需要持久性的對象于毙。“關(guān)機”指的是PPS服務(wù)器進程的有序退出乘寒。有序退出可以由SIGTERM望众、SIGINT或SIGQUIT觸發(fā)。由于其他信號(例如SIGKILL伞辛、SIGSEGV和SIGABRT)不會導(dǎo)致有序退出烂翰,因此它們不會構(gòu)成持久性目的的“關(guān)閉”。)
一:持久存儲
????????PPS支持跨重啟的持久存儲蚤氏。這種存儲需要可靠的文件系統(tǒng)甘耿。
????????PPS使用的底層持久存儲依賴于一個可靠的文件系統(tǒng),例如:
? ? ? ? (1) disk — Power-Safe filesystem
? ? ? ? (2)NAND Flash — ETFS filesystem
? ? ? ? (3)Nor Flash — FFS3 filesystem
? ? ? ? (4)other — customer-generated filesystem
????????如果需要將對象持久化到專用的硬件竿滨,比如小型NVRAM(不支持文件系統(tǒng))佳恬,那么可以創(chuàng)建自己的客戶端捏境,訂閱要保存的PPS對象。在每個對象更改時毁葱,PPS將通知您的客戶端垫言,允許客戶端實時更新NVRAM。
????????持久性和文件系統(tǒng)的限制
????????存儲PPS對象的持久性目錄使用與PPS根目錄完全相同的目錄層次結(jié)構(gòu)倾剿。因此筷频,對象持久性受到路徑和文件名長度以及底層文件系統(tǒng)的目錄嵌套限制的限制。
????????例如前痘,QNX Neutrino NFS服務(wù)器支持最大嵌套深度為15個級別凛捏。此限制也適用于使用此服務(wù)的PPS。
二:保存對象
? ? ?? 在關(guān)閉時芹缔,PPS總是將修改后的對象保存在一個持久的文件系統(tǒng)中坯癣。你還可以通過調(diào)用對象上的fsync()接口來強制PPS在任何時候保存對象。
? ? ?? 當(dāng)PPS將其數(shù)據(jù)保存在持久文件系統(tǒng)中時最欠,它將每個對象保存在自己的文件中示罗,保存在復(fù)制PPS對象樹的層次結(jié)構(gòu)的目錄層次結(jié)構(gòu)中。例如窒所,對于默認(rèn)配置鹉勒,PPS對象/ PPS /example/object1存儲在/var/pps/example/object1.
? ? ?? PPS目錄的默認(rèn)位置是/var/pps.可以使用PPS -p選項更改此位置.
? ? ??您 可以編輯PPS文件的持久版本帆锋。如果安全性對您的系統(tǒng)很重要吵取,您應(yīng)該讓PPS將其數(shù)據(jù)保存在加密的文件系統(tǒng)中。
? ? ?? 您可以設(shè)置對象和屬性限定符锯厢,使PPS不保存特定的對象或?qū)傩浴?/p>
? ? ?? 為持久存儲更改目錄
? ? ?? root PPS對象樹(默認(rèn)為/ PPS)看起來像這樣:
? ? ? PPS從持久化樹(默認(rèn)情況下為/var/PPS)填充根對象樹皮官,其中存儲您希望持久化的對象和屬性。
? ? ?? 當(dāng)需要要指定一個不同的目錄作為持久存儲時:
? ? ? (1)創(chuàng)建您自己的持久性目錄(如mkdir /myobjects)实辑。
? ? ? (2)從不同的掛載點(例如/fs/ PPS)啟動PPS服務(wù)捺氢,并指定新的持久性目錄:
? ? ? ? ? ? ?? pps -m /fs/pps -p /myobjects
三:加載對象
? ? ?? 當(dāng)PPS啟動時,它會立即從持久文件系統(tǒng)上以已編碼的文件名構(gòu)建目錄層次結(jié)構(gòu)剪撬。
? ? ?? 在其默認(rèn)配置中摄乒,PPS到第一次訪問某個文件時才會延遲加載目錄中的對象。訪問對象可以通過對PPS對象的進行open()調(diào)用残黑,也可以是對PPS目錄的進行readdir()調(diào)用馍佑。
? ? ?? 您可以通過在啟動時提供-l(“el”)選項來更改配置,以擁有PPS梨水。