Статьи

Многократные Соединения Ведра в Couchbase с Рубином

Это сообщение от  Робина Джонсона из блога Couchbase.

c = Couchbase.new(“http://localhost:8091/pools/default/buckets/my-bucket”)

Я считаю, что можно с уверенностью сказать, что мы в основном знакомы с приведенным выше кодом Ruby. Он устанавливает соединение из Ruby SDK с выбранным нами контейнером внутри нашего кластера Couchbase. Конечно, есть несколько способов написания этой строки, например, указание URI и порта в виде символов Ruby (: pool => «default»,: bucket => «my-bucket») и т. Д. здесь мы пишем эти простые однострочные команды и получаем одно простое соединение с выбранной корзиной. Но что, если наше приложение использует несколько сегментов? В этой статье я вернусь к основам и познакомлю вас с настройкой и подключением к нескольким сегментам .

Зачем мне использовать несколько ведер в Couchbase?

Использование нескольких контейнеров в Couchbase — интересная концепция. (Для меня, во всяком случае.)

С одной стороны, есть несколько преимуществ использования нескольких блоков, но важно помнить, что благодаря гибкой схеме Couchbase мы можем хранить документы JSON любой структуры в одном блоке, даже если схема каждого документа была разной.

Однако в настоящее время многие потребители Couchbase видят преимущества использования нескольких сегментов в своих приложениях. Например, если вы являетесь хостинг-провайдером и хотите, чтобы разные пользователи использовали один и тот же сервер базы данных, сегменты могут быть защищены паролем и не позволят одному пользователю получить доступ к данным другого пользователя.

Некоторые люди создают несколько групп для организационных целей. Например, вы можете запустить два разных приложения и хотите, чтобы данные были отдельными, или, может быть, вы просто хотите разделить данные по категориям. Все это очень разумные варианты использования и, безусловно, очень возможно. Итак, теперь, когда мы знаем, почему мы можем использовать несколько сегментов, давайте посмотрим, как мы можем подключиться и использовать эти сегменты.
 

Подключение к нескольким ведрам в Couchbase

Давайте углубимся. Откройте вашу консоль администратора . Нажмите на вкладку «Buckets», и давайте создадим 2 новых Buckets: bucket1 и bucket2.

Итак, теперь, когда у нас есть наши блоки данных, давайте напишем немного Ruby для создания наших клиентских подключений к ним!

Во-первых, убедитесь, что у вас установлен Libcouchbase . Затем убедитесь, что у вас установлена ​​последняя версия Couchbase Ruby Gem . Затем создайте файл Ruby с именем cb_connect.rb.  Я использую Ruby 2.0, но вам просто нужно использовать 1.9+.

require 'rubygems'
require 'couchbase'

CONFIG = {
  :node_list => ["localhost:8091"],
  :key_prefix => "pool_",
  :pool_size => 3
}

Здесь мы устанавливаем некоторые параметры конфигурации подключения. Наш список узлов является стандартным. Мы устанавливаем ключевой префикс для добавления в наши документы «pool_» при установке. Мы также устанавливаем наш pool_size равным трем.

Теперь давайте напишем объект потокового пула, который проксирует все методы для экземпляра Couchbase :: Bucket :

def connection(bucket)
  @servers ||= {}
  @servers[bucket] ||= begin
                       size = CONFIG[:pool_size]
                       params = CONFIG.merge(:bucket => bucket
                       Couchbase::ConnectionPool.new(size, params)
  end
end

Здесь вы заметите, что существует определенная нехватка специфичности в отношении сегментов. В приведенной выше конфигурации мы устанавливаем параметры, чтобы принимать уже указанные : pool_size  и : bucket,  которые мы указываем во время ops. Написав этот небольшой метод соединения, мы позволяем себе указывать несколько блоков в нашем коде Ruby.

Давайте проверим наш метод соединения, написав несколько опций для Couchbase:

connection("bucket1").set('foo', 'bar')
connection("bucket2").set('bar', 'foo')
 
threads = []
5.times do
  threads << Thread.new do
    connection("bucket1").get('foo')
    connection("bucket2").get('bar')
  end
end

threads.map do |t|
  puts [t.object_id, t.value].join("\t")
end

Здесь мы устанавливаем некоторые примеры данных, но определяем наше соединение с помощью команды set. Затем мы используем встроенную многопоточность в Ruby для выполнения операций get с нашим набором образцов объектов. Здесь мы также указываем наше соединение в команде get.

После написания этого кода вы должны увидеть красивую визуализацию данных в интерфейсе администратора. Последний блок, который мы написали, соединит ключи данных примера со значением и напечатает их в нашем терминале.

В вашем терминале запустите:

ruby cb_connect.rb

Вы должны увидеть вышеупомянутую визуализацию и вывод:


 

Поэтому мы настроили наше соединение, используя свойство ConnectionPool в Couchbase (доступно только в Ruby 1.9+), и указали наши сегменты во время ops. Таким образом, мы можем установить несколько соединений через объединение в пул в Couchbase Ruby.

Чтобы увидеть полный код этого блога, см. Gist .

Для тех из вас, Rubyists, кто неравнодушен к использованию Rails, я сейчас пишу пример приложения на Rails, основанного на социальной игровой таблице лидеров. Я использую гем Couchbase-Model, который позволяет моделировать данные, подобные Active_Record. Это приложение и код с открытым исходным кодом будут опубликованы вместе с другим практическим блогом в течение следующей недели.
 

— Робин Джонсон
Разработчик Адвокат, Европа