2009-06-10 4 views
0

내 웹 앱을 사용하면 사용자가 여러 사진을 동시에 서버에 업로드 한 다음 데이터베이스에 저장할 수 있습니다. 첫 번째 사진 업로드가 끝나면 오늘 날짜를 기준으로 기본 앨범을 만들어서 추가해야합니다. 하지만 사진 1이 완성되고 앨범을 찾으면 앨범을 찾을 수 없으므로 사진 2를 완성하고 찾을 수 없으므로 둘 다 같은 앨범을 만들려고합니다. 하나가 실패하게 만들까? 이것은 아마도 매우 가능성이 희박하지만 일어날 수 있습니다. 아니면 대부분의 웹 서버는 한 번에 하나의 PHP 스크립트 만 처리합니까?데이터베이스에서 동시 업로드 처리

이 방법이 유효하고 좋은 해결책일까요? 사진 1이 앨범이 먼저 존재하는지 확인하는 대신, 앨범을 만들려고합니다. 오류 1062 (중복 항목)가 반환되면 THEN이 오류를 선택합니다. 그럼 당신이 그것에 대해 생각한다면 먼저 끝내는 건 중요하지 않아 ... 나는 잡기 오류가 큰 성능의 히트로 올지 모르겠다. 200 장의 사진을 업로드하면 199 장이 삽입 쿼리에 실패하고 select를 시도합니다. 다른 솔루션이 올바르게 작동하면 199는 성공하고 하나는 실패합니다.

생각하십니까?

+0

어떤 MySQL 버전을 사용하고 있습니까? 테이블은 어떤 엔진을 사용하고 있습니까? InnoDB? 마이 암? – raspi

+0

@raspi : vesion 5.1.30, 테이블은 MyISAM입니다. 나는 그것이 실제로 무엇을 의미하는지 결코 이해하지 못했습니다. – mpen

답변

1

존재하는 경우 모두

확인을 결합하고 않는 경우를 작성하지 왜 나던 작업을 다시

+0

나는 그것에 대해 너무 생각했다. 하나 또는 두 개의 여분의 코드 라인을 의미하지만, 그들은 결코 99 %의 시간 동안 실행되지 않을 것이라고 생각합니다. 나는 이것이 논리적이라고 생각한다 : p – mpen

1

우리는 사진과 관련이 없지만 비슷한 것을 가지고 있지만 처리하기 전에 모든 항목이 보내질 때까지 기다립니다. 이것은 먼저 스테이징 영역에 유지하는 것을 의미하지만 다른 문제는 해결합니다.

+0

Ooh ... 나는 확실히이 해결책을 좋아하지 않는다. :) 나쁘지는 않지만 사진과 함께 다른 것들을 즉시하고 싶다. +1 내 잠재적 인 해답을 주어진 잠재적 인 솔루션에 대한 – mpen

1

을 모든 일을 시작하면 하나

를 만들려고하지 않을 경우

가입 앨범이 먼저 나오고 내용이있는 경우에만 표시됩니까?

그래서 스크립트 로직과 같이 보일 것이다 : 그들은 앨범을 만들고 그것을 사용하지 않을 경우, 그 방법

create album<date> 
while more images 
    upload next image 
    add to album<date> 
voila 

를, 그것은 표시되지 않습니다. 하루 또는 그 후에도 빈 앨범을 정리하기 위해 유지 관리 스크립트를 쓸 수 있습니다.

1

이것은 트랜잭션 처리 및 동기화에 관한 모든 것입니다. 귀하의 언어 (PHP)가 트랜잭션 처리 및 동기화를 제공하지 않으면 데이터베이스 자체를 사용하여이를 처리 할 수 ​​있습니다.

나는 이미 앨범을 만들려는 시도가 성공하는지 확인해야한다고 생각합니다. 실패하면 다른 프로세스/요청이 이미 생성했는지 확인한 다음이를 사용할 수 있습니다.

관련 문제