2014-12-11 5 views
1

들었던 것처럼 mongoDB는 내부 프로 시저를 저장할 수 있습니다.MongoDB : 저장 프로 시저

어떻게 사용할 수 있습니까?

공식 도움말은 매우 짧습니다.

저장된 프로 시저를 사용할 수 있습니까? 이 레이어에 작은 논리를 구현하는 방법?

Postgres pl/pgSQL과 동일합니다.

+0

SQL 데이터베이스처럼 저장 프로 시저가 아닙니다. 시도해 보지 마십시오. – Sammaye

답변

5

이중 질문 (MongoDB Stored Procedure Equivalent)은 eval() 명령을 통해 호출 할 수있는 MongoDB 내에서 프로 시저를 저장할 수 있다고 설명하지만 실제로 이것이 왜 나쁜지는 설명하지 않습니다.

Eval은 MongoDB의 C++ 코드에서 호출되는 거의 제한되지 않은 JS 환경에 대한 직접 액세스입니다. 이스케이프 처리되지 않은 매개 변수를 통한 주입은 매우 쉽다는 것을 언급하는 것이 좋습니다.

MongoDB 자체 런타임에서 작동하는 저장 프로 시저가 아닙니다 (생각하고있는 저장 프로 시저와 달리) JS 엔진은 MongoDB에서 실행되며 MongoDB는 JS에서 프로그래밍되지 않습니다. 그것은 C++로 프로그램되어 있습니다.

MongoDB의 C++ 컨텍스트가 아닌 JS 컨텍스트에서만 사용할 수 있습니다.

기본값으로 nolock 옵션이 설정된 경우에도 전역 잠금을 사용할 수 있습니다. 모두 호출하는 작업에 따라 다르며 자체 JS 자체가 원시 MongoDB 런타임과 비교하여 매우 느립니다.

예를 들면 :

가 나는 시저를 저장 할 수 있습니다. 이 레이어에 작은 논리를 구현하는 방법?

아니요. 실제로는 MongoDB와는 별도로 세 번째 계층에 구현됩니다.

MongoDB는 클라이언트 측에서이 항목을 실행하도록 설계되었으므로 "저장 프로 시저"를 사용하여 실제 이점을 얻지 못할 가능성이 90 %입니다. 실제로 많은 ACID 데이터베이스에서 심하게 학대 당하고 사용되어 실제로 응용 프로그램 속도가 느려지고 오류가 발생하기 쉽습니다. 그래서 당신은 당신이 정말로 그들에게 "필요"가 있는지 없는지에 대해 매우 신중하게 생각할 필요가 있습니다.

+0

감사합니다! 이 철저한 대답은 Sammaya에게 – Dmitry

+0

입니다. mongoDB와 MVC 패턴을 좀 더 잘 이해할 수있게 도와 주시겠습니까? – Dmitry

+0

@Dmitry 문제가있는 새로운 질문을 만드십시오. – Sammaye