使用NoSQL實現實體服務–第1部分:概述

在過去的幾周中,我一直在進行一些研發工作,以了解使用NoSQL數據庫實現實體服務 (也稱為數據服務)的優勢。

實體服務是托馬斯·埃爾(Thomas Erl)的《服務技術》叢書中提出的服務分類。 它用于描述高度不可知和可重用的服務,因為它們主要處理建模為業務數據“實體”的信息的持久性。 擁有這些實體服務的薄層的最終好處是可以輕松地重用它們以支持更復雜的服務組合。

在實體抽象SOA模式中進一步描述了此方法。

因此,實體服務層是SOA中流行的體系結構選擇,實現它們對于Oracle和IBM這樣的供應商來說意味著巨大的業務,這兩家供應商都提供軟件來支持這一任務。 在這一領域,甚至還有一個單獨的技術標準稱為服務數據對象 (簡稱SDO)。

這一切都很好,但是這些應用程序帶有專用的服務器和專用的IDE,并且都帶有“重量級”。 如果您真正想要的只是在管理諸如產品或客戶之類的簡單規范數據類型的持久性的服務上執行一些簡單的CRUD-F操作(創建,讀取,更新,刪除,查找),這些專用解決方案就會非常昂貴。

因此,通常的基本實現方法是突破Java并使用帶有JPA (Java持久性API)之類的常規關系數據庫來幫助您進行對象/關系映射和持久性。 這是一個不錯的選擇,它可以大大簡化代碼,但是仍然存在挑戰。 在將XML用作有效負載的Web服務中,仍然存在在JAXB生成的Java對象和用于通過JPA持久化數據的Java對象之間進行轉換的問題。 您可以使用HyperJaxB之類的東西用JPA注釋來注釋JAXB對象,從而使結果數據對象具有雙重用途,但是您在版本控制方面仍然存在一些問題,并且沒有NoSQL的可伸縮性優勢。 此外,我之前在較早的博客中就使用過這種方法,那么再次進行這種操作又有什么樂趣呢?

使用NoSQL。

一個相對新穎且誘人的選擇是使用NoSQL數據庫進行持久存儲。 在過去的幾年中,NoSQL數據庫被證明非常受歡迎,這主要是由于它們具有實現巨大的可伸縮性和強大的彈性的能力。 許多高知名度和高吞吐量的網站都使用NoSQL數據存儲來管理和保留其數據,包括Goole,Twitter,Foursquare,Facebook和Ebay。

NoSQL一詞用于描述“一類數據庫管理系統,該類數據庫管理系統因不遵守廣泛使用的關系數據庫管理系統(RDBMS)模型而被識別” – Wikipedia 。

NoSQL數據存儲區沒有遵循基于關系表的方法的傳統智慧,而是選擇了一種無模式的數據結構,該結構通常以“文檔為中心”,并且能夠在高度分布式的環境中支持大量數據。

選擇NoSQL數據庫。

有許多不同的NoSQL實現,因此除了要說我的要求很簡單之外,在這里我將不做詳細介紹。 我想要點什么...

  • 可通過Amazon和Jelastic等第三方PaaS提供商獲得
  • 使用文檔存儲方法(與鍵/值或圖相反)
  • 開源且免費提供
  • 具有良好的Java API
  • 具有良好的開發人員文檔
  • 可以在本地安裝
  • 我可以自己管理(因為我不想成為一名DBA,所以越輕松越好)

最后,我的數據庫選擇取決于兩個市場領導者: MongoDB和CouchDB 。 Mongo有一個很棒的Java API,在Java社區中很流行,并且有很好的開發人員文檔。 但是,它的管理功能相當不友好,只有一個命令行可以讓您陪伴。 另一方面,由于其“ Futon” UI,CouchDB更加友好。 CouchDB具有Mongo的大部分技術優勢(肯定是在此R&D設置中),但缺少現成的Java API(REST是默認接口)。 幸運的是,Java社區已經介入了許多用于CouchDB的本地Java驅動程序,對我來說最好的是Ektorp庫,該庫使用非常簡單,但也非常有效。

摘要。

我進行此研發活動的目標是:

  1. 使用合同優先的方法(綁定到SOAP的Web服務,完全符合WS-I的合同以及預定義的數據結構)實現可行的實體服務。
  2. 發現是否使用NoSQL數據庫而不是JPA進行數據持久性和檢索可以提高開發人員的生產率并減少實體服務實現的總體工作量。
  3. 使用以下SOA模式:服務外觀(分離業務邏輯),合同/模式集中化(通過簡單服務存儲庫托管的規范合同),解耦合同,并發合同(SOAP和REST(可能)),消息元數據(標頭)和服務代理(用于驗證)。

