JackRabbit的來源


題記 

寫這系列有點老調重彈的味道,比如ahuaxuan已經在他的博客里對於JackRabbit 1.0做了很詳細的闡述。之所以再寫,是因為JCR推出了JCR 2.0,個人覺得有必要將一些新的特性再羅列一下。 

問題提出 

存取各種信息對於任何應用程序來說非常平常,大多數時候我們會把數據保存在關系數據庫中。數據庫處理規范數據類型十分在行,但是在處理如圖像、文檔等二進制數據時卻不是那么得心應手。 

盡管可以用文件系統作為替代——而且它們還提供了更好的性能。但它們既沒有提供用於搜索信息的查詢語言,也沒有提供表示關系或事務的概念。 

什么是JSR-170 

幸運的是,被稱為Java內容倉庫(Java Content Repository,JCR)的JSR-170,試圖以獨立於具體實現的方式解決這些(以及其它)問題。即,不論底層資源(如,數據庫,本地或虛擬文件系統)是什么,API都將相同。在數據存儲之上,JCR提供諸如訪問粒度控制、版本控制、內容事件、全文檢索和過濾等內容服務。 

采用JCR能帶來什么呢?包括如事務、伸縮性、數據庫端的查詢、使用超大文件帶來的真正好處、流、訪問控制和文件系統端的層次結構,以及諸如版本標定、全文檢索,以及“數據優先”方法。 

由Day Software領導的JSR-170背后的專家組付出了艱辛的勞動。2005年6月完成,在javax.jcr包中,API包含了大約50個類(主要是接口和異常)。 

2006年早些時候,我們的主角JackRabbit登場了, 它是JCR 1.0版本的參考實現,除了JackRabbit之外,還有許多開源或者商業的JCR 1.0的不同實現。 

JCR概覽 
JCR 建立在內容倉庫的概念之上。倉庫使用“樹結構”保存信息。 

樹由節點和屬性組成。1個節點有且只有1個父親,有任意數目的孩子(子節點)和任意數目的屬性。1個屬性有且只有一個父親(它是節點),它沒有子節點,由一個名字和一個或多個值組成。 

屬性值的類型可以是:布爾(Boolean)、日期(Date)、雙精(Double),長整(Long),字符串(String)或流(Stream)。在JCR里,只有屬性可以被用來存儲信息,節點則被用來創建樹內部的“路徑”。 

你可以把JCR想成類似文件系統的目錄結構,節點是目錄,屬性則是實際的文件。 

JSR-170 提供了標准的JCR API接口包 -- javax.jcr包。API的核心類是Session,它代表客戶端和倉庫之間的連接。這個包還包含了那些組成倉庫的接口的定義:Workspace,Credentials,Node,Property,Item(Node和Property的超類)和Value。 

  • javax.jcr.query包負責處理查詢,
  • javax.jcr.nodetype包負責定義節點類型。
  • javax.jcr.version、javax.jcr.observation、javax.jcr.lock負責可選級別的功能。


JSR 283之后的JCR 2.0 

JSR-283 旨在從以下幾個方面改進JCR 1.0: 

  • 訪問控制和節點類型的管理
  • 通過新的標准節點類型(包括元信息和國際化)改進互操作性
  • 擴展內容建模能力
  • 聯邦、交叉倉庫和交叉工作區(Workspace)功能
  • 積極發展現有查詢語言、版本標定和觀察
  • Remoting和客戶/服務器協議映射(譯者注:Remoting是采用分布式進行編程的一種技術,主要用於管理跨應用程序域的同步和異步RPC會話。默認情況下,Remoting使用HTTP或TCP協議,並使用XML編碼的SOAP或本機二進制消息格式進行通信。)


因此JCR 2.0的API和JCR 1.0有很大的不同。可以參考: 
http://www.day.com/maven/jdiff-jcr1-jcr2/changes.html 

JackRabbit與NoSQL 

“NoSQL“這個有點浮泛的詞現在代表着幾大類數據庫,比如key-value型數據庫,面向文檔的數據庫等等。 

面向文檔的非關系數據庫主要解決的問題不是高性能的並發讀寫,而是保證海量數據存儲的同時,具有良好的查詢性能,一些傳統的應用,比如博客、Wiki等等,都是很適合應用面向文檔的數據庫的場景。 

JackRabbit就是一種面向文檔的數據庫,它和MongoDB,CouchDB的功能十分接近,優勢在於JackRabbit遵從JCR標准,日后可以遷移到其他同樣兼容JCR的性能更好的商業解決方案上。 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM