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

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

  1. Couchbase 101:从Java应用程序创建视图(MapReduce)

    使用Couchbase 2.0开发新应用程序时,有时需要从代码中动态创建视图. 例如,在安装应用程序,编写一些测试时,可能会需要此方法:或者,在构建框架时,您也可以使用它,并希望动态创建视图以查询数据 ...

  2. java怎么创建二进制文件_如何为Java应用程序创建本机二进制文件?

    参见英文答案 > How can I convert my Java program to an .exe file? [closed]                              ...

  3. java国际化程序创建属性文件,Java程序国际化学习代码一

    Java程序国际化初识 1.基本思路 Java程序的国际化的思路是将程序中的标签.提示等信息放在资源文件中,程序需要支持哪些国家.语言环境,就对应提供相应的资源文件.资源文件是key-value对,每 ...

  4. Java 编写程序 创建一个游戏【5、6两章的内容】【第5章】

    每次使用单边大脑的时间不要太久, 连续使用左边脑30 分钟如同使用左臂 30 分钟一样, 周期性性地交换让大脑两侧轮流休息. 左脑活动包括了循序渐进的工作,解决逻辑问题与分析: 右脑的活动包括了阴雨. ...

  5. java国际化程序创建属性文件_Java国际化(i18n)ResourceBundle类

    ResourceBundle类用于存储区域设置敏感的文本和对象. 通常使用属性文件来存储特定于语言环境的文本,然后使用ResourceBundle对象来表示它们. 以下是在基于Java的应用程序中使用 ...

  6. Java Mysql数据库创建视图、索引、备份和恢复

    #使用视图获取多表中的数据DROP VIEW IF EXISTS `view_result`; CREATE VIEW `view_result` AS  SELECT s.`studentName` ...

  7. java程序转成mac应用,如何为Java应用程序创建Mac安装程序?

    I have created an executable JAR file for my Java application. If I double-click then it works fine. ...

  8. IntelliJ IDEA 运行你的第一个Java应用程序

    IntelliJ IDEA 运行你的第一个Java应用程序 创建项目让我们创建一个简单的Java Hello World项目. 单击创建新的项目. 打开新建项目向导. 你应该注意的主要是项目的SDK. ...

  9. IntelliJ IDEA使用教程创建Java 应用程序

    前言 在本教程中,您将学习如何创建.运行和打包打印到系统输出的简单 Java 应用程序.在此过程中,您将熟悉IntelliJ IDEA功能,以提高开发人员的工作效率:编码辅助和补充工具. IDE解释 ...

最新文章

  1. 在线即时通讯工具的网页即时聊天的html代码
  2. 【杂谈】怎么使用有三AI完成系统性学习并赚钱
  3. javascript(js)获取访客通过搜索引擎进入页面的搜索关键词的简洁有效代码
  4. pb90代码如何连接sql2008r2_如何使用 HTTP Headers 来保护你的 Web 应用
  5. 三国佚事——巴蜀之危【递推】
  6. 飞鸽传书网站最新改版
  7. 解决Python报错:local variable ‘xxxxx‘ referenced before assignment
  8. 多个Wyze 摄像头漏洞可导致攻击者接管设备并访问视频
  9. SpringMVC的拦截器(Interceptor)和过滤器(Filter)的区别与联系
  10. sql不同数据处理方式完成同一处理结果对日志增长的影响
  11. Matlab图像显示
  12. rrcf算法的初步理解
  13. 杭州电子科技大学OJACM 2049题 (必AC及其易错点)
  14. 康托尔点集matlab实数,为什么康托尔集内的数和实数个数一样多
  15. 何谓Palm size-PC及Pocket PC?
  16. html唯美登录+樱花落下实现(复制即用)
  17. 我们为什么生病:达尔文医学的新观念
  18. js快速获取当前链接和域名
  19. Mysql主主同步(主从同步)
  20. 转发 2013年度电影100佳

热门文章

  1. 《四世同堂》金句摘抄(十二)
  2. Servlet API
  3. python常见内置函数
  4. count does not exist. Check the 'Function Name Parsing and Resolution' section in the Reference Manu
  5. 西瓜显示服务器错误,西瓜云服务器
  6. java 读取svg元素_svg动态添加元素
  7. 查找前端依赖 jquery css js 时间控件 不要用远程依赖 会变化的 card
  8. SuperMap GIS查询
  9. rails jquery_Spring与Rails的jQuery UJS
  10. 网络研讨室_免费网络研讨会:Java应用程序中的吞咽异常