使用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.mzph.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} ${…