Статьи

Начало работы с Couchbase и Spring Data Couchbase

Автор Джош Лонг в блоге Spring.

Этот блог был вдохновлен выступлением  Лорана Догуина , адвоката разработчика в Couchbase, и я выступил на  Couchbase Connect в  прошлом году. Мерси Лоран!

Это демонстрация   интеграции Spring Data Couchbase . На  странице проекта , Spring Data Couchbase является:

Проект Spring Data Couchbase обеспечивает интеграцию с базой данных Couchbase Server. Ключевые функциональные области Spring Data Couchbase — это POJO-центричная модель для взаимодействия с Couchbase Buckets и простой написания слоя доступа к данным в стиле репозитория.

Что такое Couchbase?

Couchbase — это распределенное хранилище данных с истинным горизонтальным масштабированием. Мне нравится воспринимать это как смесь Redis и MongoDB: вы работаете с документами, доступ к которым осуществляется через их ключи. Существует множество клиентских API для всех языков. Если вы используете Couchbase для своей серверной части и используете JVM, вам  понравится Spring Data Couchbase . Пули на домашней странице проекта лучше всего перечисляют его многочисленные особенности:

  • Поддержка конфигурации Spring с использованием @Configuration классов на основе Java  или пространства имен XML для драйвера Couchbase.
  • CouchbaseTemplate вспомогательный класс, который увеличивает производительность при выполнении обычных операций Couchbase. Включает в себя интегрированное сопоставление объектов между документами и объектами POJO.
  • Преобразование исключений в иерархию исключений Spring для доступа к данным.
  • Многофункциональное сопоставление объектов, интегрированное со службой преобразования Spring.
  • Метаданные отображения на основе аннотаций, но расширяемые для поддержки других форматов метаданных.
  • Автоматическая реализация интерфейсов репозитория, включая поддержку пользовательских методов поиска (при поддержке Couchbase Views).
  • Администрирование и мониторинг JMX
  • Прозрачная  @Cacheable поддержка для кэширования любых объектов, необходимых для высокопроизводительного доступа.

Бег Couchbase

Используйте Vagrant для запуска Couchbase локально

Вам нужно будет установить Couchbase, если вы этого еще не сделали (естественно). Майкл Нитчингер ( @daschl , также руководитель проекта Spring Data Couchbase) рассказал о том, как запустить и запустить простой 4-узловый кластер Vagrant . Я воспроизвел его пример здесь, в  vagrantкаталоге. Чтобы использовать его, вам , конечно, нужно установить  Virtual Box  и  Vagrant , но затем просто запустить  vagrant up в  vagrant каталоге. Чтобы получить самую последнюю версию этого скрипта конфигурации, я пошел в  проект Michael  GitHub vagrants  и обнаружил, что помимо этого примера, есть  множество  других доступных скриптов Vagrant, У меня есть подмодуль в каталоге проекта этого кода, который указывает на это, но не забудьте проконсультироваться с ним для самых последних. Чтобы все работало на моей машине, я выбрал  установку Ubuntu 12 Couchbase 3.0.2 . Вы можете изменить количество запускаемых узлов, настроив  VAGRANT_NODES переменную среды перед запуском:

VAGRANT_NODES=2 vagrant up

Вам нужно будет администрировать и настраивать Couchbase при первоначальной настройке. Направьте ваш браузер на правильный IP для каждого узла. Правила определения этого IP  хорошо описаны в  README. Интерфейс администратора, в моем случае, был доступен на  192.168.105.101:8091 и 192.168.105.102:8091. Для получения дополнительной информации об этом процессе, я рекомендую вам следовать указаниям здесь  для деталей.

Вот как я это сделал. Я ударил интерфейс администратора  на первом узле  и создал новый кластер. Я использовал admin для имени пользователя и  password для пароля. На всех последующих страницах управления я просто присоединился к существующему кластеру, указав узлы  192.168.105.101 и используя вышеупомянутые  admin учетные данные. Как только вы объединили все узлы, найдите Rebalance кнопку на   панели « Узлы сервера» и запустите перебалансировку кластера.

Если вы закончили работу со своим кластером Vagrant, вы можете использовать  vagrant halt команду для его полного отключения. Также очень удобно  vagrant suspend, что будет сохранять состояние узлов, а не завершать их полностью.

Если вы хотите управлять кластером Couchbase из командной строки, это удобно couchbase-cli. Вы можете просто использовать  vagrant ssh команду , чтобы попасть в каждый из узлов (их узлов названий:  node1node2и т.д ..). Оказавшись там, вы можете запустить команды конфигурации кластера. Например,  server-list команда будет перечислять узлы кластера.

/opt/couchbase/bin/couchbase-cli server-list -c 192.168.56.101-u admin -p password

Легко вызвать  ребаланс,  используя:

/opt/couchbase/bin/couchbase-cli rebalance -c 192.168.56.101-u admin -p password

Couchbase In the Cloud и Cloud Foundry

