데이터베이스 (MySQL)를 사용하는 생산자/소비자 시스템은 이것이 가능합니까?

StackOverflow https://stackoverflow.com/questions/2449172

문제

사용해야합니다 무엇 운영 체제가 다른 여러 기계에서 실행되는 여러 소비자/생산자와 내 시스템을 조정합니다. 나는 이것을하기 위해 MySQL을 사용하는 것에 대해 연구하고 있지만, 엄청나게 어려운 것 같습니다.

내 요구 사항은 간단합니다. 언제든지 소비자/생산자를 추가하거나 제거 할 수 있기 때문에 서로 의존해서는 안됩니다. 당연히 데이터베이스는 두 가지를 멋지게 분리합니다.

MySQL 용 Q4M 메시지 대기 플러그인을보고 있지만 사용하기가 복잡해 보입니다.

내 시스템을 최상의 시스템을 구성하는 방법에 대한 정보가 정말 필요합니다.

도움이 되었습니까?

해결책

다른 운영 체제를 가진 다른 기계에서 실행하는 여러 소비자/생산자와 내 시스템을 조정하기 위해 무언가를 사용해야합니다.

그것은 메시지 대기열입니다. 다른 대안을 추구하지 마십시오. 다른 모든 것 (예 : 삽입 및 삭제가있는 데이터베이스 사용)은 끔찍하고 느리고 번거 롭습니다.

데이터베이스를 사용하여 크고 느린 메시지 대기열을 구축하는 경우 (1) 데이터베이스가 느리기 때문에 실제로는 나쁘게 나타납니다. (2) 데이터베이스는 거대하고 복잡합니다. (3) 각 거래를 잠재적으로 느리게 만드는 잠금 및 경합 문제가 있습니다. 4) 문제가 가치있는 것보다 훨씬 더 많은 오버 헤드입니다.

수많은 메시지 대기열 솔루션이 있습니다.

Q4M을 만들 수 없다면 다른 것으로 넘어 가야합니다.

http://en.wikipedia.org/wiki/message_queue

http://linux.die.net/man/7/mq_overview

http://qpid.apache.org/

http://code.google.com/p/httpsqs/

다른 팁

실제로 그러한 시스템을 구축하는 것은 (공정하게) 복잡합니다. (물론 가능하기 때문에 공정하게 말합니다).

여러 생산자가있는 경우 하나 소비자, 쉽습니다. 모든 생산자는 동시에 쓰고 단일 소비자는 표시되는 즉시 데이터를 읽습니다 (커밋).

그러나 확장 성을 원한다면 몇몇의 소비자, 당신은 사소하지 않은 잠금 체계를 만들어야합니다. (두 명의 소비자에게 행을 파견하지 않아야합니다. 데이터베이스 트랜잭션 및 잠금으로 달성하기가 쉽지 않습니다. 순진한 솔루션은 우리가 원하지 않는 한 명의 소비자 만있는 것처럼 모든 메시지 전달의 직렬화로 이어집니다. ).

내장 솔루션을 사용하는 것이 좋습니다. 당신은 또한 읽을 수 있습니다 이 질문 비슷한 질문에 대해.

타사 소프트웨어 없이는 그것이 가능하다고 생각합니다.

내 첫 디자인은 다음과 같습니다.

  • 생산자는 데이터를 데이터베이스에 씁니다
  • 일관성을 보장하려면 거래를 사용해야합니다
  • 소비자는 트랜잭션을 사용하여 데이터 (읽기 및 삭제)를 처리합니다.

트랜잭션 요구 사항으로 인해 InnoDB는 스토리지 엔진의 논리적 선택입니다. 또한 격리 수준을 신중하게 선택해야합니다. 첫 번째 추측은 팬텀 읽기를 피하기 위해 "직렬화 가능"이지만 약한 수준도 가능합니다.

성능과 확장 성이 문제 인 경우 "실제"메시징 솔루션을 사용하는 것을 고려해야합니다. 하나를 출시하면 성능 및/또는 확장 성 문제가 발생할 수 있습니다.

상황에 따라 다릅니다.

제 경우에는 한 명의 생산자가 하루에 수천 개의 메시지를 만들고 몇몇 소비자는 다음 24 시간 내에 이러한 메시지를 소비하며, 각 소비자는 여러 마이네이트가 마무리됩니다. 따라서 MySQL이 내 요구 사항을 충족 할 것이라고 생각하며 거래를 사용하여 소비자 간의 일관성을 보장 할 수 있습니다.

도움이되기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top