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>
- 创建到群集不同节点的URI列表-第5-6行。 (在此示例中,我正在单个节点上工作)
- 连接到存储桶,在本例中为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)相关推荐
- Couchbase 101:从Java应用程序创建视图(MapReduce)
使用Couchbase 2.0开发新应用程序时,有时需要从代码中动态创建视图. 例如,在安装应用程序,编写一些测试时,可能会需要此方法:或者,在构建框架时,您也可以使用它,并希望动态创建视图以查询数据 ...
- java怎么创建二进制文件_如何为Java应用程序创建本机二进制文件?
参见英文答案 > How can I convert my Java program to an .exe file? [closed] ...
- java国际化程序创建属性文件,Java程序国际化学习代码一
Java程序国际化初识 1.基本思路 Java程序的国际化的思路是将程序中的标签.提示等信息放在资源文件中,程序需要支持哪些国家.语言环境,就对应提供相应的资源文件.资源文件是key-value对,每 ...
- Java 编写程序 创建一个游戏【5、6两章的内容】【第5章】
每次使用单边大脑的时间不要太久, 连续使用左边脑30 分钟如同使用左臂 30 分钟一样, 周期性性地交换让大脑两侧轮流休息. 左脑活动包括了循序渐进的工作,解决逻辑问题与分析: 右脑的活动包括了阴雨. ...
- java国际化程序创建属性文件_Java国际化(i18n)ResourceBundle类
ResourceBundle类用于存储区域设置敏感的文本和对象. 通常使用属性文件来存储特定于语言环境的文本,然后使用ResourceBundle对象来表示它们. 以下是在基于Java的应用程序中使用 ...
- Java Mysql数据库创建视图、索引、备份和恢复
#使用视图获取多表中的数据DROP VIEW IF EXISTS `view_result`; CREATE VIEW `view_result` AS SELECT s.`studentName` ...
- java程序转成mac应用,如何为Java应用程序创建Mac安装程序?
I have created an executable JAR file for my Java application. If I double-click then it works fine. ...
- IntelliJ IDEA 运行你的第一个Java应用程序
IntelliJ IDEA 运行你的第一个Java应用程序 创建项目让我们创建一个简单的Java Hello World项目. 单击创建新的项目. 打开新建项目向导. 你应该注意的主要是项目的SDK. ...
- IntelliJ IDEA使用教程创建Java 应用程序
前言 在本教程中,您将学习如何创建.运行和打包打印到系统输出的简单 Java 应用程序.在此过程中,您将熟悉IntelliJ IDEA功能,以提高开发人员的工作效率:编码辅助和补充工具. IDE解释 ...
最新文章
- 在线即时通讯工具的网页即时聊天的html代码
- 【杂谈】怎么使用有三AI完成系统性学习并赚钱
- javascript(js)获取访客通过搜索引擎进入页面的搜索关键词的简洁有效代码
- pb90代码如何连接sql2008r2_如何使用 HTTP Headers 来保护你的 Web 应用
- 三国佚事——巴蜀之危【递推】
- 飞鸽传书网站最新改版
- 解决Python报错:local variable ‘xxxxx‘ referenced before assignment
- 多个Wyze 摄像头漏洞可导致攻击者接管设备并访问视频
- SpringMVC的拦截器(Interceptor)和过滤器(Filter)的区别与联系
- sql不同数据处理方式完成同一处理结果对日志增长的影响
- Matlab图像显示
- rrcf算法的初步理解
- 杭州电子科技大学OJACM 2049题 (必AC及其易错点)
- 康托尔点集matlab实数,为什么康托尔集内的数和实数个数一样多
- 何谓Palm size-PC及Pocket PC?
- html唯美登录+樱花落下实现(复制即用)
- 我们为什么生病:达尔文医学的新观念
- js快速获取当前链接和域名
- Mysql主主同步(主从同步)
- 转发 2013年度电影100佳
热门文章
- 《四世同堂》金句摘抄(十二)
- Servlet API
- python常见内置函数
- count does not exist. Check the 'Function Name Parsing and Resolution' section in the Reference Manu
- 西瓜显示服务器错误,西瓜云服务器
- java 读取svg元素_svg动态添加元素
- 查找前端依赖 jquery css js 时间控件 不要用远程依赖 会变化的 card
- SuperMap GIS查询
- rails jquery_Spring与Rails的jQuery UJS
- 网络研讨室_免费网络研讨会:Java应用程序中的吞咽异常