2013-12-17 1 views
0

저는 소비자가 대기열에서 항목을 가져 와서 MySQL 데이터베이스에 저장하는 첫 번째 단일 제작자/단일 소비자 응용 프로그램을 제작하고 있습니다. 이 단일 스레드 응용 프로그램 때생산자 소비자 설정 : 데이터베이스 연결을 처리하는 방법?

이전에, 나는 정보를 제공해드립니다의 DB에 연결을 열고 연결을 종료하고, 새로운 정보가 들어왔다 때마다 반복한다. 생산자 - 소비자 설치를

을 , DB 연결을 처리하는 더 좋은 방법은 무엇입니까? 소비자 루프를 시작하기 전에 한 번 열어야합니까 (이 문제는 볼 수 없지만 좋은 사람이라면 누구나 지적 할 것입니다). 아니면 루프를 반복 할 때마다 DB 연결을 열고 닫아야합니까 (시간과 리소스 낭비처럼 보입니다)?

이 소프트웨어는 약 30 개의 작은 리눅스 컴퓨터에서 실행되며 모두 동일한 데이터베이스와 통신합니다. 나는 30 개의 동시 연결이 문제가되는 것을 보지 못하지만, 나는 당신의 생각을 듣고 싶습니다.

죄송합니다. 적용 되었다면 어디서나 찾을 수 없었습니다. 있다면 링크가 환상적 일 것입니다. 감사!

명확한 표현 여기서는 소비자 스레드의 속도에 중점을 둡니다. 단일 스레드 버전에서 다중 스레드로 전환하는 모든 이유는 단일 스레드 버전이 들어오는 정보를 누락했기 때문입니다. 데이터베이스에 연결하는 중 바쁜 작업 이었기 때문입니다. 생산자 쓰레드가 정보를 버퍼로 덤프하는 것을 상당히 빠른 속도로 시작할 것으로 예상되고, 버퍼의 크기가 제한되어 있다면, 소비자는 안정적인 상태를 유지하면서 가능한 빨리 버퍼를 통과하는 것이 매우 중요합니다.

+0

초당 500 회를 초과하지 않는 한 걱정하지 마십시오. 또한 memcached와 같은 캐싱 메커니즘을 사용하여 읽기 전용 쿼리에 대한 연결을 피할 수 있습니다. –

+0

잘 모르겠습니다. @SamD. 어떤 경로를 제안하고 있습니까? 또한 모든 쿼리는 INSERT가됩니다. –

+0

DB에 대한 연결을 열고 쿼리를 보내고 연결을 닫습니다 –

답변

0

여러분의 MySQL은 수천 개가 아닌 수백 개가 넘는 연결을 처리 할 때 문제가 없어야합니다.

각 소비자에 대해 소비자가 사용하는 연결 풀을 설정해야합니다. 단일 스레드 (응용 프로그램 당)에서 메시지를 소비하는 경우 풀은 하나의 연결 만 사용하면되지만 모두 하나의 연결을 사용하는 병렬 스레드를 사용하고 시작하는 것이 좋습니다.

연결 풀을 사용하는 이유는 다시 연결을 처리하고 계속 유지하기 때문입니다. 단 하나의 연결을 요청하고 작동 할 것이라고 약속해야합니다 (데이터베이스에 대해 작은 쿼리를 실행하여 수행). 잠시 동안 연결을 사용하지 않으면 풀이 종료되어 풀이 새로 만들어집니다.

+0

감사합니다. Andreas, 나는 수영장을 사용하는 방법을 살펴볼 것입니다. 그들에 관해 배우기 시작할 수있는 좋은 곳이 있습니까? –

+0

mysql 문서 사이트 http://dev.mysql.com/doc/refman/5.6/en/connector-j-usagenotes-spring-config-connpooling.html에서이 기사를 읽어야한다. –