2017-09-20 17 views
0

우리가 파일을 가지고 있고, 그것을 처리하고 데이터를 보내는 몇 가지 작업 상상해 이 파일을 한 번만 또는 적어도 뭔가 잘못되었다고 판단하고 사용자에게이 문제를 수동으로 해결하도록 알리십시오.방지 중복

+0

파일을 누가 보관합니까? 나는 누군가를 의미합니까? 아니면 다른 프로세스 도스? –

+0

@UsmanRana, 예, 다른 프로세스입니다 – nanotexnik

+0

작성하는 데이터 행에 고유 한 식별자가 있습니까? 파일은 어때? 이전에 부분적으로 완료된 파일 재 처리에 대해 걱정할 필요가 있습니까? –

답변

1

예, 가능합니다.

당신이 할 수있는 일은 데이터베이스에 이름과 플래그/상태 (읽으면 yes yes no)를 저장하는 테이블을 데이터베이스에 생성하는 것입니다. 프로세스가 해당 위치의 파일을 공급할 때 동일한 프로세스가 이름 (매번 이름이 다를 경우)과 데이터베이스의 해당 파일에 대한 플래그/상태를 업데이트하는지 확인하십시오. 파일 읽기 프로세스는 데이터베이스에서 파일 이름을 가져 와서 개미가 어디에 있든 파일을 덤프 할 수 있으며 완료되면 플래그를 read 또는 그 이상으로 업데이트해야합니다. 이렇게하면 파일을 한 번 이상 읽지 않아도됩니다.

0

데이터베이스에 두 개의 테이블 정보를 저장합니다.

  1. 이미 처리 한 것처럼 처리 된 파일 행입니다.
  2. 파일 자체의 레코드입니다. 포함 :
    • 파일 이름
    • 처리가 성공적으로 부분적으로 파일을 나중에
의 고유성을 확인하는 데 사용할 수 있습니다
  • SHA1 해시 검사를 성공, 실패 여부

    파일을 처리하려면 먼저 체크섬이 있는지 여부를 확인하십시오. 이 경우 처리를 중지하고 문제를 기록 할 수 있습니다. 또는 파일 테이블에 해당 정보를 전달할 수 있습니다.

    또한 처리 된 줄과 파일간에 외래 키 연결이 있는지 확인하십시오. 그렇게하면 어떤 일이 잘못되면 수동 개입을하는 사람이 영향을받은 행을 추적 할 수 있습니다.

  • 0

    Usmana 또는 Tracy 대답은 실제로 파일이 두 번 이상 처리되지 않고 작업이 데이터베이스 및 외부 서비스 (질문에서 # 1 및 # 2)에 중복 요청을 보내지 않음을 보장하지 않습니다. 두 가지 솔루션 모두 처리가 완료된 후에 로그를 유지하고 업데이트하도록 제안하지만 맨 마지막에 로그를 업데이트하려고 할 때 오류가 발생하면 작업이 다음에 실행될 때 다시 처리하려고 시도하고 중복 요청을 데이터베이스 및 외부 서비스 Usmana와 Tracy가 제안한 솔루션을 사용하여 트랜잭션을 처리하는 유일한 방법은 트랜잭션에서 모든 것을 실행하는 것 뿐이지 만 사용자와 같은 배포 환경에서는 상당히 어려운 작업입니다.

    문제의 일반적인 해결책은 데이터베이스 및 외부 서비스에 대한 중복 요청을 정상적으로 처리하는 것입니다. 실제 구현은 다를 수 있지만 예를 들어 데이터베이스에 고유 한 제약 조건을 추가 할 수 있으며 작업에서 중복 레코드를 삽입하려고하면 예외가 발생하여 작업에서 무시할 수 있습니다. 이는 필요한 데이터가 이미 db.

    내 대답은 Usmana와 Tracy가 제안한 로그 테이블이 필요 없다는 것을 의미하지 않습니다.처리 상태를 추적하는 데 필요하지만 분산 트랜잭션을 사용하지 않는 한 데이터베이스 및 외부 서비스에 중복 요청이 발생하지는 않을 것입니다.

    희망이 있습니다.