Couchbase пригодна для использования в облаке. Он масштабируется по горизонтали (как Gemfire или Cassandra) в том смысле, что нет единой точки отказа. Он не использует ведущий-ведомый или активную / пассивную систему. Есть несколько способов запустить его там, где работают ваши приложения. Если вы используете установку Cloud Foundry, то вы можете установить  Cumulogic Service Broker,  который позволит вашей установке Cloud Foundry общаться с платформой Cumulogic, которая сама может управлять экземплярами Couchbase. Сервисные брокеры — это фрагмент кода интеграции, который учит Cloud Foundry, как предоставлять, уничтожать и вообще взаимодействовать с управляемым сервисом, таким как Couchbase, в данном случае.

Использование Spring Data Couchbase для хранения мест Facebook

Давайте рассмотрим простой пример, который читает данные (в данном случае из API Facebook Places с использованием API Spring Social Facebook  FacebookTemplate ), а затем загружает их на сервер Couchbase.

Получить токен доступа Facebook

Вам также понадобится токен доступа Facebook. Самый простой способ сделать это — зайти  на Портал разработчиков Facebook  и создать новое приложение, а затем получить идентификатор приложения и секретный ключ приложения. Возьмите эти два значения и объедините их с помощью символа pike ( |). Таким образом, вы будете иметь что — то в виде:  appID|appSecret. В примере приложения Environment для разрешения facebook.accessToken ключа используется механизм  Spring  . Вы можете указать для него значение в  src/main/resources/application.properties файле или с помощью любого из других поддерживаемых механизмов разрешения свойств Spring Boot. Вы можете даже предоставить значение в качестве  -D аргумента: -Dfacebook.accessToken=...|...

Рассказывая Spring Data Couchbase о нашем кластере

Данные в Couchbase хранятся в  контейнерах . Логически это то же самое, что и  база данных  в СУБД SQL. Обычно он реплицируется между узлами и имеет собственную конфигурацию. Мы будем использовать контейнер по  умолчанию , но совсем просто создать больше контейнеров.

Давайте рассмотрим базовую конфигурацию, необходимую для использования Spring Data Couchbase (в данном случае, с точки зрения приложения Spring Boot):

@SpringBootApplication
@EnableScheduling
@EnableCaching
public class Application {

  @EnableCouchbaseRepositories
@Configuration
static class CouchbaseConfiguration extends AbstractCouchbaseConfiguration {

@Value("${couchbase.cluster.bucket}")
private String bucketName;

@Value("${couchbase.cluster.password}")
private String password;

@Value("${couchbase.cluster.ip}")
private String ip;

@Override
protected List<String> bootstrapHosts() {
return Arrays.asList(this.ip);
}

@Override
protected String getBucketName() {
return this.bucketName;
}

@Override
protected String getBucketPassword() {
return this.password;
}
}

  // more beans

}

Хранилище данных Spring Couchbase

Spring Data предоставляет понятие репозиториев — объектов, которые обрабатывают типичную логику доступа к данным и предоставляют основанные на соглашениях запросы. Их можно использовать для сопоставления POJO с данными в резервном хранилище данных.

В нашем примере просто хранится информация о предприятиях, которую он читает из API Places Facebook. Для этого мы создали простую  Place сущность, которую репозитории Spring Data Couchbase будут знать, как сохранить:

@Document(expiry = 0)
class Place {

@Id
private String id;

@Field
private Location location;

@Field
@NotNull
private String name;

@Field
private String affilitation, category, description, about;

@Field
private Date insertionDate;
  // .. getters, constructors, toString, etc
}

Place Объект ссылается на другой объект,  Location, который является в основном то же самое.

В случае Spring Data Couchbase методы поиска репозитория отображаются на  представления  — запросы, написанные на JavaScript — на сервере Couchbase. Вам нужно настроить представления на серверах Couchbase. Перейдите в консоль администратора любого сервера Couchbase и перейдите на   экран « Виды» , затем нажмите « Создать представление разработки»  и назовите его так  place, как будет выглядеть наша сущность  demo.Place (имя представления разработки по умолчанию адаптируется из имени класса сущности).

Мы создадим два представления: общее  all, которое требуется для любого POJO Spring Data Couchbase, и  byName представление, которое будет использоваться для управления findByName методом поиска в хранилище  . Это отображение является условным, хотя вы можете переопределить, какое представление используется с  @View аннотацией в объявлении метода поиска.

Во- первых,  all:

Теперь  byName:

Когда вы закончите, не забудьте  опубликовать  каждый вид!

Теперь вы можете использовать репозитории Spring Data так, как вы ожидаете. Единственное, что немного отличается в этих репозиториях, это то, что мы объявляем Query тип Spring Data Couchbase  для аргумента  findByName метода поиска, а не String. Используя  @Query это просто:

Query query = new Query();
query.setKey("Philz Coffee");
Collection<Place> places = placeRepository.findByName(query);
places.forEach(System.out::println);

Куда пойти отсюда

Мы только рассмотрели некоторые основы здесь. Spring Data Couchbase поддерживает  API проверки Java-бина и может быть настроен на соблюдение ограничений проверки его сущностей. Spring Data Couchbase также предоставляет низкоуровневый доступ к  CouchbaseClient API, если вы этого хотите. Spring Data Couchbase  также  реализует   абстракцию Spring CacheManager  — вы можете использовать @Cacheable и дружить с данными о методах обслуживания, и они будут прозрачно сохранены в Couchbase для вас.

Код для  этого примера находится в моем репозитории Github , совместно с моим приятелем Лораном Догуином ( @ldoguin ) из Couchbase.