2010-10-11 33 views
68

我試圖評估內容存儲庫(JSR283),如JackrabbitModeShape,但我必須承認,我不明白什麼問題可以解決的第一位,即使它是一個很好的選擇項目。你認爲哪種情況是最佳的解決方案?與關係數據庫不同,除了大小?爲什麼?指出現實世界的例子的額外點。何時使用JCR(內容存儲庫)而不是其他選項?

在此先感謝。

+8

我懷疑我是唯一一個喜歡知道什麼是什麼,它是什麼以及何時/爲什麼我想要使用它的人,以防萬一我遇到了一個很適合它的問題。 – cHao 2010-10-11 21:13:55

+0

如果有人解釋了內容存儲庫與目錄服務(LDAP)的不同之處,這將非常有用。那麼它與NoSQL數據庫有什麼不同呢? – Ryan 2016-07-13 19:50:21

回答

79

JCR庫比的RDBMS不同,因爲JCR倉庫:

  • 是分層次的,讓你的組織在符合您的需求,並在相關信息的結構內容通常存儲併攏,從而容易導航
  • 是靈活的,允許內容適應和發展,使用節點類型系統,可以完全「無模式」到全開限制性(例如,像關係數據庫一樣)
  • 使用標準的Java API例如,javax.jcr)
  • 真正存儲信息的摘要:許多JCR實現可以將內容存儲在各種關係數據庫和其他存儲中,有些可以通過JCR API公開非JCR存儲,有些可以將多個存儲聯合爲單個虛擬存儲庫。
  • 支持查詢和全文檢索開箱
  • 支持活動,鎖定,版本控制和其他功能

你當然可以建立這些功能全部或部分在自己的應用程序,但中可能會遠離您的應用程序的主要目的。

什麼樣的應用程序可以從這些功能中受益?內容管理系統長期以來一直使用存儲庫,而JCR(和Jackrabbit)確實是出於對通用標準API訪問不同內容存儲庫的需求(請參閱JSR-170JSR-283)。

另一個例子是文件管理系統,它管理電子文件(通常是紙質文件的圖像)並提供搜索和查詢。 DMS已經使用了一段時間的存儲庫。

工件管理系統可以使用存儲庫管理數字工件(通常是文件)以及附加信息(元數據)。 JCR在這裏工作得很好,因爲您可以將元數據存儲在與文件相同的位置:理解這些額外屬性的元數據可以看到它們,不關心的人不必看到它們。我知道Artifactory是使用JCR的Maven存儲庫實現。還有用於管理Web服務工件,數據服務工件和測試工件的存儲庫。

但JCR存儲庫不用於管理文件。 JCR使用節點層次結構的簡單概念,其中節點可以包含命名屬性(具有一個或多個值)和子節點。允許的屬性和子節點完全由節點類型決定,可以根據需要逐節點更改和混合節點類型。 JCR預先定義了一些常用的內置節點類型,如用於表示存儲庫中的文件和文件夾的類型。您可以重用這些內置類型,擴展它們或編寫自己的類型。許多人主張使用mixin幾乎是作爲方面或方面的,所以如果一個節點需要採取一個方面,你可以簡單地添加一個mixin到節點。

JCR旨在輕鬆支持將XML內容導入存儲庫,其中每個元素映射到一個節點,並且每個屬性映射到一個屬性。很多東西都使用XML(或YAML或JSON)表示,並且所有這些都可以很容易地表示並存儲在JCR存儲庫中。作爲示例,請考慮存儲配置信息的JCR存儲庫(通常可能存儲在多個XML文件中)。 JCR可以對該信息進行版本控制,允許從多個進程訪問該信息,啓用查詢和搜索,並在內容更改時通知應用程序。

有幾個很好的JCR的概述與更多的細節和例子。其中的幾個是:

+0

Titus Barik介紹Java Content Repository API < - 鏈接已損壞。 – 2014-07-22 11:46:41

相關問題