RDBMS의 SP처럼 MongoDB에는 Java Script로 저장 함수를 만들어서 사용 할 수 있다.

각 데이터베이스의 Function에 만들고, eval() 함수로 호출해서 사용한다.


db.system.js.save(

                   { _id: "echoFunction",

                     value : function(x) { return x; }

                   }

                 )


db.eval( "echoFunction( 'test' )" )



- 2.4 버전까지는 성능 상의 문제로 추천하지 않는다.

http://docs.mongodb.org/manual/tutorial/store-javascript-function-on-server/

http://stackoverflow.com/questions/15660161/why-is-it-not-recommended-to-use-server-side-stored-functions-in-mongodb


- 이유는 eval를 사용하면 자바스크립트 코드로 동작하고, 이 SP가 호출 후 끝날 때까지 lock이 걸려서 다른 작업을 할 수 없게 된다.

- 지금은 비추하는 기능이지만 근래 MongoDB의 자바스크립트 라이브러리가 V8 엔진으로 바뀌어서 장래에는 쓸만하지 않을까 예상한다.

- 게임 서비스 도중에는 사용하기 부담스럽겠지만 서비스 이외에 관리 측면에서는 자주 사용하는 기능을 Function으로 만들어 놓고 사용하면 편리 할 것 같다.

- 당연하지만 SP에서 컬렉션 조작도 할 수 있다.


db.eval( function(name, incAmount) {

    var doc = db.myCollection.findOne( { name : name } );

    doc = doc || { name : name , num : 0 , total : 0 , avg : 0 };


    doc.num++;


    doc.total += incAmount;


    doc.avg = doc.total / doc.num;


    db.myCollection.save( doc );


    return doc;

 },


 "eliot", 5 );





Mongo Shell 에서 사용하기


같은 database에 있는 function을 호출 할 수 있다.



MongoDB의 쿼리 명령어도 사용 할 수 있다.





저작자 표시
신고
by 흥배 2016.11.14 08:00