Когда вы разрабатываете новые приложения на 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 .