本質上,我想通過使用盡可能少的Java代碼來構建實體服務,但同時保留契約優先的方法。 契約優先的方法對于良好的SOA開發至關重要,因為它允許使用者與服務之間的松散耦合 ,并且不會破壞與許多技術特定的依賴關系(如數據庫表定義和數據類型)之間的關系。

我將用于此開發的主要技術是Java(JEE),Jax-WS,JaxB,CouchDB&Ektorp和Glassfish v3。 和往常一樣,我還將使用Maven和Jenkins。 所有這些都是可用于生產的應用程序和框架,但是由于它們是開源的,所以到目前為止的總成本為0.00英鎊。

在本系列的下一篇文章中,我將告訴您如何從Web服務合同或“ WSDL”開始著手開發服務。

更新:

似乎我一次走上潮流,最近幾天出現了許多有趣的NoSQL文章……

InfoQ詢問“ 什么是CouchDB ”,這是我一個月前可能寫的一篇文章。 這是一個相當全面的“入門”指南,其中包含有關CouchDB編碼的更多詳細信息。 因此,我建議任何尋求一步一步的Java編碼指南的人都可以立即查看本文。

InfoQ文章還引用了架構師可能感興趣的其他兩個博客文章。 第一個是對多個不同NoSQL數據庫 (包括Cassandra Tom!)的比較,第二個是方便的NoSQL選擇指南 。

繼續第2部分 。

參考: 使用NoSQL實現實體服務–第1部分: JCG合作伙伴 Ben Wilcock在SOA,BPM,Agile和Java博客上的概述 。


翻譯自: https://www.javacodegeeks.com/2012/09/implementing-entity-services-using_10.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371517.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371517.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371517.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

IO注意事項

read()方法返回值為什么是int? 因為字節輸入流可以操作任意類型的文件,比如圖片音頻等,這些文件底層都是以二進制形式的存儲的,如果每次讀取都返回byte,有可能在讀到中間的時候遇到111111111,那么這11111111是byte類型的-1,我們的程序是遇到-1就會停止不讀了,后面的數據就讀不…

c語言用星號輸出沙漏,《算法筆記》學習日記——3.3 圖形輸出

3.3 圖形輸出問題 A: 輸出梯形題目描述輸入一個高度h&#xff0c;輸出一個高為h&#xff0c;上底邊為h的梯形。輸入一個整數h(1<h<1000)。輸出h所對應的梯形。樣例輸入web5樣例輸出數組*********************************************思路這一類的題目都比較簡單&#xf…

JavaOne 2012:101種改進Java的方法-開發人員參與為何如此重要

Bruno Souza &#xff0c; Martijn Verburg和Heather Vancura在希爾頓酒店的大陸宴會廳4中展示了“ 101種改進Java的方法&#xff1a;開發人員參與為何如此重要”。 他們將其分為自己最熟悉的領域。 SouJava的創始人兼協調員 Souza談到了通過用戶組的更大參與。 Verberg也在倫敦…

Java組合實體模式~

組合實體模式用于EJB持久化機制。 組合實體是表示對象圖的EJB實體bean。 當組合實體更新時&#xff0c;內部依賴對象bean將自動更新為由EJB實體bean管理。 以下是組合實體Bean的參與者。 組合實體 - 它是主要的實體bean。 它可以是粗粒度的或可以包含用于持久性目的的粗粒度對象…

python中的一些小知識

在最近學習python中遇到的一些小問題匯總一下&#xff1a; 1.在windows7下安裝python3.5版本時提示安裝不了&#xff0c;缺少ServicePack1. 解決辦法是&#xff0c;打開控制面板\系統和安全\Windows Update&#xff0c;下載和更新計算機安裝&#xff0c;然后卸載以前的python版…

在Java中衡量執行時間– Spring StopWatch示例

有兩種方法可以通過使用System.currentTimeinMillis&#xff08;&#xff09;或通過使用System.nanoTime&#xff08;&#xff09; 來測量Java中經過的執行時間 。 這兩個方法可用于測量 Java中兩個方法調用或事件之間的經過時間或執行時間 。 計算經過的時間是Java程序員要做的…

c語言getch在哪個頭文件,用getch()需要頭文件嗎?

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓#include #include #include "string.h"#includeusing namespace std;struct student{ int num;char name[10];char banji[10];float score[3];struct student *next;};struct student *creat(){struct student *head,*p…

My solution for Git Client Error: Permission denied (publickey)

在使用Git客戶端的過程中遇到的問題以及解決方案分享。 我之前已經安裝Git客戶端并且使用Git開發過公司項目&#xff0c;也已經正確生成PublicKey并且添加到SSH keys on github of my account&#xff0c;但是當我想從github上克隆另一個客戶端push的代碼的時候一直報錯&#x…

OutOfMemoryError:無法創建新的本機線程–問題神秘化

