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

nosql的数据服务

在过去的几周中,我一直在进行一些研发工作,以了解使用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实现,因此除了要说我的要求很简单之外,在这里我将不做详细介绍。 我想要点东西...

  • 可通过亚马逊和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的数据服务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353811.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java中获取当前函数名

Java中获取当前函数名 博客分类: Java JavathreadJDKIDEA 有时候我们需要在程序中获取当前运行的函数名,如何简单的做到这点呢?我们可以用getStackTrace轻松搞定。 一提到getStatckTrace多数人会联想到Thowable中的getStackTrace方法。的确&…

day19 复习,组合和继承

组合:当一个类的对象作为另一个类对象的属性就叫组合 表示的一种什么有什么的关系 面向对象的思想 不关心程序的执行过程 关心的事一个程序中的角色以及角色与角色的关系 python中一切皆对象 实例化的过程 创建一个对象 __init__给对象添加属性,对…

Spring Boot和数据库初始化

Spring Boot是一个很好的框架,可在开发Spring应用程序时为开发人员节省大量时间和精力。 它的主要功能之一是数据库初始化。 您可以使用spring boot来初始化您的sql数据库。 我们将从gradle文件开始 group com.gkatzioura version 1.0-SNAPSHOTapply plugin: java…

学习Java: Queue

15 08, 2007 学习Java: Queue Java — 作者 zybing 15:17Java提供了Quere,相当好用,在1.5版本中又有增强。Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构 offer,add区别&#xff1…

建站手册-网站主机:电子商务主机

ylbtech-建站手册-网站主机:电子商务主机1.返回顶部 1、http://www.w3school.com.cn/hosting/host_ecommerce.asp2、2.返回顶部1、如果您的公司正在销售某种产品或服务,那么电子商务也许是做生意的一种好办法。 Internet 商业 电子商务就是在 Internet 上…

ConcurrentLinkedQueue

ConcurrentLinkedQueue 因为ConcurrentLinkedQueue是线程序安全的并且是针对并发的 主类 Java代码 public class conn{ public static void main(String[] args) throws Exception{ Queue<String> queuenew ConcurrentLinkedQueue<String>(); …

【大型网站技术实践】初级篇:借助Nginx搭建反向代理服务器

每天学习一点点 编程PDF电子书、视频教程免费下载&#xff1a;http://www.shitanlife.com/code一、反向代理&#xff1a;Web服务器的“经纪人” 1.1 反向代理初印象 反向代理&#xff08;Reverse Proxy&#xff09;方式是指以代理服务器来接受internet上的连接请求&#xff0c;…

剖析java中的String之__拼接

剖析java中的String之__拼接 分类&#xff1a; java 2011-08-24 17:46 31人阅读 评论(0) 收藏 举报 出处, http://blog.csdn.net/izard999/article/details/6708433 网上剖析String的不少&#xff0c;关于其他的String的知识我就不累赘去说了&#xff01; 本文只解释下我在面…

mfc 弹簧_整合弹簧,速度和瓷砖

mfc 弹簧我喜欢 Tiles&#xff0c; 并且听到了很多有关 Velocity的信息 。 它们似乎有不同的用途&#xff0c;并且据说很容易结合在一起&#xff0c;所以我决定试一试&#xff0c;并在Spring Web应用程序中同时使用它们。 集成实际上花费了许多小时&#xff0c;并且是一次真正的…

STM32-RS485通信软硬件实现

OS&#xff1a;Windows 64 Development kit&#xff1a;MDK5.14 IDE&#xff1a;UV4 MCU&#xff1a;STM32F103C8T6/VET6 AD&#xff1a;Altium Designer 18.0.12 1、RS485简介  RS-485又名TIA-485-A, ANSI/TIA/EIA-485或TIA/EIA-485。RS485是一个定义平衡数字多点系统中的驱动…

MFC如何使控件大小随着对话框大小自动调整

MFC如何使控件大小随着对话框大小自动调整 2012-04-27 16:24:50| 分类&#xff1a; MFC | 标签&#xff1a; |字号大中小 订阅 对话框的大小变化后&#xff0c;假若对话框上的控件大小不变化&#xff0c;看起来会比较难看。下面就介绍怎么让对话框上的控件随着对话框的…

Spring MVC整合Ehcache缓存框架

https://blog.csdn.net/u012562943/article/details/52289433转载于:https://www.cnblogs.com/pjlhf/p/8818747.html

Java 枚举7常见种用法

DK1.5引入了新的类型——枚举。在 Java 中它虽然算个“小”功能&#xff0c;却给我的开发带来了“大”方便。 用法一&#xff1a;常量 在JDK1.5 之前&#xff0c;我们定义常量都是&#xff1a; publicstaticfianl....。现在好了&#xff0c;有了枚举&#xff0c;可以把相关的常…

Spring和Hibernate的自定义审核日志

如果您需要对所有数据库操作进行自动审核 &#xff0c;并且正在使用Hibernate…&#xff0c;则应使用Envers或spring data jpa auditing 。 但是&#xff0c;如果由于某些原因您不能使用Envers&#xff0c;则可以使用休眠事件侦听器和spring事务同步来实现类似的功能。 首先&a…

深度学习训练数据打标签过程

深度学习训练数据打标签过程 为了获取大量的图片训练数据&#xff0c;在采集数据的过程中常用视频的方式采集数据&#xff0c;但对于深度学习&#xff0c;训练的过程需要很多的有有标签的数据&#xff0c;这篇文章主要是解决视频文件转换成图片文件&#xff0c;并加标签&#x…

java 枚举学习--从小程序中学习

java 枚举学习--从小程序中学习 Java 枚举类型 解析 简介&#xff1a;java中枚举是一个类 用之前我觉得还是要知道应该何时使用&#xff1a; 一条普遍的规律是&#xff0c;任何使用常量的地方&#xff0c;例如目前使用的switch 代码切换的地方。 如果只是单独一个值&am…

《修改代码的艺术》读书笔记一

一、修改软件的起因及其本质。 修改软件是任何一个开发人员所面对的问题&#xff0c;软件是否容易修改&#xff0c;被修改后的软件是否变得更好&#xff0c;是每一个开发人员都知道必须关注但是在实际开发过程中却往往忽视的问题。有多少人在接手一个新项目时抱怨新项目的遗留代…

Java基础笔记 – 枚举类型的使用介绍和静态导入

Java基础笔记 – 枚举类型的使用介绍和静态导入 本文由 arthinking 发表于404 天前 ⁄ Java基础 ⁄ 暂无评论 ⁄ 被围观 1,433 views 1、枚举&#xff08;Enum&#xff09;&#xff1a;JDK5.0中加入了枚举类型&#xff0c;使用enum关键字定义&#xff0c;可以按照如下定义&am…

spring自动装配依赖包_解决Spring自动装配中的循环依赖

spring自动装配依赖包我认为这篇文章是在企业应用程序开发中使用Spring的最佳实践。 使用Spring编写企业Web应用程序时&#xff0c;服务层中的服务量可能会增加。 服务层中的每个服务可能会消耗其他服务&#xff0c;这些服务将通过Autowire注入。 问题&#xff1a;当服务数量…

Python中转换角度为弧度的radians()方法

Python中转换角度为弧度的radians()方法 这篇文章主要介绍了Python中转换角度为弧度的radians()方法,是Python入门中的基础知识,需要的朋友可以参考下 radians()方法把角度转化为弧度角x。 语法 以下是radians()方法的语法&#xff1a; radians(x) 注意&#xff1a;此函数是无…