Статьи

Couchbase 101: создание представлений (MapReduce) из вашего Java-приложения

Когда вы разрабатываете новые приложения на 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>();
    uris.add(URI.create("http://127.0.0.1:8091/pools"));
    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>
  1. Создайте список URI для разных узлов кластера — строки 5-6. (В этом примере я работаю на одном узле)
  2. Подключитесь к корзине, в нашем случае 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:

Используя представление

Прежде всего, только что созданное вами представление находится в «режиме разработки», и по умолчанию клиентский 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 .