在过去的几周中,我一直在进行一些研发工作,以了解使用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

使用NoSQL实现实体服务–第1部分:概述相关推荐

  1. nosql怎么使用_使用NoSQL实施实体服务–第5部分:使用云提高自治性

    nosql怎么使用 在之前的文章中,我讨论了如何通过结合使用Java Web Services , Java EE和CouchDB NoSQL数据库为产品构建SOA"实体"服务. ...

  2. nosql的数据服务_使用NoSQL实现实体服务–第1部分:概述

    nosql的数据服务 在过去的几周中,我一直在进行一些研发工作,以了解使用NoSQL数据库实现实体服务 (也称为数据服务)的优势. 实体服务是Thomas Erl的<服务技术>丛书中提出的 ...

  3. java nosql_使用NoSQL实现实体服务–第4部分:Java EE

    java nosql 现在,我已经准备好了一个框架式的合同优先型Web服务,并使用Ektorp和CouchDB创建了一个数据访问层 ,是时候将它们连接到一个可以正常工作的实体服务中了 . 为此,我将使 ...

  4. nosql的数据服务_使用NoSQL实现实体服务–第3部分:CouchDB

    nosql的数据服务 在本系列的第2部分中 ,我使用SOA的"合同优先"技术创建和部署了产品实体服务,现在,我将致力于服务实现的NoSQL数据库方面. 正如我在第1部分中已经提到的 ...

  5. nosql的数据服务_使用NoSQL实现实体服务–第2部分:合同优先

    nosql的数据服务 现在该开始使用NoSQL项目对SOA实体服务进行编码了,并且正如我所承诺的,我将从Web服务的合同开始. 看一下本系列的第1部分 . 这种从Web服务合同定义开始的技术是面向服务 ...

  6. 使用NoSQL实施实体服务–第5部分:使用云提高自治性

    在先前的文章中,我讨论了如何通过结合使用Java Web Services , Java EE和CouchDB NoSQL数据库为产品构建SOA"实体"服务. 在本系列的最后一篇文 ...

  7. 使用NoSQL实现实体服务–第4部分:Java EE

    现在,我已经准备好了框架式的合同优先型Web服务,并使用Ektorp和CouchDB创建了数据访问层 ,是时候将它们连接到一个可以正常工作的实体服务中了 . 为此,我将使用Java EE和Glassf ...

  8. 使用NoSQL实现实体服务–第2部分:合同优先

    现在该开始使用NoSQL项目对SOA实体服务进行编码了,并且正如我所承诺的,我将从Web服务的合同开始. 看一下本系列的第1部分 . 这种从Web服务合同定义开始的技术是面向服务的体系结构实现的&qu ...

  9. 使用NoSQL实现实体服务–第3部分:CouchDB

    在本系列的第2部分中 ,我使用SOA的"合同优先"技术创建和部署了产品实体服务,现在,我将致力于服务实现的NoSQL数据库方面. 正如我在第1部分中已经提到的那样,我已经选择Cou ...

最新文章

  1. 一次由于字符集问题引发的MySQL主从同步不一致问题追查
  2. 机器学习算法加强——SVM(支持向量机)
  3. Java注释教程– ULTIMATE指南(PDF下载)
  4. 关于@Mapper注解的几个问题
  5. linux查看kafka状态_Linux Page Cache调优在Kafka中的应用
  6. linux数组拼接_Linux中Shell数组的笔记
  7. [设计模式-创建型]单态(Singleton)
  8. 学习笔记之ulimit
  9. UVA10608 Friends【并查集】
  10. SQL:postgresql查询某个字段最大值行的其他字段值
  11. 传智168期 day61 redis 笔记(2017年8月25日19:16:30)
  12. BOM offset client scroll
  13. 计算机基础.办公自动化期末试卷复习必看
  14. CTFHUB WEB
  15. 怎么看两张图片的相似度,测试两张照片相似度
  16. 我眼中的未来计算机作文1000字,我的未来作文1000字
  17. 【Python小知识】:什么是序列解包
  18. 如何解决IAR不能设置断点的问题
  19. 功能点算法及在软件测试中的应用Part3
  20. CheriABI简介

热门文章

  1. java 8 Lambda 表达式(副作用)
  2. think-in-java(9)接口
  3. Docker-Desktop储存路径更改
  4. Zookeeper入门总结
  5. Spring boot(十二):Spring boot 如何测试、打包、部署
  6. spring 注释_Spring@懒惰注释
  7. 朝着理想坚实迈进_坚实原则:单一责任原则
  8. netbeans 9_NetBeans 9抢先体验
  9. java开发课程表_展示Java开发人员课程包
  10. primefaces_使用Bean验证扩展PrimeFaces CSV