Muszarafa
7.02.2008, 13:44:45
Zastanawiam sie jak ogólnie (ogólna idea) mozna zbudowac baze do pewnego serwisu. Np: chcialbym tworzyć (dopisywac) krótkie informacje na temat każdego państwa na świecie. Z kazdym dniem ktoś by coś nowego dopisywal do państw, wiec z czasem, dla kazdego panstwa bylaby bardzo duza ilosc informacji i ciągle ona bylaby powiększana. Państw jest ponad 200. Jak to ogólnie można by ugryźć ? Czy w tym wypadku trzeba byłoby zrobić ponad 200 tabel w bazie danych dla każdego państwa oddzielnie (i w kazdej tabeli poszczególne informacje jak tresc, data, user itd itp)?
Nie wiem za bardzo jak się tworzy takie bazy danych, gdzie na pierwszy rzut oka najwłasciwszym pomyslem jest stworzenie bardzo duzej ilosci tabel.
Albo np serwisy randkowe? Niemal wszyscy uzytkownicy takich serwisów wyszukują albo mają zapamiętane wzorce wyszukiwań przede wszystkim wg miasta - to jest pierwszy i podstawowy filtr.Czy wobec tego w takiej bazie randkowej tworzone są tabele do wszystkich miast w Polsce ? (ok 1000) i do nich wrzucane są osoby?
Rozjaśnijcie mi to prosze.
z góry dzieki.
specialplan
7.02.2008, 13:48:35
Tworzenie 200 tabel i pakowanie do nich coraz wiekszej ilosci informacji dotyczacych panstw to raczej mizerne rozwiazanie. Lepszym pomyslem byloby stworzeine tabeli ze spisem panstw oraz kilka innych z informacjami (nie wiem jakie to informacje, wiec ciezko okreslic strukture), powiazanych kluczami obcymi z tabela-spisem i ladnie poindexowane. Bedzie smigac.
Muszarafa
7.02.2008, 13:53:17
Przypuscmy, że jedne info składało by sie z (państwo, treść, user, data) - i to wszystko, taka prościutka wiadomość, tyle że właśnie 'państw' byłaby określona ilość, a 'treść', 'user', 'data' - ich ilość cały czas by się zwiększała. Więc mówisz ze jednak lepszym pomyslem jest wrzucenie państw do jednej tabeli?
specialplan
7.02.2008, 13:59:52
Tak, kazde panstwo ma unikalne ID na podstawie ktorego kojarzysz z nim informacje z innych tabel. Na tym polegaja relatywne bazy danych. I co z tego, ze bedzie sie powiekszala ilosc? 50 mln rekordow chyba nie wpakujesz?

Co do serwisow randkowych, to zgaduje, ze w tabeli z danymi uzytkownika jest pole "miasto" i na tej podstawie jest ten uzytkownik znajdywany w wyszukiwarce z filtrem lokalizacji:)
Muszarafa
7.02.2008, 14:57:42
no tak ale czy jest sens tworzyc tabele [panstwa] i odzielnie [wiadomosc]? skoro w [panstwa] bylaby tylko 'nazwa panstwa' i 'id' ? czy moze lepiej wrzucic to do jednej tabeli [wiadomosci] i w niej dodac kolumne 'panstwo' i wyszukiwac wiadomosci wg panstwa?
A co do serwisów randkowych -> tam są miliony użytkowników - to nie zamula troszke przy przeszukiwaniu

?
I co jesli bym w serwisie przekroczyl 50 mln rekordów?
specialplan
7.02.2008, 15:16:18
50 milionow tak sobie rzucilem. Tworzac jedna tabele wg Twojego pomyslu doprowadzisz do zbednej duplikacji danych, ktorej w tworzeniu relatywnych baz nalezy unikac. Mysle, ze zindeksowane dwie tabele dzialaly by szybciej niz jedna duza. Mozesz zrobic test i sprawdzic:) Tym bardziej, jesli przekroczysz te rzekome 50 milionow, czego nie polecam na mySQL np:P
Zakładając, że szukamy po zindeksowanym polu różnica czasu w znalezieniu rekordu z 10 milionów wpisów i 1 miliona wpisów, to 15%*(wyszukiwanie binarne jest logarytmiczne). Oczywiście tabelę dzieli się na kilka serwerów kiedy przekroczą pewną wielkość ale to kwestia ograniczonej przepustowości dysku i ilości pamięci która robi za cache.
I rozdziela się wtedy wiersze pomiędzy serwery a nie dzieli tabele na kilka tabel. Wyobrażasz sobie jak wyglądał by kod gdybyś chciał wypisać wszystkich userów serwisu randkowego, trzymanych w tabelach zgodnych z nazwą miejsca ich zamieszkania?

* zakładając, że baza nic nie trzyma w pamięci, itp. uproszczenia
specialplan
7.02.2008, 15:54:09
Wszystko zalezy od potrzeb. Dlatego napisalem, ze w przypadku krajow zrobilbym osobna tabele, natomiast w przypadku userow serwisu randkowego po prostu dodatkowe pole w tabeli. Napisalem tez, ze niezbyt rozsoadnym byloby trzymanie niewiadomo ilu milionow rekordow w jednej tabeli, ale nie rozpisywalem sie na ten temat, poniewaz te 50 milionow tak sobie rzucilem. Sie czepiacie:)
Tak na marginesie, mySQL sami zalecaja tworzenie dodatkowych tabel podsumowujacych i operowaniu na nich niz na jednej duzej tabeli, co znacznie poprawia wydajnosc. Z reszta, czynnikow jest mnostwo i nie leza one jedynie po stronie samej bazy, ale i sprzetu, kodu php itd itp
Muszarafa
7.02.2008, 17:38:30
hmm nie bardzo rozumiem, panstwo moze miec unikalne id, ale przeciez w serwsie randkowym miasto tez moze miec unikalne id i moze byc stworzone podobnie jak serwis z krajami? nie bardzo rozumiem różnicy?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.