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

柳宾实
2023-12-01

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

先决条件

如果使用的是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 here

        client.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文档中的以下章节:

使用视图

首先,您刚刚创建的视图处于“开发模式”,默认情况下,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

 类似资料: