Klasa iterująca po rekordach w bazie danych

0

No więc potrzebuję rady przy tworzeniu DAO operujących na bazie danych. Załóżmy, że mam dwie klasy:

  1. Row
  2. Rows_List implements \Iterator
    Statyczna metoda Row::find($id) wywołana z parametrem int szuka w bazie danych (SELECT *) wiersza z podanym ID, jeśli nic nie znaleziono zwraca null, inaczej zwraca zainicjowany obiekt klasy \Row\.

Klasa Rows_List przechowuje obiekty klasy Row. Nie bardzo wiem, jak ją zaimplementować.

  1. Niektóre klasy pobierają "z góry" wszystkie ID, po których będą iterować, następnie po prostu zwracają Row::find(obecny ID). Co jednak, jeśli w bazie danych jest milion albo i więcej wierszy, który spełniają początkowy warunek? Pobieranie i przechowywanie ich wszystkich chyba zaprzecza sensowi stosowania iteratora...
  2. Moim pomysłem jest z każdą iteracją pobieranie nowego ID z offsetem zwiększonym o 1. Tutaj też mam jednak pytania. Czy to nie będzie "zarzynanie" bazy danych? Tym bardziej, że najpierw obiekt klasy Rows_List zapyta o ID obiektu, następnie Row zapyta o parametry do inicjalizacji.
  3. Kolejną metodą może być pobieranie listy ID przez obiekt Rows_List w porcjach po, powiedzmy, 100. Może to być bardziej skomplikowane ale być może lepsze?

Proszę o opinie ;)

0

Oczywiście po wysłaniu posta pojawiają się "złote myśli".
Oczywiście OFFSET nie jest odpowiedni do przesuwania się po tabeli, przy jednoczesnym usuwaniu rekordów mogą występować "skoki". Czyli zamiast stosować offset trzeba użyć WHERE id > jakis_offset (ogólnie - primary index).
Przy przechowywaniu ID w porcjach, usunięcie rekordu poprzez obiekt Row nie usuwa jego ID z listy w obiekcie Rows_List. Nie widzę problemu ale lepiej to zaznaczyć.

0

błądzisz chłopcze

1 użytkowników online, w tym zalogowanych: 0, gości: 1