couchbase_Couchbase 101:从Java应用程序创建视图(MapReduce)
couchbase
使用Couchbase 2.0開發(fā)新應(yīng)用程序時(shí),有時(shí)需要從代碼中動(dòng)態(tài)創(chuàng)建視圖。 例如,在安裝應(yīng)用程序,編寫一些測試時(shí),可能會(huì)需要此方法;或者,在構(gòu)建框架時(shí),您也可以使用此方法,并希望動(dòng)態(tài)創(chuàng)建視圖以查詢數(shù)據(jù)。 這篇文章展示了如何做到這一點(diǎn)。
先決條件
- Couchbase服務(wù)器2.0
- Couchbase Jave客戶端庫1.1.x
- 啤酒樣品數(shù)據(jù)集
如果使用的是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創(chuàng)建和管理視圖
完整的Maven項(xiàng)目在Github上可用。
連接到Couchbase群集
要從Java創(chuàng)建視圖時(shí),要做的第一件事顯然是連接到集群。
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>如果您正在尋找有關(guān)Couchbase和Java的更多信息,可以從DZone閱讀這篇文章: Hello World with Couchbase和Java 。
現(xiàn)在讓我們談?wù)凜ouchbase視圖。 您可以使用views / map-reduce函數(shù)基于存儲(chǔ)在Couchbase中的JSON文檔的內(nèi)容來索引和查詢Couchbase Server中的數(shù)據(jù)。 有關(guān)視圖的更多信息,請(qǐng)參見《 Couchbase服務(wù)器手冊(cè)》的“視圖基礎(chǔ)”一章 。
從Java創(chuàng)建視圖
從Java創(chuàng)建視圖確實(shí)非常容易:Java客戶端庫包含完成該操作的所有類和方法。 作為一個(gè)具體的用例,我們將使用Couchbase Java教程中描述的應(yīng)用程序。
遵循本教程時(shí),您需要手動(dòng)創(chuàng)建一些視圖,如此處所示 。 在此示例中,我們將直接在Java代碼中創(chuàng)建映射函數(shù),然后將其存儲(chǔ)到Couchbase Server。 本教程要求您創(chuàng)建以下工件:
- 一個(gè)名為“ by_name”的視圖
- 在名為“ dev_beer”的設(shè)計(jì)文檔中(開發(fā)模式)
- 和map函數(shù),如下所示:
以下代碼允許您從Java進(jìn)行操作:
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行創(chuàng)建設(shè)計(jì)文檔。
- 使用com.couchbase.client.protocol.views.ViewDesign類創(chuàng)建一個(gè)具有名稱和地圖功能的視圖-第14行。
- 您可以將此視圖添加到設(shè)計(jì)文檔中-第15行
- 最后,使用CouchbaseClient.createDesignDoc方法將文檔保存到群集中。
如果需要使用reduce函數(shù)(內(nèi)置或自定義),則只需將其作為第三個(gè)參數(shù)傳遞給ViewDesign構(gòu)造函數(shù)。
從Java或任何其他工具/語言開發(fā)視圖時(shí),請(qǐng)確保您了解什么是最佳實(shí)踐以及索引的生命周期。 這就是為什么我邀請(qǐng)您閱讀Couchbase文檔中的以下章節(jié):
- View Writing Best Practice :例如在map函數(shù)中,我沒有發(fā)出任何值。 我只發(fā)出一個(gè)密鑰(啤酒名稱)。
- 視圖和存儲(chǔ)的數(shù)據(jù)
- 開發(fā)和生產(chǎn)視圖 :在上面的視圖中,我已經(jīng)在開發(fā)環(huán)境中創(chuàng)建了該視圖(dev_前綴),使我可以在數(shù)據(jù)的子集(集群/索引)上對(duì)其進(jìn)行測試和使用
使用視圖
首先,您剛剛創(chuàng)建的視圖處于“開發(fā)模式”,默認(rèn)情況下,Java客戶端SDK僅在處于“生產(chǎn)模式”時(shí)訪問該視圖。 這意味著從應(yīng)用程序調(diào)用視圖時(shí),它將在生產(chǎn)環(huán)境中搜索它。 因此,在連接到Couchbase集群之前,您需要設(shè)置視圖模式以進(jìn)行開發(fā)。
這是使用Java SDK中的viewmode環(huán)境變量完成的,可以使用以下方法進(jìn)行設(shè)置:
- 在您的代碼中,在客戶端連接到集群之前添加以下行:System.setProperty('viewmode','development');
- 在命令行-Dviewmode = development
- 在屬性文件中viewmode = development
完成后,您可以使用以下代碼調(diào)用視圖:
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} ...此代碼查詢您剛剛創(chuàng)建的視圖。 這意味著Couchbase Server將基于您的map函數(shù)生成索引,并向服務(wù)器查詢結(jié)果。 在這種情況下,我們特別希望設(shè)置限制為20個(gè)結(jié)果,并且還可以通過設(shè)置Stale.FALSE獲得最新的結(jié)果。
- 將viewmode設(shè)置為development –第4行
- 使用CouchbaseClient.getView()方法第6行獲取視圖。 如您所見,我只是在設(shè)計(jì)文檔中使用啤酒名稱(而不是dev_beer,因?yàn)槲姨幱陂_發(fā)模式,所以Couchbase會(huì)知道在哪里搜索)
- 創(chuàng)建一個(gè)查詢并設(shè)置一個(gè)限制(20),并要求SDK返回文檔本身
setIncludeDocs(true)-行8-將以最有效的方式從Couchbase服務(wù)器返回文檔 - 在使用query.setStale(Stale.FALSE)返回結(jié)果之前,要求系統(tǒng)更新索引。 線9-。 再次使用setStale方法時(shí)要小心。 只是為了確保這里是有關(guān)它的文檔: 索引更新和過時(shí)的參數(shù)
- 執(zhí)行查詢–第10行
- 并使用結(jié)果–第11-13行
結(jié)論
在本文中,您了解了:
- 如何從Java創(chuàng)建Couchbase視圖
- 從Java調(diào)用此視圖
- 從Couchbase Java客戶端庫配置開發(fā)/生產(chǎn)模式視圖
本示例僅限于視圖的創(chuàng)建,如果要管理設(shè)計(jì)文檔,可以查看與設(shè)計(jì)文檔和視圖相關(guān)的其他方法:getDesignDocument(),deleteDesignDocument()等。
參考: Couchbase 101:在Tug的Blog博客上,從我們的JCG合作伙伴 Tugdual Grall在Java應(yīng)用程序中創(chuàng)建視圖(MapReduce) 。
翻譯自: https://www.javacodegeeks.com/2013/01/couchbase-101-create-views-mapreduce-from-your-java-application.html
couchbase
總結(jié)
以上是生活随笔為你收集整理的couchbase_Couchbase 101:从Java应用程序创建视图(MapReduce)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux u盘制作(u盘linux制作
- 下一篇: 固定速率与固定延迟– RxJava常见问