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>如果您正在尋找有關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函數,如下所示:
以下代碼允許您從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)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux u盘制作(u盘linux制作
- 下一篇: jvmlinux(jvm linux)