2012-09-26 2 views
0

나는 단순함 때문에 토네이도를 사용하고 있고 Pymongo와 함께 사용하고 있기 때문에 많은 클라이언트에게 서비스를 제공하기 위해 항상 비동기 호출을 듣기 때문에 실제로는 데이터베이스에 대한 비동기 호출이 무엇인지 묻고 있었다. 이 코드 예 :데이터베이스 호출을 사용할 때 이것이 나쁜 습관입니까?

예를 들어, 사용자가 검색 할 영역이 4 개있는 페이지를 가정하면 결과는 4 개의 결과가됩니다. 그는 모든 4 개 요청이 완료 될 때까지 유지해야하며, 그 첫 번째 결과를 제공 할 다음 데이터베이스 호출이 차단 된 경우에도 대기하고을하기 때문에

A = calls the database to search for an element a. 
B = calls the database to search for an element b. 
C = calls the database to search for an element c. 
D = calls the database to search for an element d. 
then render a pages where a user will see the results (a,b,c,d) 

때문에, 이것은 서버의 살인자가 될 것입니다 그가 고객에게 제공되는 모든 결과를 결합하는 양동이? 또는 4 가지 작업의 분할은 비동기 데이터베이스 라이브러리 (예 : Motor 또는 Asyncmongo)로 수행해야합니까?

답변

1

PyMongo를 호출 할 때마다 Tornado의 IOLoop이 차단되어 PyMongo 메서드가 완료 될 때까지 클라이언트 HTTP 요청이 더 이상 처리되지 않습니다.

http://api.mongodb.org/python/current/faq.html#does-pymongo-support-asynchronous-frameworks-like-gevent-tornado-or-twisted

+0

그래서 찾는에서 시간 "A"까지 1, 템플릿을 차단하고,이 발견되면 다음 B, 능숙 해방되지는 않습니다 렌더링 후 다 ... 그리고 그룹화 양동이 및 렌더링? –

+1

예. 따라서 모든 Mongo 쿼리가 매우 빠르다는 것을 확인하십시오. –

+0

그래서 나는 내가 모터에 충실 할 거라 생각한다. 나는 그것을 이해할 수 있었으면 좋겠다. ( –

관련 문제