2011-07-27 2 views
1

공식 mongodb erlang 드라이버를 사용하고 있습니다. 나는 의사를 읽었고 아직도 이해할 수없는 어떤 것이있다. 다음과 같이db 액션을 만들기 위해 erlang mongodb 드라이버를 사용하는 올바른 방법은 무엇입니까?

내가 작업을 할 때마다, 난 그냥 뭔가를 쓰기 :

{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. 이 올바른 방법인가 누군가가 그것을 사용하는 올바른 방법이 무엇을 말해 줄 수 있기를 바랍니다? DB 작업을 마칠 때마다 Conn이 사망 한 것처럼 보입니다. 또는 다음 번에 다시 사용하려면 연결을 끊지 말고 Conn을 유지해야합니까? Conn을 유지하는 전역 변수가 없기 때문에 내가 생각할 수있는 유일한 방법은 gen_server 같은 것을 사용하고 Conn을 재사용을 위해 유지하는 것입니다. 이것이 올바른 방법일까요?

  2. 또한 connect_factory 메서드가 있습니다. 그러나 나는 그것을 다루는 적절한 방법을 이해할 수 없다. connect_factory은 많은 양의 DB 작업을 처리하기 위해 연결하는 것보다 나은 방법입니까? 그리고 을 사용하여 실행할 수있는 방법을 얻으려면 Conn?

  3. 이것은 mongodb와 관련이없는 질문입니다. 모든 사용자에게 방문 할 때 고유 번호를 부여하려고합니다. 그래서 DB에 카운터를 저장했습니다. 사용자가 방문하면 카운터에 1이 더해져 고유 번호로 사용자에게 반환됩니다. 그러나 나는 항상 두 명의 사용자가 동시에 db를 읽음으로써 동일한 숫자를 얻는다는 우려를 가지고 있습니다. mongodb를 사용하여 고유 한 카운터를 1 씩 증가 시키려면 어떻게합니까?

대단히 감사합니다.

답변

5
  1. 작업에 오류가있는 경우 Conn이 죽을 수 있습니다. 그렇지 않으면 다시 사용할 수 있어야합니다. 참고 : mongo : do는 오류가 발생하면 {failure, X}를 반환합니다. 다시 사용하려면 Conn을 분리하지 마십시오. BTW, 연결 끊기 인수로 Conn 소요됩니다. Conn을 전역 변수로 유지하려면 얼랭 (Erlang) 문서에서이를 수행하는 방법을 참조하십시오 (예 : ets table, gen_server 등). 또한이 드라이버의 mvar 모듈에서 값을 보유하고있는 간단한 gen_server를 확인하십시오.
  2. connect_factory는 재사용 가능한 연결 풀을 유지 관리하는 데 사용됩니다. 튜토리얼 http://github.com/TonyGen/mongodb-erlang을 읽어보십시오. 하단에는 resource_pool과 함께 connect_factory를 사용하는 방법이 나와 있습니다.
  3. MongoDB를 사용하여 원자 적으로 증가시킬 수 있습니다. http://www.mongodb.org/display/DOCS/Atomic+Operations, 특히 findAndModify를 참조하십시오.
관련 문제