nosql的数据服务_使用NoSQL实现实体服务–第1部分:概述
nosql的數(shù)據(jù)服務(wù)
在過去的幾周中,我一直在進(jìn)行一些研發(fā)工作,以了解使用NoSQL數(shù)據(jù)庫實(shí)現(xiàn)實(shí)體服務(wù) (也稱為數(shù)據(jù)服務(wù))的優(yōu)勢。實(shí)體服務(wù)是Thomas Erl的《服務(wù)技術(shù)》叢書中提出的服務(wù)分類。 它用于描述高度不可知和可重復(fù)使用的服務(wù),因?yàn)樗鼈冎饕幚斫闃I(yè)務(wù)數(shù)據(jù)“實(shí)體”的信息的持久性。 擁有這些實(shí)體服務(wù)的薄層的最終好處是可以輕松地重用它們以支持更復(fù)雜的服務(wù)組合。
在實(shí)體抽象SOA模式中進(jìn)一步描述了此方法。
因此,實(shí)體服務(wù)層是SOA中流行的體系結(jié)構(gòu)選擇,實(shí)現(xiàn)它們對于Oracle和IBM這樣的供應(yīng)商來說意味著大筆生意,他們兩者都提供軟件來支持這一任務(wù)。 在這一領(lǐng)域,甚至還有一個(gè)單獨(dú)的技術(shù)標(biāo)準(zhǔn)稱為服務(wù)數(shù)據(jù)對象 (簡稱SDO)。
這一切都很好,但是這些應(yīng)用程序帶有專用的服務(wù)器和專用的IDE,并且都帶有“重量級”。 如果您真正想要的只是在管理諸如產(chǎn)品或客戶之類的簡單規(guī)范數(shù)據(jù)類型的持久性的服務(wù)上執(zhí)行一些簡單的CRUD-F操作(創(chuàng)建,讀取,更新,刪除,查找),這些專用解決方案就會非常昂貴。
因此,通常的基本實(shí)現(xiàn)方法是突破Java并使用具有JPA (Java持久性API)之類的常規(guī)關(guān)系數(shù)據(jù)庫來幫助您進(jìn)行對象/關(guān)系映射和持久性。 這是一個(gè)不錯的選擇,它可以大大簡化代碼,但是仍然存在挑戰(zhàn)。 在將XML用作有效負(fù)載的Web服務(wù)中,仍然存在在JAXB生成的Java對象和用于通過JPA持久化數(shù)據(jù)的Java對象之間進(jìn)行轉(zhuǎn)換的問題。 您可以使用HyperJaxB之類的東西用JPA注釋來注釋JAXB對象,從而使結(jié)果數(shù)據(jù)對象具有雙重用途,但是您在版本控制方面仍然存在一些問題,并且沒有NoSQL的可伸縮性優(yōu)勢。 此外,我之前在較早的博客中就使用過這種方法,那么再次進(jìn)行這種操作又有什么樂趣呢?
使用NoSQL。
一個(gè)相對新穎且誘人的選擇是使用NoSQL數(shù)據(jù)庫進(jìn)行持久存儲。 在過去的幾年中,NoSQL數(shù)據(jù)庫被證明非常受歡迎,這主要是由于它們具有實(shí)現(xiàn)巨大的可伸縮性和強(qiáng)大的彈性的能力。 許多非常高知名度和高吞吐量的網(wǎng)站都使用NoSQL數(shù)據(jù)存儲來管理和保留其數(shù)據(jù),包括Goole,Twitter,Foursquare,Facebook和Ebay。
NoSQL一詞用于描述“一類數(shù)據(jù)庫管理系統(tǒng),該類數(shù)據(jù)庫管理系統(tǒng)因不遵守廣泛使用的關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)模型而被識別” – Wikipedia 。
NoSQL數(shù)據(jù)存儲區(qū)沒有遵循基于關(guān)系表的方法的傳統(tǒng)智慧,而是選擇了一種無模式的數(shù)據(jù)結(jié)構(gòu),該結(jié)構(gòu)通常以“文檔為中心”,并且能夠在高度分布式的環(huán)境中支持大量數(shù)據(jù)。
選擇NoSQL數(shù)據(jù)庫。
有很多不同的NoSQL實(shí)現(xiàn),因此除了要說我的要求很簡單之外,在這里我將不做詳細(xì)介紹。 我想要點(diǎn)東西...
- 可通過亞馬遜和Jelastic等第三方PaaS提供商獲得
- 使用文檔存儲方法(與鍵/值或圖相反)
- 開源且免費(fèi)提供
- 具有良好的Java API
- 具有良好的開發(fā)人員文檔
- 可以在本地安裝
- 我可以自己管理(因?yàn)槲也幌氤蔀橐幻鸇BA,所以越輕松越好)
最后,我的數(shù)據(jù)庫選擇取決于兩個(gè)市場領(lǐng)導(dǎo)者: MongoDB和CouchDB 。 Mongo有一個(gè)很棒的Java API,在Java社區(qū)中很流行,并且有很好的開發(fā)人員文檔。 但是,它的管理功能相當(dāng)不友好,只有一個(gè)命令行可以讓您陪伴。 另一方面,由于其“ Futon” UI,CouchDB更加友好。 CouchDB具有Mongo的大多數(shù)技術(shù)優(yōu)勢(肯定是在此R&D設(shè)置中),但是它缺少現(xiàn)成的Java API(REST是默認(rèn)接口)。 幸運(yùn)的是,Java社區(qū)已經(jīng)介入了許多用于CouchDB的本機(jī)Java驅(qū)動程序,對我來說最好的是Ektorp庫,該庫使用簡單但也非常有效。
摘要。
我進(jìn)行此研發(fā)活動的目標(biāo)是:
本質(zhì)上,我想通過使用盡可能少的Java代碼來構(gòu)建實(shí)體服務(wù),但同時(shí)保留契約優(yōu)先的方法。 契約優(yōu)先的方法對于良好的SOA開發(fā)至關(guān)重要,因?yàn)樗试S使用者和服務(wù)之間的松散耦合 ,并且不會破壞與許多技術(shù)特定的依賴關(guān)系(如數(shù)據(jù)庫表定義和數(shù)據(jù)類型)之間的關(guān)系。
我將用于此開發(fā)的主要技術(shù)將是Java(JEE),Jax-WS,JaxB,CouchDB和Ektorp以及Glassfish v3。 和往常一樣,我還將使用Maven和Jenkins。 所有這些都是可用于生產(chǎn)的應(yīng)用程序和框架,但是由于它們是開源的,所以到目前為止的總成本為0.00英鎊。
在本系列的下一篇文章中,我將告訴您如何從Web服務(wù)合同或“ WSDL”開始著手開發(fā)服務(wù)。
更新:
似乎我一次走上潮流,最近幾天出現(xiàn)了許多有趣的NoSQL文章……
InfoQ詢問“ 什么是CouchDB ”,這是我大約一個(gè)月前可以完成的文章。 這是一個(gè)相當(dāng)全面的“入門”指南,其中包含有關(guān)CouchDB編碼的更多詳細(xì)信息。 因此,我建議任何尋求一步一步的Java編碼指南的人都可以立即查看該文章。
InfoQ文章還引用了架構(gòu)師可能感興趣的其他兩個(gè)博客文章。 第一個(gè)是對多個(gè)不同NoSQL數(shù)據(jù)庫 (包括Cassandra Tom!)的比較,第二個(gè)是方便的NoSQL選擇指南 。
繼續(xù)第2部分 。
參考: 使用NoSQL實(shí)現(xiàn)實(shí)體服務(wù)–第1部分:我們的JCG合作伙伴 Ben Wilcock在SOA,BPM,Agile和Java博客上的概述 。
翻譯自: https://www.javacodegeeks.com/2012/09/implementing-entity-services-using_10.html
nosql的數(shù)據(jù)服務(wù)
總結(jié)
以上是生活随笔為你收集整理的nosql的数据服务_使用NoSQL实现实体服务–第1部分:概述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WinRAR不可预料的压缩文件末端什么意
- 下一篇: Spring Boot和数据库初始化