2012-04-13 3 views
6

데이터베이스에서 많은 양의 데이터를 반환하는 select 쿼리를 수행하고자합니다. 이 데이터베이스는 offset + limit을 사용하여 10000 개의 결과 묶음으로 쿼리를 분할하도록합니다. 이 덩어리를 반복하는 동안 다른 사용자가 데이터베이스를 업데이트하여 경우에 따라 db가 동일한 행을 여러 번 반환하도록 할 수 있습니다. 중복 ID 가진 행을 제거하는 후 처리 필터를 처리하지만 여러 SELECT 문을 통해 데이터베이스의 일관된보기를 얻을 수있는 SQL 쿼리 집합을 빌드하는 방법이 있는지 궁금해. 즉, BEGIN + COMMIT를 선택하지만 선택합니다.데이터베이스의 일관된 읽기 전용보기

나는 SQL 개인이 아니라고 언급 했습니까?

+1

사용중인 데이터베이스와 수신자의 코드 (어떤 언어인지)를 알려주십시오. 나는 대부분의 DB가 스트리밍 모드에서 호출 될 때 더 많은 결과를 제공 할 수 있다고 의심하지만 정보가 없다면 그 정보를 확실히 말할 수는 없다. –

+0

사실, sparql virtuoso 서버와 대화하는 동안이 문제가 발생했다고 고백해야합니다. 모든 SQL 데이터베이스를 사용하기 전까지는 데이터를 스트리밍하여 멋지게 처리했습니다. – mathieu

+0

글쎄요, 이것이 상업용 프로젝트이기 때문에 핫라인에 물어 보았습니까? 내 말은, 그것은 (트랜잭션 또는 스트리밍 형태의) 방법으로 솔루션을 제공해야하며 개발자가 가장 잘 알 것입니다. –

답변

1

다음과 같이 할 수 없습니까?

ID로 주문하고 첫 번째 10000을 받으면 마지막 ID를 가져옵니다.

큰 마지막 ID에 필터 주위

두 번째 시간, 다음 10000

이 완료

Select top(10000) * from Table order by id 

수있는 마지막 ID

Select top(10000) * from Table where id> LAST order by id 

마지막 과정까지 동일한 작업을 수행 점점 숫자로 대체

매우 낮은 수준이지만 문제를 해결해야합니다. d 중복 제거

+0

데이터베이스를보고 행 ID가 다시 사용되는 동안 행이 제거되면 어떻게됩니까? – mathieu

+0

다음 번에 실행하기 전에 "새로운"버전을 얻지 못할 것입니다. 행 ID는 고유해야하지만, 아마도 귀하의 경우에는 .... 정렬에 사용할 수있는 타임 스탬프가 있습니까? 따라서 새로운 것을 얻는 것. 그래도 다시 동일한 ID 문제에 대처해야 할 것입니다 ... – Steen

+0

@mathieu ID가 고유 한 경우 함수가 작동해야합니다. 그것이 (재사용 할 수 없다면) 고유 한 ID를 생성하여 사용해야합니다. –

관련 문제