Erlang MongoDB

132 views
Skip to first unread message

Alexander Kaloshin

unread,
Jun 30, 2013, 12:15:31 PM6/30/13
to erlang-...@googlegroups.com
Всем хорошего вечера.

Подскажите пожалуйста следующее

Я пишу приложение и в нём есть некий функционал по работе с mongodb.
Для начала я описал функцию подключения к бд и тем самым у меня появилась переменная Pool, хранящая в себе пул подключений к бд.

Так же я описал функцию делающую некий запрос к бд и тут беда. Как правильней я могу обратиться к переменной Pool для получения соединения с бд, ведь переменная была определена в другой функции.

Подскажите пожалуйста оптимальное решение!

Заранее спасибо)

Andy

unread,
Jun 30, 2013, 2:02:29 PM6/30/13
to erlang-...@googlegroups.com
Здравствуйте!

Ваш вопрос подразумевает, что Вы не используете gen_server/gen_fsm из состава OTP. Иначе Вы бы могли хранить это в состоянии процесса сервера. Если Вы все же намерены создавать свой велосипед, то можно хранить с словаре процесса или в ETS.

воскресенье, 30 июня 2013 г., 19:15:31 UTC+3 пользователь Alexander Kaloshin написал:

Alexander Kaloshin

unread,
Jun 30, 2013, 2:19:22 PM6/30/13
to erlang-...@googlegroups.com
Можно поподробнее пожалуйста?

Получается что лучшим вариантом является написание модуля с использованием gen_server, который будет отвечать за подключение, выборку подключений и т.п? А хранение осуществляется с помощью #state?


Sergey Prokhorov

unread,
Jun 30, 2013, 7:51:26 PM6/30/13
to erlang-...@googlegroups.com
Сам с Mongo из Erlang не работал, но, судя по README https://github.com/JacobVorreuter/emongo там в качестве имени пула используется атом. Если название атома известно, то его можно использовать в коде как есть (не передавать "по ссылке" а прям в исходниках писать).
Но вам бы с основами для начала разобраться лучше...

-module(my_mongo).
-define(POOL_ID, ?MODULE).

connect
()->
    emongo
:add_pool(?POOL_ID, "localhost", 27017, "testdatabase", 1).  %называем пул my_mongo

do_some_query
(...) ->
    emongo
:find(?POOL_ID, ...).

Тут для удобства пул называется так же, как и модуль, в котором он создается. Но можно на месте ?POOL_ID вписать любой другой атом.

воскресенье, 30 июня 2013 г., 20:15:31 UTC+4 пользователь Alexander Kaloshin написал:

Andy

unread,
Jun 30, 2013, 11:56:06 PM6/30/13
to erlang-...@googlegroups.com


воскресенье, 30 июня 2013 г., 21:19:22 UTC+3 пользователь Alexander Kaloshin написал:
Можно поподробнее пожалуйста?

Получается что лучшим вариантом является написание модуля с использованием gen_server, который будет отвечать за подключение, выборку подключений и т.п? А хранение осуществляется с помощью #state?
Именно так. Почитайте философию Erlang/OTP, чистый Эрланг (без ОТП) имеет смысл использовать только в учебных задачах. Тут уже было где-то обсуждение, что лучше сначала учить именно эту связку, а потом чистый Эрланг. 

Александр Иванов

unread,
Jul 2, 2013, 2:03:05 AM7/2/13
to erlang-...@googlegroups.com
воскресенье, 30 июня 2013 г., 20:15:31 UTC+4 пользователь Alexander Kaloshin написал:

https://github.com/mongodb/mongodb-erlang - официальный драйвер. Если не хотите использовать, посмотрите. как в нем реализован пул подключений.

Reply all
Reply to author
Forward
0 new messages