Управление TCP-соединением - PullRequest
       7

Управление TCP-соединением

0 голосов
/ 11 февраля 2011

Мне задали этот вопрос в списке рассылки Go, но я думаю, что более общий ответ получить от SO.

При работе с платформой Java / .Net мне никогда не приходилось управлять подключением к базе данных вручную, поскольку драйверы справляются с этим. Теперь, когда я пытаюсь подключиться к базе данных без sql с очень простой поддержкой драйверов, я отвечаю за управление соединением. Драйвер позволяет подключаться, закрываться, повторно подключаться к порту tcp, но не уверен, как мне управлять им (см. Ссылку ). Нужно ли создавать новое соединение для каждого запроса БД? можно использовать другие сторонние библиотеки пулов соединений?

спасибо.

Ответы [ 3 ]

1 голос
/ 12 февраля 2011

Я не знаю достаточно о MongoDB, чтобы ответить на этот вопрос напрямую, но знаете ли вы, как MongoDB обрабатывает запросы по TCP?Например, одна проблема с одним TCP-соединением может заключаться в том, что БД будет обрабатывать каждый запрос последовательно, что может вызвать высокую задержку, даже если это может быть узким местом на одной машине и может обрабатывать более высокую емкость.

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

Мои два цента: сделать одно TCP-соединение на запрос и просто профилировать его и посмотретьчто просходит.Очень легко добавить пул позже, если вы делаете DoSing самостоятельно, но это может никогда не быть проблемой.Это сработает прямо сейчас, и вам не придется возиться со сторонней библиотекой, которая может вызвать больше проблем, чем решает.

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

0 голосов
/ 14 февраля 2011

В дополнение к ответам здесь: если вы обнаружите, что вам нужно выполнить какой-то пул соединений redis.go - это достойный пример драйвера базы данных, который объединяет соединения.В частности, посмотрите на методы Client.popCon и Client.pushCon в источнике.

0 голосов
/ 12 февраля 2011

Большинство драйверов mongodb (клиентов) создают и используют пул соединений при подключении к серверу. Каждый сокет (соединение) может выполнять одну операцию за раз на сервере; из-за того, как данные считываются из сокета, вы можете выдавать много запросов, и сервер будет просто получать их один за другим и возвращать данные по завершении каждого.

Существует драйвер Go mongo db, но он, похоже, не выполняет пул соединений. http://github.com/mikejs/gomongo

...