2012-04-13 11 views
6

Chciałbym wykonać kwerendę wybierającą, która zwraca wiele danych w bazie danych. Wspomniana baza danych zmusza mnie do podzielenia się zapytaniami w częściach 10000 wyników z offsetem + limitem. Podczas I iteracji tych fragmentów, ktoś inny aktualizuje bazę danych, która może w niektórych przypadkach sprawić, aby db zwracał ten sam wiersz wiele razy. Zajmuję się tym przez filtr przetwarzania końcowego, który usuwa wiersze z duplikatami ids, ale zastanawiam się, czy istnieje sposób na zbudowanie zestawu kwerend sql, który pozwala mi uzyskać spójny widok bazy danych w wielu instrukcjach wyboru. tj. BEGIN + COMMIT, ale dla wybierz.Koherentny widok tylko do odczytu bazy danych

Czy wspomniałem, że nie jestem osobą sql?

+1

Proszę podać, z której bazy danych korzystasz, oraz kod na twojej stronie odbiorczej (w jakimkolwiek języku). Podejrzewam, że większość DB jest w stanie dostarczyć więcej wyników, gdy są wywoływane w trybie strumieniowym, ale nie można tego powiedzieć na pewno bez informacji. –

+0

W rzeczywistości muszę przyznać, że problem ten wystąpił podczas rozmowy z wirtuozowskim serwerem sparql. Wszystkie bazy danych SQL, z których korzystałem, dobrze sobie z tym poradzą, przesyłając mi dane, dopóki nie otrzymam wszystkich. – mathieu

+0

Cóż, jako że jest to projekt komercyjny, czy próbowałeś zadać telefon? Mam na myśli, że powinien dostarczyć ci rozwiązanie w pewien sposób (czy to w formie transakcji czy transmisji strumieniowej), a programiści będą wiedzieć najlepiej. –

Odpowiedz

1

Możesz nie:

zamówić je przez ID, zdobyć pierwszy 10000, ostatni id.

Drugi raz wokół filtra o większej Ten ostatni id, coraz następny 10000.

Zrób to samo, aż skończysz

Select top(10000) * from Table order by id 

uzyskać ostatni id

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

LAST oczywiście podstawiony numerem

Bardzo niski poziom, ale powinien rozwiązać problem d wyeliminuj duplikaty

+0

co się stanie, jeśli wiersz zostanie usunięty, gdy szukam w bazie danych, a jego identyfikator wiersza jest ponownie wykorzystywany? – mathieu

+0

nie dostaniesz "nowej" wersji przed następnym uruchomieniem. row ids musi być unikatowy, ale może nie w twoim przypadku .... czy jest tam znacznik czasu, którego możesz użyć do sortowania? W ten sposób zdobywanie nowych trwa. Będziesz musiał znowu poradzić sobie z tym samym problemem ID ... – Steen

+0

@mathieu, funkcja ta powinna działać, jeśli identyfikator jest unikatowy. Jeśli tak nie jest (można je ponownie wykorzystać), należy wygenerować niepowtarzalny identyfikator i użyć tego. –

Powiązane problemy