couchbase_Couchbase 101:从Java应用程序创建视图(MapReduce)

couchbase

使用Couchbase 2.0开发新应用程序时,有时需要从代码中动态创建视图。 例如,在安装应用程序,编写一些测试时,可能会需要此方法;或者,在构建框架时,您也可以使用此方法,并希望动态创建视图以查询数据。 这篇文章展示了如何做到这一点。

先决条件

  • Couchbase服务器2.0
  • Couchbase Jave客户端库1.1.x
  • 啤酒样品数据集

如果使用的是Maven,则可以在pom.xml中使用以下信息来添加Java客户端库:

<repositories><repository><id>couchbase</id><name>Couchbase Maven Repository</name><layout>default</layout><url>http://files.couchbase.com/maven2/</url><snapshots><enabled>false</enabled></snapshots></repository>
</repositories><dependencies><dependency><groupid>couchbase</groupid><artifactid>couchbase-client</artifactid><version>1.1.0</version><type>jar</type></dependency>
</dependencies>

在线查看https://gist.github.com/4337172

从Java创建和管理视图

完整的Maven项目在Github上可用。

连接到Couchbase群集

要从Java创建视图时,要做的第一件事显然是连接到集群。

import com.couchbase.client.CouchbaseClient;
...
...List<uri> uris = new LinkedList<uri>();uris.add(URI.create("http://127.0.0.1:8091/pools"));CouchbaseClient client = null;try {client = new CouchbaseClient(uris, "beer-sample", "");// put your code hereclient.shutdown();      } catch (Exception e) {System.err.println("Error connecting to Couchbase: " + e.getMessage());System.exit(0);}...
...
</uri></uri>
  1. 创建到群集不同节点的URI列表-第5-6行。 (在此示例中,我正在单个节点上工作)
  2. 连接到存储桶,在本例中为Beer-sample -line9。如果存储桶受保护,则可以包括密码(此处不是这种情况,因此我将发送一个空字符串)

如果您正在寻找有关Couchbase和Java的更多信息,可以从DZone阅读这篇文章: Hello World with Couchbase和Java 。

现在让我们谈谈Couchbase视图。 您可以使用views / map-reduce函数基于存储在Couchbase中的JSON文档的内容来索引和查询Couchbase Server中的数据。 有关视图的更多信息,请参见《 Couchbase服务器手册》的“视图基础”一章 。

从Java创建视图

从Java创建视图确实非常容易:Java客户端库包含完成该操作的所有类和方法。 作为一个具体的用例,我们将使用Couchbase Java教程中描述的应用程序。

遵循本教程时,您需要手动创建一些视图,如此处所示 。 在此示例中,我们将直接在Java代码中创建映射函数,然后将其存储到Couchbase Server。 本教程要求您创建以下工件:

  • 一个名为“ by_name”的视图
  • 在名为“ dev_beer”的设计文档中(开发模式)
  • 和map函数,如下所示:
function (doc, meta) {if(doc.type && doc.type == 'beer') {emit(doc.name, null);}}

以下代码允许您从Java进行操作:

import com.couchbase.client.protocol.views.DesignDocument;
import com.couchbase.client.protocol.views.ViewDesign;
...DesignDocument designDoc = new DesignDocument('dev_beer');String viewName = 'by_name';String mapFunction ='function (doc, meta) {\n' +'  if(doc.type && doc.type == \'beer\') {\n' +'    emit(doc.name);\n' +'  }\n' +'}';ViewDesign viewDesign = new ViewDesign(viewName,mapFunction);designDoc.getViews().add(viewDesign);client.createDesignDoc( designDoc );
...
  • 使用com.couchbase.client.protocol.views.DesignDocument类-第4行创建设计文档。
  • 使用com.couchbase.client.protocol.views.ViewDesign类创建一个具有名称和地图功能的视图-第14行。
  • 您可以将此视图添加到设计文档中-第15行
  • 最后,使用CouchbaseClient.createDesignDoc方法将文档保存到群集中。

如果需要使用reduce函数(内置或自定义),则只需将其作为第三个参数传递给ViewDesign构造函数。

从Java或任何其他工具/语言开发视图时,请确保您了解什么是最佳实践以及索引的生命周期。 这就是为什么我邀请您阅读Couchbase文档中的以下章节:

  • View Writing Best Practice :例如在map函数中,我没有发出任何值。 我只发出一个密钥(啤酒名称)。
  • 视图和存储的数据
  • 开发和生产视图 :在上面的视图中,我已经在开发环境中创建了该视图(dev_前缀),使我可以在数据的子集(集群/索引)上对其进行测试和使用

使用视图

首先,您刚刚创建的视图处于“开发模式”,默认情况下,Java客户端SDK仅在处于“生产模式”时访问该视图。 这意味着从应用程序调用视图时,它将在生产环境中搜索它。 因此,在连接到Couchbase集群之前,您需要设置视图模式以进行开发。

这是使用Java SDK中的viewmode环境变量完成的,可以使用以下方法进行设置:

  • 在您的代码中,在客户端连接到集群之前添加以下行:System.setProperty('viewmode','development');
  • 在命令行-Dviewmode = development
  • 在属性文件中viewmode = development

完成后,您可以使用以下代码调用视图:

import import com.couchbase.client.protocol.views.*;...System.setProperty('viewmode', 'development'); // before the connection to Couchbase
...View view = client.getView('beer', 'by_name');Query query = new Query();query.setIncludeDocs(true).setLimit(20);query.setStale( Stale.FALSE );ViewResponse result = client.query(view, query);for(ViewRow row : result) {row.getDocument(); // deal with the document/data}
...

此代码查询您刚刚创建的视图。 这意味着Couchbase Server将基于您的map函数生成索引,并向服务器查询结果。 在这种情况下,我们特别希望设置限制为20个结果,并且还可以通过设置Stale.FALSE获得最新的结果。

  • 将viewmode设置为development –第4行
  • 使用CouchbaseClient.getView()方法第6行获取视图。 如您所见,我只是在设计文档中使用啤酒名称(而不是dev_beer,因为我处于开发模式,所以Couchbase会知道在哪里搜索)
  • 创建一个查询并设置一个限制(20),并要求SDK返回文档本身
    setIncludeDocs(true)-行8-将以最有效的方式从Couchbase服务器返回文档
  • 在使用query.setStale(Stale.FALSE)返回结果之前,要求系统更新索引。 线9-。 再次使用setStale方法时要小心。 只是为了确保这里是有关它的文档: 索引更新和过时的参数
  • 执行查询–第10行
  • 并使用结果–第11-13行

结论

在本文中,您了解了:

  • 如何从Java创建Couchbase视图
  • 从Java调用此视图
  • 从Couchbase Java客户端库配置开发/生产模式视图

本示例仅限于视图的创建,如果要管理设计文档,可以查看与设计文档和视图相关的其他方法:getDesignDocument(),deleteDesignDocument()等。

参考: Couchbase 101:在Tug的Blog博客上,从我们的JCG合作伙伴 Tugdual Grall在Java应用程序中创建视图(MapReduce) 。

翻译自: https://www.javacodegeeks.com/2013/01/couchbase-101-create-views-mapreduce-from-your-java-application.html

couchbase

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

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

相关文章

如何设置Linux操作系统shell命令的默认语言

Linux中语言的设置和本地化设置真是一个很繁琐的事情&#xff0c;时不时的会出现乱码的情况。 一般来说&#xff0c;linux中显示什么语言是通过环境变量来确认的。 这些环境变量包括&#xff1a; $LANG / $LANGUAGE / $LC_CTYPE .... 可以通过locale命令查看这些变量的值。 要设…

如何在虚拟机上安装wsus服务器,如何在Hyper-V虚拟机上安装WSUS服务器技巧

由于许多企业继续减少使用物理服务器&#xff0c;一个经常提及的问题随之而来&#xff1a;对Windows Server更新服务(WSUS)服务器进行虚拟化处理是个好想法吗?简单的回答&#xff1a;是的。本文介绍了如何在Hyper-V虚拟机中运行WSUS。WSUS可以在虚拟机中运行吗?一言以蔽之&am…

从Spring Data JPA访问EntityManager

Spring Data JPA允许您通过使用Repository接口来快速开发数据访问层。 有时&#xff0c;您需要从Spring Data JPA访问EntityManager。 这篇文章向您展示了如何访问EntityManager。 实体管理器 EntityManager的目的是与持久性上下文进行交互。 然后&#xff0c;持久性上下文将管…

NOIP模拟测试11「string·matrix·big」

打的big出了点小问题&#xff0c;maxx初值我设的0然后少了10分 第二题暴力打炸 第一题剪了一些没用的枝依然40分 总分70 这是一次失败的考试 string 想到和序列那个题很像&#xff0c;但我没做序列&#xff0c;考场回忆学长讲课&#xff0c;打不出来。最后我口胡了一个CDQ分治&…

监控摄像头服务器维护要多久,监控摄像机怎么维护和保养?

原标题&#xff1a;监控摄像机怎么维护和保养?在安防监控系统中&#xff0c;起决定作用的是显示器、摄像机和储存设备。那么&#xff0c;问题来了&#xff0c;监控摄像机怎么维护和保养呢?摄像机属于精密家电&#xff0c;使用上也应更加注意。1、注意防潮&#xff1a;潮湿是摄…

Promise 学习心得

当了这么久码农到今天没事才开始去深究 Promise 这个对象 什么是 Promise&#xff0c; Promise 有什么用&#xff1f;在写代码的时候多多少少都有遇见过地狱式的回调 代码看起来没问题就是有点乱&#xff0c;Promise 这个东西就是为了解决回调嵌套而生的 Promise 是异步编程的一…

小米羊城通余额不足服务器维护,再不怕羊城通余额不够了!地铁站现自助补票“神器”...

再不怕羊城通余额不够了&#xff01;地铁站现自助补票“神器”金羊网 作者&#xff1a;陈泽云 2018-04-16金羊网讯 记者陈泽云报道你有没遇到过这样情况&#xff0c;准备出地铁站时&#xff0c;却发现羊城通余额不足刷不出闸、或者闸机读取不到你的进站信息&#xff0c;只能去…

flex 组建重写

flex历经几个版本的变化&#xff0c;其封装性也越来越规范。 今日flex的学习&#xff0c;总结是组件的重写。 项目中为使组件的针对性&#xff0c;易用性更强 &#xff0c;免不了要重写组件。 要改变你的对手你的了解你的对手。 一个组件从被new到渲染出来主要经历几个重要事件…

glassfish发布应用_GlassFish 4升级的构建,Gradle和嵌入式应用服务器

glassfish发布应用最近&#xff0c;大概在去年年底&#xff0c; GlassFish开源团队发布了GlassFish 4.0 beta 72作为升级版 。 阿伦古普塔&#xff08;Arun Gupta&#xff09;在他的博客上发布了有关GlassFish 4 .0 beta 72的Maven坐标的文章。 该版本意义重大&#xff0c;因为…

Zend Framework 多模块配置 (二)

&#xfeff;续 Zend Framework 多模块配置 &#xff08;一&#xff09; 4&#xff09;启动bootstrap文件&#xff1a; 全局bootstrap文件 &#xff08;repos/application/botstrap.php&#xff09; class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {/***加载一…

固定速率与固定延迟– RxJava常见问题解答

如果您使用的是纯Java&#xff0c;从版本5开始&#xff0c;我们有一个方便的调度程序类&#xff0c;该类允许以固定速率或固定延迟运行任务&#xff1a; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService;ScheduledExecutorServ…

cpta 好像有漏洞

https://kwt.cpta.com.cn/转载于:https://www.cnblogs.com/heikeboys/p/7173543.html

通过Spring Boot使用MySQL JDBC驱动程序

在本文中&#xff0c;我将向您展示如何将MySQL数据库与Spring Boot应用程序连接。 本文使用的工具包括&#xff1a; Spring Boot 1.5.6版本 MySQL 5.7.X 马文 Java 8 Spring Data JPA 1 –项目结构 项目结构是典型的Maven结构。 2 –项目依赖性 请注意&#xff0c;父母…

如何开启O2优化

O2环境会使你的程序跑的特别快,然而大多数正式考试都不能开O2 然而平时做有些题强制开O2,会出现在本机运行正确,但是交上去RE的情况,这时你就要开O2了. 例如在本机运行时会有下标为-但可以运行,而O2你就会RE 那么如何开呢 类似这样 #include<bits/stdc.h> using namespac…

数颜色

此数颜色非彼数颜色, 彼者带修莫队,主席树,树套树,分块,权值线段树皆可A之 而此者带修莫队,树套树,分块皆不可A之 此者异常之简单也,而数据异常之傻逼也,卡我分块者也,卡我权值线段树者也 从11.00即开始卡常,然而不让我过 对于分块 使用register inline fread 展开 不写函数 二…

jax-ws cxf_走向REST:将Tomcat嵌入Spring和JAX-RS(Apache CXF)

jax-ws cxf这篇文章是上一篇文章的逻辑延续。 唯一的区别是我们将使用的容器&#xff1a;它将是我们的老兄Apache Tomcat而不是Jetty 。 令人惊讶的是&#xff0c;嵌入最新的Apache Tomcat 7非常容易&#xff0c;因此现在让我展示一下。 我不会重复完整的上一篇文章 &#xff0…

深入理解C指针第一章小结1

1.1 指针和内存&#xff0c;C程序在编译后&#xff0c;会以三种形式使用内存。 (1) 静态/全局内存&#xff1a;在程序开始时分配&#xff0c;程序结束才消失&#xff0c;所有函数都能访问全局变量&#xff0c;static静态变量的作用域局限在定义它们的函数内部 (2)自动内存&…

WSO2注册表安装简介

这篇文章基于有关注册表安装及其工作方式等常见问题。以下是人们提出的主要问题&#xff1a; 1&#xff09;。 安装如何工作&#xff1f; 2&#xff09;。 Config Registry和Governance Registry有什么区别&#xff1f; 3&#xff09;。 可以将H2以外的数据库用于本地注册表…

[Swift]LeetCode1147. 段式回文 | Longest Chunked Palindrome Decomposition

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号&#xff1a;山青咏芝&#xff08;shanqingyongzhi&#xff09;➤博客园地址&#xff1a;山青咏芝&#xff08;https://www.cnblogs.com/strengthen/&#xff09;➤GitHub地址&a…

运用PyTorch动手搭建一个共享单车预测器

本文摘自 《深度学习原理与PyTorch实战》 我们将从预测某地的共享单车数量这个实际问题出发&#xff0c;带领读者走进神经网络的殿堂&#xff0c;运用PyTorch动手搭建一个共享单车预测器&#xff0c;在实战过程中掌握神经元、神经网络、激活函数、机器学习等基本概念&#xff0…