Prosta baza i problem z wydajnością

0

Hej, robię aplikację wykorzystującą sqlite (w sumie bez znaczenia jaka to baza).
Struktura jest mega prosta i wygląda tak, że mam:
TAB(id autoincrement, unique url)
MAP(id1, id2)

Program generalnie ma służyć do zmapowania całej struktury strony www.

Pierwsze pytanie, czy takie przechowywanie danych ma sens, czy ktoś ma pomysł jak to zrobić inaczej(prościej?)?
Jeśli jest ok, to mam spory problem z wydajnością, bo dodając najpierw nowy adres do pierwszej tabeli, a później wyciągając kolejne id z drugiej tabeli wykonuję teraz bardzo dużo drobnych zapytań do bazy - w jaki sposób to ograniczyć?
proces teraz wygląda tak, że:
Wchodzę na www.Adres1.pl
pobieram 100 adresów typu:
Adres1.pl/a
Adres1.pl/b
umieszczam Adres1.pl w TAB
Pobieram id przed chwilą umieszczonego adresu.
Pobieram id2 adresu z którym chcę utworzyć powiązanie np (Adres1.pl - Adres1.pl/a), jeśli Adres1.pl/a nie istnieje w TAB to dodaję go i dopiero pobieram jego id
W końcu tworzę połączenie (id1, id2) w drugiej tabeli MAP, przy okazji przydałoby się jeszcze sprawdzać, czy już takie powiązanie nie istnieje

W najgorszym przypadku 1 dodanie rekordu zabiera 6 zapytań, co jest jakąś masakrą i działa bardzo wolno, bo są wykonywane bardzo drobne zapytania.

//dodaj(String MOJ_TEXT, String[] POWIAZANIA)
  insert next_int, MOJ_TEXT into TAB;
  int id1 = select id from TAB where text=MOJ_TEXT//
  while(i < POWIAZANIA.LENGTH) {
  int id2 = select id from TAB where text=POWIAZANIA[i]
jeśli nie istnieje to
  insert next_int, POWIAZANIA[i] into TAB;
i znowu
  int id2 = select id from TAB where text=POWIAZANIA[i]
}
insert into MAP id1, id2

Zastanawiałem się nad buforem i commitem dopiero po zebraniu np 100 nowych rekordów, ale to raczej odpada, bo jeśli nie umieszczę rekordu w bazie to automatycznie nie mam jego id i nie mam jak utworzyć powiązań. Najgorsze jest jednak wyciąganie id'ków już przy tworzeniu powiązań, bo powiedzmy, że na jakiejś stronie jest 100 adresów url - teraz chcę zrobić powiązania aktualny_adres-każdy_inny_adres no i wyciągam pojedynczo id wszystkich adresów po kolei (dodając je najpierw w razie potrzeby do pierwszej tabeli).

Jeśli ktoś zrozumie o czym w ogóle piszę to z góry dzięki za pomoc :)

0

Nie za bardzo rozumiem skąd pobierasz adres strony po, jak to napisałeś "wejściu na www.Adres1.pl" ?

0

Wchodzę przykładowo na onet.pl - parsuję kod strony i wyciągam z niego odnośniki. Kolejkuję je i tworzę powiązania onet.pl -> adres1.pl, onet.pl -> adres2.pl
Po dodaniu wszystkich powiązań na takim poziomie przechodzę na kolejny , czyli parsuję kod adres1.pl wyciągam adres101.pl... itd

początkowo w bazie jest jeden rekord
(1, onet.pl)
ale później dochodzi
(2, adres1.pl)
(3, adres2.pl)
itd.
a w drugiej tabeli powiązania
(1, 2)
(1, 3)
(2, 101)
...

0

Zrób tabele:
ID | ParentID | URL

wówczas dane mogą wyglądać tak:

1 | null | onet.pl
2 | 1 | onet.pl/a
3 | 1 | onet.pl/b
4 | 2 | onet.pl/a/a

Nie rób kolumny URL jako unique ponieważ ten sam adres może znajdować się na wielu podstronach i będzie dzieckiem wielu stron

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