2014-04-07 2 views
3

내 질문 - 은 동시에 MongoDB에 읽고 쓸 수있는 방법이 있습니까? 아니면 MongoDB 리더를 욕심 내게 만드시겠습니까?MongoDB에서 욕심 쓰기 잠금을 어떻게 처리합니까?

데이터베이스 용 MongoDB를 사용하는 웹 응용 프로그램이 있습니다. 내 응용 프로그램에서는 듣고있는 직렬 이벤트가 있습니다. 이 직렬 이벤트에서 이벤트를 처리 할 새 스레드를 만듭니다. 스레드에서 serial의 문자열이 구문 분석되고 객체가 생성되어 mongo 데이터베이스에 기록됩니다 (새 문서가 만들어져 특정 컬렉션에 추가됨).

그러나이 직렬 이벤트가 발생하는 동안 데이터베이스에서 읽은 다음이 컬렉션의 새로운 들어오는 데이터를 표시하기 위해 그래프를 업데이트하려고합니다. 문제는 MongoDB가 탐욕 스럽기 때문에 (http://docs.mongodb.org/manual/faq/concurrency/ 참조) 읽기가 결코 허용되지 않는 것으로 보입니다.

내 직렬 이벤트는 약 2/3 초에 일어납니다. 그리고 제 독서는 초당 약 2 번 일어나고 있습니다. 모든 클라이언트가 직렬 이벤트를 수신하는 클라이언트뿐만 아니라 클라이언트에 액세스 할 수 있도록 데이터를 데이터베이스에 기록해야합니다.

제 질문은 입니다.을 통해 읽는 방법은 있습니까? MongoDB에서 자물쇠를 읽고 탐욕스러운 사람이 될 수 있습니까? 아니면 속도를 손상시키지 않고 읽고 쓸 수있는 방법이 있습니까? 이 문제를 해결하기 위해 샤딩을하고 있습니까 (샤딩에 대해 많이 알지 못해서 문제가 해결 될지 모르겠습니다).

어떤 코드를 올리시겠습니까? 모든 의견이나 해결 방법은 크게 감사하겠습니다!

답변

0

당신은 당신의 독서가 전혀 통과하지 못한다고 말하고 있습니까? 정확히 무슨 일이 일어나고있는거야? 예, 데이터베이스 당 mongodb 쓰기 잠금은 문제를 일으킬 수 있지만 일반적으로 논의하는 것보다 훨씬 높은 트랜잭션 수준입니다.

얼마나 빨리 독자가 새로 작성한 객체를 볼 필요가 있습니까? 약간의 대기 시간을 처리 할 수 ​​있다면 복제본 세트 보조를 읽을 수 있습니다. 자체 문제 (특히 복제 지연 처리)가 없으면 읽기 전용 쿼리에 도움이됩니다.

mongostat 및 mongotop의 출력을 조사하여 데이터베이스가 잠겨있는 시간과 사용 된 모음에 대한 처리량을 얻는 것도 고려해 볼 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 필자의 시스템은 약 70 번이나 데이터베이스에 글을 쓰고 있었고, 필자의 글은 이것으로 인해 결코 끝나지 않았다고 생각했다. 그러나 그것은 실제로 내 프로그램의 또 다른 문제였습니다. 그것은 내 JSP 페이지에있었습니다. 데이터를 받았을 때, 그래프를 그리기 위해 오래 걸렸으므로 더 많은 데이터 메소드를 요청하는 속도가 느려졌습니다. MongoDB와 아무 관련이 없습니다. – Lauren