2014-12-17 3 views
1

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

Хотелось бы знать, что такое право способ реализовать объединение монго-соединений в рамках шторма?

Параметры, которые мы поставили:
У нас есть носик, который читается из базы данных Mongo. мы просто помещаем singleton Mongo class внутри носика и инициализируем его в открытом методе? - Но этот подход не позволил, если нужно, поделиться монгольским экземпляром.
хотел бы иметь некоторые указатели на правильный способ сделать это.Монго Пулы соединений для штормовых топологии

ответ

1

Пулы соединений в шторм немного сложнее, так как вы должны рассмотреть несколько вещей:

  1. Вы выполняющиеся в кластерной среде -> несколько машин нуждаются в своих собственных соединений
  2. Каждый шторм работник работает в отдельной JVM -> вероятно, что исполнители не работают в одной и той же работник ... который не означает, что нет совместного соединения

Так что, не беспокойтесь об этом слишком много. Продолжайте использовать экземпляр Singleton (как в ответе @ bridiver) вашего класса внутри ваших Spouts и Bolts, как обычно. Если у них будет одна и та же JVM, тогда они будут делиться одним и тем же пулом, и вам хорошо идти!

Что касается инициализации, вот что я делаю: информацию о конфигурации

  1. Пасса в носике/болт с помощью конструктора
  2. Инициализировать подключения в open (для сливов) или prepare (для болтов) методов
  3. соединения не разделены между носиком и болтом
+0

Я думаю, что Остина имеет в виду самого инициализации пула. В зависимости от реализации, которая может или не может быть обработана для вас автоматически. – bridiver

+0

@bridiver Хорошо, я понимаю, что вы имеете в виду. Я обновил свой ответ, чтобы включить то, что я делаю с инициализацией. Сейчас я не использую синглтоны, каждый носик/болт управляет собственной связью. –

+0

Каждый исполнитель Storm работает в отдельной JVM? это не рабочий, который работает в отдельной JVM. – Tanvi

1

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

Mongo.create_connection_pool(conf) 

и метод

public static synchronized void create_connection_pool(Config conf) { 
    if (connected) 
    return; 
    else { 
    initialize connection... 
    connected = true; 
    } 
} 
Смежные вопросы