2010-11-20 4 views
0

여기 내 상황이 있습니다. 여러 사용자가 사용할 수 있도록 설계된 서버 응용 프로그램이 있으므로 같은 시간에 많은 읽기/쓰기 작업이 있습니다. 그리고 응답은 빠를 필요가 있습니다.여러 프로세스의 데이터베이스 또는 메모리 파일에 동시에 액세스 할 수 있습니까?

현재 우리는 데이터 읽기/쓰기 작업이 우리가 기대 한만큼 빠르기 때문에 모든 데이터를 캐시에 저장했습니다. 데이터 잠금이 사용자의 요청을 나열하기 위해 대기열을 사용하여 문제를 일으키는 것을 방지하기 위해 핸들러 프로세스가 하나씩 처리됩니다.

그러나 곧 문제가 발견되었습니다. 프로그램은 한 번에 하나의 요청 만 처리 할 수 ​​있습니다. 프로그램 벤치마킹 타이머조차도 프로세스에 0ms를 사용한다고보고하지만 1 초에 요청을 처리하는 데 여전히 한계가 있습니다. 이제는 초당 약 100 번 처리했습니다.

그래서 같은 시간에 8 개의 요청을 처리하는 8 개의 프로세스와 같은 몇 가지 방법을 더 찾고 있습니다. 그렇게 좋을거야. 그러나 데이터 공유에 대한 더 큰 문제가 있습니다. 나는 바퀴를 재발견하고 싶지 않습니다. 그래서 mongodb, redis 및 sqlite를 확인했습니다. 여기

내가 잘못 경우 많은에게 감사

MongoDB의 날을 수정, 숙제 그리고 그들이 언급 한 바와 같이 레디 스 정말 빨리, 그러나, 그들은 하나 개의 요청을 한 번 처리 할 수있는 동일한 메커니즘을 사용, 그것은하지 무슨이다 나는 찾고있다.

그래서 sqlite는 훨씬 더 가깝고, 여러 프로세스가 동시에 동일한 db 파일을 열어 읽을 수 있습니다. 고통은 쓰기 잠금입니다 (sqlite3의 새 잠금이 얼마나 효과적이지는 않은지).

여기 내 질문에,이 시나리오에 대한 견고하고 좋은 해결책이 있습니까? 내가 쓰기 과정을 하나씩 분리한다면 도움이 될까요? MongoDB를 가진 솔루션 샤딩 된 모든 의견

+0

모든 논리적 인 프로세스가 필연적 일 필요는 없습니다. 필연적 인 부분을 최적화하려고합니다. – davyzhang

+0

sqlite의 경우 : http://www.sqlite.org/faq.html#q5 – tauran

답변

0

에 대한

감사합니다. MongoDB sharding는 기본적으로 문제에 더 많은 프로세서를 던질 수 있습니다. 더 많은 프로세서 = 더 많은 쓰레드.

각 MongoDB 인스턴스에는 쓰기 스레드가 하나뿐입니다. Sharding은 더 많은 인스턴스를 제공하므로 더 많은 쓰기를 허용합니다.

그러나 여기에는 더 큰 문제가 있습니다. 디스크 처리량.

나는 모든 것이 RAM에 있다면 몽고가 1000 인서트/초 이상 실행되었다. 그러나 대부분의 사람들은 Mongo를 실제 파일 백업이있는 데이터베이스로 사용합니다. 따라서 Mongo를 사용하여 정말 많은 양의 쓰기 작업을 수행하려면 해당 수준의 처리량을 수용 할 수있는 디스크를 준비해야합니다.

다시 말해서 디스크 처리량 문제를 해결하는 방법은 샤딩입니다. 더 많은 파편을 만들면 쓰기/디스크가 줄어들고 기본적으로 모든 것을 잠그는 것이 줄어 듭니다.

+0

monongdb의 해결책에 대한 저를 고쳐 주셔서 감사합니다. 나는 그것을 더 깊이 파고들 것이다! 고마워요! – davyzhang