2020. 2. 13. 16:49ㆍ서버 프로그래밍
Node.js와 몽고디비 샤딩 클러스터를 연동하여 대량의 데이터를 처리하는 것에 문제가 없었던 탓에, Pymongo 역시 몽고디비 샤딩 클러스터와 연동하는데 별다른 문제가 없을 것으로 예상했으나 다른 점이 존재한다.
일단 단일 몽고 디비 서버에 pymongo로 insert_one을 6만회 이상 수행해도 문제가 없었으나, 샤딩 클러스터를 구성하고 pymongo로 동일한 insert_one을 6만회 이상 수행하려고 하면 7000회 이상 수행을 하면 갑자기 insert_one 함수 부분에서 멈추는 문제가 발생한다.
pymongo를 이용하여 몽고디비에 접속할 때 사용하는 옵션을 바꾸거나, 일부러 디비 커넥션을 매번 연결해본다던지, 세션을 이용한다는 지(샤딩 클러스터에는 세션 이용 불가, 몽고디비 4.2부터 가능하다는 것 같은데 현재 4.0을 세팅해놓아서 포기), 일부러 딜레이를 주는 등 다양하게 테스트를 해보았으나, 계속 임의의 회차에서 멈춰버리는 문제가 계속 발생했다.
Node.js에서는 문제 없이 처리했던 것을 감안하여, 동기 방식으로 처리되는 pymongo의 문제가 아닌지 의심하고 motor와 asyncio를 이용하여 비동기 방식으로 insert를 수행하니 깔끔하게 처리 완료. Python으로 몽고디비 샤딩 클러스터를 연동하여 사용하는 경우가 많을텐데, 이렇게 레퍼런스가 없는 것은 의아함.
https://motor.readthedocs.io/en/stable/tutorial-asyncio.html
아래는 밤새 삽질시에 참고했던 레퍼런스들...
https://docs.mongodb.com/manual/core/retryable-writes/
https://api.mongodb.com/python/current/faq.html
https://api.mongodb.com/python/current/api/pymongo/collection.html
https://api.mongodb.com/python/current/api/pymongo/client_session.html