2015-06-12 39 views
2

在做了一些關於JCR or RDBMS的研究,並閱讀其他posts之後,我仍然不確定是否使用JCR而不是JPA來處理文檔管理系統,它必須處理不同的文檔非常大的文件許多許多用戶的併發訪問。JCR與JPA的DMS:性能,優點,缺點

我考慮JCR主要的原因是因爲文件看起來像內容我,規格已經與隨之而來的一些問題涉及 - 主要是我感興趣的存儲和版本。另外,我想對JCR實現中的文檔內容進行封裝,並使用JPA處理其他所有應用程序特定的內容。

也許有人可以幫我剩下的問題:

  • 如何JCR的讀/查詢性能涉及到JPA(我知道它應該在執行很大的變化,但可能有一些規則拇指)?
  • 有沒有人在具有特定JCR實現的simillar用例中擁有真實世界的經驗?如果是這樣,你是否將它與關係數據庫(JPA)混合?
  • 考慮到文件存儲和版本控制的好處,是否值得引入JCR的開銷? (我很可能會去我自己的自定義使用訪問控制(JPA),我不需要額外的靈活性來在運行時引入新的節點屬性)
  • 有沒有人有任何關於數據完整性和備份解決方案的經驗?

UPDATE:儘管這個問題進行了詳細的回答,有人可能有一個更關鍵的景象大約從一個更實際點的使用。就個人而言,我越來越關注以下非技術相關的問題:

  1. 文檔:兔崽子有文檔質量很差,這是指導OCM包含在第一段死鏈接,一些例如搜索查詢拋出異常由於未知的原因,在一個非常基礎的教程中有一個TODO,並且它的獨立服務器在JDK8中沒有正常工作,這是根本沒有記錄的。
  2. 成熟度:長毛象橡木似乎仍在工作中,其他解決方案看起來像無論是被遺棄或出血邊緣。
  3. 社區:與JPA相反,做JCR的研究導致方式更少hits。這可能是一個真正的問題,當一個新技術的項目團隊陷入(三重)問題時。

回答

4

簡版:文檔是結構化或半結構化的內容。這就是分層組織的數據存儲的用例。如果你不想爲自己實現所有基本的dms/cms東西,你應該選擇JCR(考慮到這一點,你可能是第一次這樣做,而他們一直在做)。

長版本:JCR通過規範(如版本控制,鎖定,生命週期管理或參照完整性)涵蓋了文檔或內容管理系統的許多基本用例。此外,它允許您在不更改模式的情況下擴展數據(當然,您可以在模型中定義節點類型,但不一定)。大多數JCR實現(如Jackrabbit)在後端使用數據庫,使其比關係後端的抽象層「多一點」。爲了處理大數據,可以使用文件系統存儲(這比存儲每個二進制數據到數據庫要快得多),同時將結構化數據(節點和屬性)存儲在數據庫中。

去JPA你必須自己處理所有這些dms/cms的東西。當然,你可以做到這一點,但它已經在JCR實施中完成了更低級別的編程。每一次模型更改都需要模式更改,而表格佈局不是那麼簡單(您是否希望爲您的文檔設置一個大表格,每個屬性都是列?您是否希望爲每個文檔類別創建一個單獨的表格?你是如何建模生命週期的,你如何建模版本?)

對於JCR的第一跳,我建議David's Model,考慮作爲內容的應用程序的一切。我曾在一個項目中工作過,在那裏我們決定不使用JCR和JPA的混合體,因此我們不必處理不同的API來存儲。

而且至少有一些JCR實現在那裏

  • 兔崽子2(參考實施,對於讀操作優化,目前在維護模式下)
  • 兔崽子OAK(目標爲高度可擴展的內容庫,以(來自與Jackrabbit相同的核心團隊)
  • Jackrabbit FileVault(後端純粹基於文件系統)
  • Modeshape(替代實現,快速且可伸縮,帶有REST API,qui好文檔)

btw。考慮到RESTful架構,JCR API和實現幾乎完成了。因此,如果您考慮使用REST API,映射也相當簡單。此外,它允許消費者通過JCR API直接瀏覽內容,從而可以輕鬆地將內容集成到其他應用程序中(即只讀),同時您必須使用JPA使您的數據庫的內部設計更加可靠,從而使消費者合約更有可能中斷在變化。

關於你的遺留問題:

  • 我沒有對比的圖表和往常一樣這取決於數據結構和索引和查詢設計。 JCR實現具有內置緩存,並且您通常會對結果集進行迭代。所以沒有關於更快/更慢的一般聲明,這一切都取決於用例。
  • 我做了類似的事情,我們對Jackrabbit實現感到滿意,但我們在JDK7上。我們擁有存儲庫中的所有數據(包括用戶設置,應用程序設置等),並且根本沒有JPA持久性。如果您需要,還有一個Object Content Mapping可用。
  • 是的,值得介紹。 Jackrabbit擁有自己的用戶管理功能 - 您無需自行實施。通過JCR API和JAAS可以訪問訪問控制。儘管我建議不要使用JCA ResourceAdapter來管理用戶管理和訪問控制,因爲它不公開Jackrabbit API。
  • 有關數據完整性和備份的問題對於JCR或JPA並不特別,它們都可以確保某些級別的完整性(數據庫完整性,JCR執行參照完整性),並且都可以備份(db備份,fs備份)。兩者都是訪問數據的標準方式,所以您甚至可以執行自己的備份邏輯。
+0

好點,尤其是戴維斯型號非常有幫助,謝謝!我更新了我的問題以涵蓋我的遺留問題。 – Journeycorner

+0

「_So有關於快/ slower_沒有籠統的說法」: 經過數年的經驗兔崽子,我可以自信地做出兔崽子具有比玩具大小的數據集的任何其他嚴重的性能問題的一般性聲明。 –