2012-07-24 2 views
4

저는 직원들이 업계 통계가 필요한 제품 목록을 업로드 할 수있는 인터페이스를 구성하고 있습니다 (현재는 한 번에 하나씩 수동으로 수행) .
각 제품은 webservice API를 통해 Google의 통계 엔진에 게재됩니다.
답장을 보내 드리겠습니다. Stat's 엔진은 내 api에서 "다음 피해자"를 요청할 것입니다.PHP 코딩 이론 : 여러 대기열에 대한 트래픽을 직접 처리해야 함 (멀티플렉싱)

사용자가 업로드하는 각 목록에는 50 개에서 1000 개 사이의 제품이 있으며 자체 큐가됩니다.
현재 대기열/목록은 하루에 10-20 회 afactx (추가 완료시 & 제거)로 추가 될 것입니다.
성공하면 트래픽이 몇 달 후에 하루에 700-900 목록으로 올라갈 것입니다.

단순한 라운드 로빈 방식을 사용하여 트래픽을 대기열에 고르게 분산시킬 계획입니다.
멀티플렉서/큐를 나열 염두에두고 ... 다시 목록 주위를 다시 반복 될 때까지 등등 상단 목록 오프 항목, 다음 목록 B 다음 목록 C 및 잡아 것 언제든지 추가/제거 할 수 있습니다.

제가 직면 한 문제는이 문제의 관리를 개념화 한 것입니다.
각 큐를 플랫 파일로 저장하고 관계형 DB (MySQL)를 통해 로테이션을 관리하는 방법에 대해 생각했습니다. 반대로하는 것에 대한 생각. 완전히 평평한 파일이나 완전히 관계형 인 DB에 대한 생각 ... 최종선, 유연 해.
아무렇지도 않게 회전하는 참가자의 가변적 인 목록을 무조건적으로 녹이기 위해 노력할 때 뇌는 단지 증기로 잠겨 있습니다. (나는 방금 휴가를 마치고 돌아왔다. 아직 내 뇌가 집에 없다고 생각한다.)

누구나 이런 식으로 일 했습니까?
어떻게 처리 했습니까?
다시해야 할 경우 개선 할 점은 무엇입니까?

& 모든 팁/제안/조언을 환영합니다.

참고 : Google의 통계 엔진/도구의 각 요청은 수분으로 분리되므로 몇 분이 아니라도이 상태를 유지해야합니다.

+0

** 특정 대기열/목록의 마지막 항목이 통계 엔진에 발행되면 Google 알리미가 트리거되어 사용자가 결과를 볼 수 있음을 알립니다 (상태 확인 필요 없음). .. 예!!). ** 2) ** Stat의 엔진은 단일 제품을 가져 와서 stat을 실행하고 캐시 풀에로드합니다. – mOrloff

답변

0

좋은 밤 잠이 들었을 때, 나는 이제 나에 대한 나의 재치가있다.
간단한 솔루션은 우선 순위를위한 플랫 파일입니다.
각 행에 하나의 목록/대기열 ID가있는 텍스트 파일 만 있습니다.
피드 목록의 한쪽 끝에서 다른 하나는 에서 ... 간단합니다.

비판 환영 상기 피드백 O)

감사 @Trylobot 및 @Chris_Henry.

1

목록 데이터는 데이터베이스에 저장되어야합니다. PHP 측에서 시스템의 상태를 알려주는 뷰와 목록을 추가 할 폼이 있어야합니다.

각 요청은 고유 한 큐가되고 모든 요청 큐는 동일한 우선 순위로 간주되므로 테이블의 이상적인 수는 아마도 3입니다. 요청 목록은이고 우선 순위는 다른 순서 (라운드 로빈에서 누가 처리 할 것인지를 결정하기 위해)와 처리 상태를 나열하고 또 다른 하나는 아직 처리되지 않은 각 요청의 내용 (목록 항목) (목록 항목) 및 각 큐에서 처리 된 항목 을 나열하는 세 번째 테이블.

또한 실제 처리를 수행하는 스크립트가 필요합니다.이 스크립트는 사용자 요청에 의해 구동되는 것이 아니라 주기적으로 실행되는 시스템 예약 작업 (사용자가 원하는대로 조절)으로 실행됩니다. 이것은 물론 PHP에서도 가능합니다. 여기서 10 개 목록 확인 및 업데이트를 설정합니다.

  1. 가장 높은 우선 순위 큐에서 최대 10 개 항목의 다음 세트를 선택

    처리는 같은 것이 될 것이다.

  2. 처리하여 DB 상태가 완료 될 때 업데이트합니다.
  3. 위 큐의 우선 순위를 업데이트하여 가장 낮은 우선 순위가되도록합니다.

새 큐가 추가되면 가장 낮은 우선 순위로 추가됩니다.

우선 순위는 정수로 표시 될 수 있습니다.

사용자는 목록이 처리 될 때까지 기다렸다가 결과를 보거나 다운로드해야합니다. 보기 페이지에서 자동 새로 고침 스크립트를 설정할 수 있습니다.

+0

Thx a 무리. 많은 구성 요소 R이 이미 완료되었습니다. 내가 직면하고있는 장애물은 단순히 다음 항목의 우선 순위입니다 (불행히도 한 번에 2 B 1을가집니다). 나는 당신의 제안 (내 경계에 적용되는대로)을 이해함에 따라 우선적으로 우선 순위를 정한다. 나는 그것을 좋아한다. 멋지고 간단하다. 저의 주요 관심사는 해당 테이블의 ** ALL ** 레코드에 대한 우선 순위 값을 업데이트하는 것입니다 ** ** 각 레코드가 처리되는 시간 **. 매번 900 건의 레코드와 같은 것을해야한다면, 자원에 대한 불필요한 부담이되지 않을까요 ?? – mOrloff

+0

이 우선 순위 Tbl 접근법을 사용하여 명확히하기 위해 대기열/목록의 우선 순위를 지정합니다. 다음에 어떤 멀티플렉서가 다음 목록에 도달하면 해당 목록/큐에서 다음 항목을 검색합니다. – mOrloff

+0

MIN() 우선 순위를 선택한 다음 MIN() - 1을 사용하여 가장 우선 순위가 높은 행을 업데이트하는 것이 똑같이 잘 될 것이라고 생각합니다. –

0

Gearman이 이미 잘 수행하고있는 것처럼 들리는 것 같습니다. 업로드/요청마다 Gearman 서버에 작업을 보내면 대기 할 수 있습니다.

Gearman은 영속성을 유지하도록 구성 될 수 있으며 (관계형 데이터베이스) 요청을 로깅 할 필요가 없어집니다.

그런 다음 원하는만큼 많은 직원을 시작할 수 있습니다. 모든 작업을 순차적으로 실행하는 것이 좋습니다. 계속 수행 할 수는 있지만 작업을 병렬 처리하여 모든 작업이 직렬로 처리 된 경우 사용자가 주변에 앉아있는 것처럼 오래 앉아있을 수는 없습니다. 유행.

+0

Gearman .. 고마워 ... 고마워. – mOrloff