一、JavaWeb中的持久化和算法中的持久化
數(shù)據(jù)的“持久化”(Persistence) 和算法里面的“可持久化”(Persistent) 是不同的概念。前者你可以認(rèn)為是保存,大概的感覺是你看內(nèi)存里面的東西掉個(gè)電就沒了一點(diǎn)也不持久。硬盤里的東西看起來(lái)就持久多了。后者的概念是把每一個(gè)歷史時(shí)刻都記錄下來(lái)供操作使用。
什么是持久化
孫衛(wèi)琴的《精通Hibernate:Java對(duì)象持久化技術(shù)詳解》中有如下的解釋,感覺還是比較完整的。摘抄如下:
狹義的理解: “持久化”僅僅指把域?qū)ο笥谰帽4娴綌?shù)據(jù)庫(kù)中廣義的理解,“持久化”包括和數(shù)據(jù)庫(kù)相關(guān)的各種操作。保存:把域?qū)ο笥谰帽4娴綌?shù)據(jù)庫(kù)。更新:更新數(shù)據(jù)庫(kù)中域?qū)ο蟮臓顟B(tài)。刪除:從數(shù)據(jù)庫(kù)中刪除一個(gè)域?qū)ο?。加載:根據(jù)特定的OID,把一個(gè)域?qū)ο髲臄?shù)據(jù)庫(kù)加載到內(nèi)存。查詢:根據(jù)特定的查詢條件,把符合查詢條件的一個(gè)或多個(gè)域?qū)ο髲臄?shù)據(jù)庫(kù)加載內(nèi)在存中。為什么要持久化
持久化技術(shù)封裝了數(shù)據(jù)訪問(wèn)細(xì)節(jié),為大部分業(yè)務(wù)邏輯提供面向?qū)ο蟮腁PI。
通過(guò)持久化技術(shù)可以減少訪問(wèn)數(shù)據(jù)庫(kù)數(shù)據(jù)次數(shù),增加應(yīng)用程序執(zhí)行速度;代碼重用性高,能夠完成大部分?jǐn)?shù)據(jù)庫(kù)操作;松散耦合,使持久化不依賴于底層數(shù)據(jù)庫(kù)和上層業(yè)務(wù)邏輯實(shí)現(xiàn),更換數(shù)據(jù)庫(kù)時(shí)只需修改配置文件而不用修改代碼。延伸閱讀:
二、java持久化技術(shù)
java持久化技術(shù)是為了將java對(duì)象與數(shù)據(jù)庫(kù)表對(duì)應(yīng)。java中存儲(chǔ)很多對(duì)象在內(nèi)存是很浪費(fèi)空間的,內(nèi)存過(guò)于昂貴,與硬盤、磁帶、光盤等外存相比,內(nèi)存的價(jià)格要高2~3個(gè)數(shù)量級(jí),而且維持成本也高,至少需要一直供電吧。所以即使對(duì)象不需要永久保存,也會(huì)因?yàn)閮?nèi)存的容量限制不能一直呆在內(nèi)存中,需要持久化來(lái)緩存到外存。
持久化是將程序數(shù)據(jù)在持久狀態(tài)和瞬時(shí)狀態(tài)間轉(zhuǎn)換的機(jī)制。通俗的講,就是瞬時(shí)數(shù)據(jù)(比如內(nèi)存中的數(shù)據(jù),是不能永久保存的)持久化為持久數(shù)據(jù)(比如持久化至數(shù)據(jù)庫(kù)中,能夠長(zhǎng)久保存)。