正如您從我以前的教程和案例研究中可能已經看到的那樣&#xff0c;要確定和解決Java Heap Space OutOfMemoryError問題可能很復雜。 我從Java EE生產系統中觀察到的常見問題之一是OutOfMemoryError&#xff1a;無法創建新的本機線程&#xff1b; HotSpot JVM無法進一步創建新的…

求10以內平均數的c語言,求助 給小學生出題,自己選加減乘除 做10題 10以內的數 然后統計分...

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓#include #include #include void Menu(void){printf("1,加法 2,減法 3,乘法 4,除法 5,退出\n");printf("請選擇題目類型:");}int Plus(void){int a, b;a rand() % 10 1;b rand() % 10 1;printf("%-2…

linux常用命令大全(轉)好東西要分享

1、ls命令 就是list的縮寫&#xff0c;通過ls 命令不僅可以查看linux文件夾包含的文件&#xff0c;而且可以查看文件權限(包括目錄、文件夾、文件權限)查看目錄信息等等 常用參數搭配&#xff1a; ls -a 列出目錄所有文件&#xff0c;包含以.開始的隱藏文件 ls -A 列出除.及.…

Cobertura和Maven:集成和單元測試的代碼覆蓋率

在姜黃項目中&#xff0c;我們每晚維護一個儀表板。 在儀表板上&#xff0c;我們收集有關項目的統計信息&#xff0c;包括代碼覆蓋率&#xff0c;findbugs分析和其他指標。 我們一直在使用Maven EMMA插件來提供代碼覆蓋&#xff0c;但是遇到了EMMA問題。 在對類進行檢測后&…

二分圖之匈牙利算法模版

1 /*2 匈牙利算法模版鄰接表版3 最大匹配問題4 時間復雜度&#xff1a;O (nm)5 */6 #include <cstdio>7 #include <vector>8 #include <cstring>9 using namespace std; 10 const int maxn 505; 11 vector<int> v[maxn];//x v[i][j]表示i可以與x匹配…

android 字體描邊實現,android文字描邊功能的實現

這里也要簡單說一下&#xff0c;這些小模塊并不是我原創&#xff0c;也是當時查資料找到的&#xff0c;由于時間比較久&#xff0c;原文鏈接已經忘記了&#xff0c;所以這里就不列出引用鏈接了。不過這些代碼我都修改、完善過&#xff0c;也添加了一些注釋&#xff0c;希望對大…

Factorial vs Power

題意 輸入a&#xff0c;找到滿足n!>a^n 最小的n。 數據 第一行T(1 < T < 1e5)&#xff0c;表示測試樣例數.(2 < a < 1e6)。 輸入 3 2 3 4 輸出 4 7 9 這個東西一看就知道是二分求解的&#xff0c;但是我們還是不知道怎么求的&#xff0c;我們可以吧他們取對數然…

評論:Arun Gupta撰寫的“ Java EE 6 Pocket Guide”

這是我很高興寫的評論。 我的朋友阿倫&#xff08;Arun&#xff09;發布了Java EE 6袖珍指南&#xff0c;該指南將在您訂購時盡早提供。 我很早就知道這本書&#xff0c;因為我很樂意對其進行回顧&#xff0c;也感謝有機會為本書做出一點貢獻&#xff01; Kindle版本已經可用&a…

雙android手機同步工具,手機同步軟件Android Manager使用圖文教程

類型&#xff1a;手機工具大小&#xff1a;23.6M語言&#xff1a;繁體 評分&#xff1a;6.6標簽&#xff1a;立即下載Android Manager 可透過五個簡單的步驟設定&#xff1a;步驟一. 在計算機上安裝 Android Manager請點選以下之下載按鈕或直接于計算機上輸入下載網址&#xff…

Camel:構建基于消息的應用程序

這是一篇長文章&#xff0c;包含三個單獨的主題&#xff1a; Java的Apache Camel入門 使用CamelRunner改善路線的啟動 使用Camel構建基于消息的應用程序 但是&#xff0c;由于我準備了包含所有這些材料的camel-demo-1.0.0-SNAPSHOT-project.zip &#xff0c;因此我認為將它們…

android 網易item廣告,Android仿網易嚴選商品詳情頁

仿照網易嚴選商品詳情頁面&#xff0c;整個頁面分為兩個部分&#xff0c;上面一部分是Native的ScrollView&#xff0c;下面一部分則是WebView&#xff0c;其目的是為了可以進行分步加載。滑動到ScrollView底部時&#xff0c;繼續向上拖動&#xff0c;可以加載下面的WebView部分…

freemarker,數字,日期,布爾值常用的函數

${3.4?floor} ${3.4?ceiling} ${3.45?round} ${3.45?rtf} ${3.458?string("0.##")} ${3.42?string.percent} ${3.42?string.currency} ${date?string("yyyy-MM-dd")} ${date?date} ${date?time} ${date?datetime}${true?c} ${true?string} ${…