nosql数据库有哪些_使用NoSQL实现实体服务–第3部分:CouchDB

nosql数据库有哪些

nosql数据库有哪些

本系列的第2部分中,我使用SOA的“合同优先”技术创建和部署了产品实体服务,现在,我将致力于服务实现的NoSQL数据库方面。

正如我在第1部分中已经提到的那样,我已经选择CouchDB作为我的NoSQL数据库,选择Ektorp库作为数据库驱动程序。

CouchDB –轻松数据库。

CouchDB本质上将充当我的文档存储。 它本机地以JSON格式(我认为实际上是称为BSON的二进制版本)存储文档,并且不需要对文档的结构有先验知识。 您几乎可以存储任何内容,甚至可以在同一数据库中混合使用不同类型的文档。

由于没有诸如DDL脚本或XSD架构之类的先前设置步骤,因此上手可能很快。 实际上,如果您可以使用CURL,则无需任何操作,只需向CouchDB发出HTTP命令即可存储您的东西。 就像它说的那样-CouchDB相当轻松。 有关CouchDB基础入门的完整说明,请参见CouchDB:权威指南

从Java到JSON格式。

当然,当我们使用Java时,JSON作为基于String的表示形式使用起来并不方便。 这是Ektorp介入的地方,使用Jackson Java-to-JSON库使事情顺利进行。 Jackson促进了Ektorp幕后的开箱即用POJO到JSON转换过程。

Jackson是该项目的重要功能,因为我想实现从XML到Java对象再到数据库文档然后再返回的干净,无忧的开发流程。 杰克逊是完成这项工作的关键组成部分,我们将在后面看到。

CouchDB的文档存储先决条件。

尽管CouchDB不需要架构,但每个文档确实需要两个基本数据:唯一ID和文档修订号。 这些数据项有助于管理文档和实现幂等规则,以帮助维护多用户环境中的文档完整性。 CouchDB希望这些字段被命名为'_id''_revision' 。 _id可以在创建操作期间由用户或数据库分配。 _revision由数据库分配,并且每次文档记录被更新时都向上递增。

现在,显然我不希望将特定于数据库的字段放入XML文档中,因此我对产品的定义有一个名为“ Id”的字段和一个名为“ Revision”的字段。 除非我做某事,否则该文档将无法满足存储在CouchDB中的必要条件,并且奇怪的事情将开始发生,例如在运行时将额外的_id和_revision字段添加到数据库记录中,而这些字段与Id和Revision不匹配。我要求CouchDB存储XML文档。 我不想为了添加这些数据库特定字段而更改产品的XML模式,那该怎么办?

聪明地,可以将Jackson配置为纠正此问题,而无需触摸从Product XML架构派生的“ Product”对象的Java / JaxB定义。 可以说在运行时将产品的“ Id”和“ Revision”字段重新映射到CouchDb的“ _id”和“ _revision”字段。 这样可以保持一定程度的松散耦合,但是允许我在我的代码中使用相同的JaxB生成的Java对象,从而节省了大量的时间和精力。

访问数据库。

CouchDB无法通过JDBC访问,并且没有传统的JDBC驱动程序。 相反,它使用REST接口(基于HTTP的GET,PUT,POST,DELETE等),并使用JSON格式的内容进行通信。

Ektorp提供了一些帮助程序类,以帮助您使用CouchDB数据库。 有一个可实例化的Connector类,用于建立与数据库的可行连接;还有一个可定制的RepositorySupport类,该类提供了用于与数据库及其记录进行交互的类型安全的便捷方法。

创建一个DAO。

通过扩展名和类类型正确自定义后,RepositorySupport类可以用于您的所有基本数据访问对象要求,例如Get,Create,Update和Remove操作。 它也可以纯粹基于您添加到其中的方法的名称自动生成CouchDB视图(只要它们遵循某些规则)。 这样可以轻松地向您的DAO添加“查找”方法,例如“ findByManufacturerName”或“ findByCategoryId”。 最后,如果您需要更复杂的视图或映射/减少查询,它也可以为您提供帮助。

全部拉在一起。

通过配置Jackson并使用Ektorp创建DAO,现在只是编写一些集成测试以确保所有内容都可以在一起的一种情况。 我最初使用的测试非常简单,所以我要求DAO进行...

  1. 创建一个新的JaxB产品对象并为其分配一个ID
  2. 将其保存到我的CouchDB“产品”数据库中
  3. 使用ID从“产品”数据库中读取产品对象
  4. 修改并更新产品对象
  5. 再次检索它,检查版本是否增加
  6. 最后,删除产品对象并检查现在尝试读取它的操作是否失败

如果DAO代码可以完成所有这些事情,那么我具有产品实体服务实现所需的基本行为。 但是,由于这是一个集成测试,因此我需要在测试周期中可用的CouchDB服务。 Maven可以通过使用Maven Failsafe插件将此类测试绑定到Maven构建生命周期的特定于集成测试的特定部分来帮助进行集成测试。 这样可以避免将集成测试与通常具有较少依赖性和运行时要求的普通单元测试混在一起。

使CouchDB在本地工作非常简单,但是如果您不必为安装和设置过程所困扰,也可以使用免费的云托管CouchDB开发实例。 我都尝试过,并且它们同样工作良好。

下一步是什么?

现在,我的CouchDB DAO已完成,是时候进入项目的最后阶段了,我将把DAO行为链接到我先前创建的Web Service功能。 为此,我将使用Java Enterprise Edition 6。

如果您希望在下一期出版物发布时收到电子邮件通知,请单击右侧的链接进行订阅。

继续第4部分

参考: 使用NoSQL实施实体服务–第3部分:我们的JCG合作伙伴Ben Wilcock的CouchDB ,位于SOA,BPM,Agile和Java博客上。

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

nosql数据库有哪些

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值