Когда вы разрабатываете новые приложения на Couchbase 2.0, вам иногда нужно динамически создавать представление из вашего кода. Например, вам может понадобиться это при установке приложения, написании какого-либо теста, или вы также можете использовать это при создании каркасов и хотите динамически создавать представления для запроса данных. Этот пост показывает, как это сделать.
Предпосылки
Если вы используете Maven, вы можете использовать следующую информацию в вашем pom.xml, чтобы добавить клиентскую библиотеку Java:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
<repositories> <repository> <id>couchbase</id> <name>Couchbase Maven Repository</name> <layout>default</layout> <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 Cluster
Первое, что нужно сделать, когда вы хотите создать представление из Java, это подключиться к кластеру.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import com.couchbase.client.CouchbaseClient;...... List<uri> uris = new LinkedList<uri>(); 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> |
- Создайте список URI для разных узлов кластера — строки 5-6. (В этом примере я работаю на одном узле)
- Подключитесь к корзине, в нашем случае beer-sample -line 9. Вы можете включить пароль, если корзина защищена (здесь это не так, поэтому я отправляю пустую строку)
Если вам нужна дополнительная информация о Couchbase и Java, вы можете прочитать эту статью в DZone: Hello World с Couchbase и Java .
Давайте теперь поговорим о представлениях Couchbase. Вы используете функции views / map-lower для индексации и запроса данных с Couchbase Server на основе содержимого документа JSON, который вы храните в Couchbase. Для получения дополнительной информации о представлениях вы можете обратиться к главе « Основы просмотра» в Руководстве Couchbase Server.
Создать виды из Java
Создать представление из Java очень просто: клиентская библиотека Java содержит все классы и методы для этого. В качестве конкретного варианта использования мы будем использовать приложение, описанное в руководстве по Couchbase Java .
Когда вы будете следовать этому руководству, вам нужно будет вручную создать некоторые виды, как вы можете видеть здесь . В этом примере мы создадим нашу функцию карты и непосредственно в нашем Java-коде, а затем сохраним ее на Couchbase Server. В учебнике предлагается создать следующие артефакты:
- представление с именем ‘by_name’
- в проектном документе с именем ‘dev_beer’ (режим разработки)
- и функция карты, которая выглядит следующим образом:
|
1
2
3
4
5
|
function (doc, meta) { if(doc.type && doc.type == 'beer') { emit(doc.name, null); }} |
Следующий код позволяет вам сделать это из Java:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
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 с именем и функцией map — строка 14.
- Вы можете добавить этот вид в проектный документ — строка 15
- Наконец сохраните документ в кластер, используя метод CouchbaseClient.createDesignDoc.
Если вам нужно использовать функцию приведения (встроенную или пользовательскую), вам просто нужно перейти к конструктору ViewDesign в качестве третьего параметра.
При разработке представления из Java или из любого другого инструмента / языка убедитесь, что вы понимаете, каковы лучшие практики, и жизненный цикл индекса. Вот почему я приглашаю вас взглянуть на следующие главы в документации Couchbase:
- Просмотр наилучшей практики написания : например, в функции карты я не выдаю никакого значения. Я выбрасываю только ключ (название пива).
- Представления и сохраненные данные
- Представления разработки и производства : в представлении выше я создал представление в среде разработки (префикс dev_), позволяющее мне тестировать и использовать его для подмножества данных (кластер / индекс)
Используя представление
Прежде всего, только что созданное вами представление находится в «режиме разработки», и по умолчанию клиентский SDK Java будет получать доступ к представлению только в «производственном режиме». Это означает, что когда вы вызываете представление из вашего приложения, оно будет искать его в производственной среде. Поэтому перед подключением к кластеру Couchbase необходимо настроить режим просмотра для разработки.
Это делается с помощью переменной среды viewmode из Java SDK, которую можно установить с помощью следующих методов:
- В своем коде добавьте эту строку до того, как клиент подключится к кластеру: System.setProperty (‘viewmode’, ‘development’);
- В командной строке -Dviewmode = разработка
- В файле свойств viewmode = development
Как только это будет сделано, вы можете вызвать представление, используя следующий код:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
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 сгенерирует индекс, основанный на вашей функции карты, запросит у сервера результаты. В этом случае мы специально хотим установить ограничение в 20 результатов, а также получить самые последние результаты, установив Stale.FALSE.
- Установите режим просмотра на развитие — строка 4
- Получите представление, используя метод CouchbaseClient.getView () -line 6-. Как видите, я просто использую название beer для проектного документа (а не dev_beer, Couchbase будет знать, где искать, так как я в режиме разработки)
- Создайте запрос и установите ограничение (20) и попросите SDK вернуть сам документ
setIncludeDocs (true) -line 8- Документ будет возвращен с сервера Couchbase наиболее эффективным способом - Попросите систему обновить индекс, прежде чем возвращать результат, используя query.setStale (Stale.FALSE); линия 9-. Еще раз будьте осторожны при использовании метода setStale. Просто чтобы быть уверенным, что вот документация об этом: Обновления индекса и устаревший параметр
- Выполнить запрос — строка 10
- И использовать результат — строки 11-13
Вывод
В этой статье вы узнали:
- Как создать представления Couchbase из Java
- Назовите это представление из Java
- Сконфигурируйте представления режима разработки / производства из клиентской библиотеки Java Couchbase
Этот пример ограничен созданием представления, вы можете взглянуть на другие методы, связанные с проектными документами и представлениями, если вы хотите управлять своими проектными документами: getDesignDocument (), deleteDesignDocument (),….
Ссылка: Couchbase 101: Создание представлений (MapReduce) из вашего Java-приложения от нашего партнера по JCG Тугдуала Граля в блоге Tug’s Blog .