Как правильно использовать драйвер erlang mongodb для выполнения действий с БД? - PullRequest
1 голос
/ 27 июля 2011

Я пробую официальный драйвер mongodb erlang.Я читаю документ, и я все еще не могу понять.Надеюсь, кто-нибудь может сказать мне, как правильно его использовать:

Каждый раз, когда я совершаю действие, я просто пишу что-то следующее:

{ok, Conn} = mongo:connect ({localhost, 27017}).
mongo:do (safe, master, Conn, test, fun() ->
    mongo:save (foo, {'_id', 1, bbb,22, y,2}),
    mongo:save (foo, {'_id', 4, bbb,22, y,2}) end).
mongo:disconnect().
  1. Этоправильный путь?Каждый раз, когда я заканчивал действие БД, Conn кажется умершим.Или я должен оставить Conn вместо того, чтобы отключить его, чтобы использовать его в следующий раз?Нет глобальной переменной для хранения Conn, поэтому я могу придумать единственный способ сделать это - использовать что-то вроде gen_server и сохранить Conn в своем состоянии для повторного использования.Это правильный путь?

  2. Я также вижу, что есть connect_factory метод.Но я не могу понять, как правильно с этим справляться.connect_factory лучший способ, чем подключиться, чтобы справиться с большим количеством действий с БД?И как получить работоспособный Conn с помощью connect_factory?

  3. Этот вопрос не совсем связан с mongodb.Я хочу дать каждому пользователю уникальный номер при посещении.Поэтому я сохранил счетчик в дБ, когда при посещении пользователя счетчик добавляется на 1 и возвращается пользователю как уникальный номер.Но я всегда беспокоюсь о том, что два пользователя получают одно и то же число при чтении БД одновременно.Как я могу сделать уникальный счетчик увеличенным на 1, используя mongodb?

Большое спасибо!

1 Ответ

5 голосов
/ 27 июля 2011
  1. Конн может умереть, если в вашем действии произошла ошибка, в противном случае его следует использовать повторно.Обратите внимание, Монго: do возвращает {fail, X} в случае ошибки.Не отключайте Conn, если хотите использовать его повторно.Кстати, отключение принимает Conn в качестве аргумента.Если вы хотите сохранить Conn в глобальной переменной, обратитесь к документации Erlang, чтобы узнать, как это сделать (например, ets table, gen_server и т. Д.).Кроме того, проверьте модуль mvar в этом драйвере для простого gen_server, который содержит значение.
  2. connect_factory используется для поддержки пула соединений многократного использования.Прочтите учебное пособие по http://github.com/TonyGen/mongodb-erlang. Внизу показано, как использовать connect_factory с resource_pool.
  3. Вы можете атомарно увеличиваться с помощью MongoDB.См. http://www.mongodb.org/display/DOCS/Atomic+Operations,, в частности findAndModify.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...