Posio
25.04.2013, 19:21:33
Siemka, mam plik CSV, chce go wrzucić do bazy danych. Są to rekordy, do których w przyszłości będzie dopasowywane to co użytkownik wpisał w input. Mam około 100 000 000 rekordów (stringów) co waży ponad 1GB.
System będzie działał na zasadzie użytkownik wpisuje -> system znajduje podobny. Teraz moje pytanie jak rozlokować te rekordy tak, aby wyszukiwanie trwało jak najkrócej . Myślałem o posortowaniu alfabetycznym i np powrzucaniu do różnych tabel odpowiadającym pierwszym literom stringów. Co o tym myślicie ? Ma to sens ?
matiit
25.04.2013, 20:24:23
Baza danych ma coś takiego jak Indeksy.
Tylko hmm... ja np. nie wiem jak wyglądają Twoje dane mniej więcej. Podaj może jakiś mały kawałek informacji
Posio
25.04.2013, 21:36:10
wygląda to tak:
content || hits
testtest || 3
mam założony UNIQUE na content bo tekst z założenia się nie powtarza ...
Myślałem o czymś więcej niż tylko o pozakładaniu indexów, ale teraz zauważam że rozłożenie tego na wiele tabel to baaaardzo głupi pomysł...
franki01
26.04.2013, 22:56:01
Wrzucanie do wielu tabel ma sens tylko w przypadku jak siedzisz na hostingu i/albo masz mało RAMu. Jeżeli RAMu masz przynajmniej te 10-12 GB, wrzuć wszystko w jedną tabele, mądrze nadaj indeksy - jednoznaczne i główne wpływają na szybkość wyszukiwania. Do tego koniecznie dobrze poustawiać ilość cache dla mysql w pliku konfiguracyjnym (wykorzystać RAM prawie do maksimum) i będzie śmigać. Najważniejsze są poprawne indeksy trzymane bezpośrednio w RAMie.
EDIT: Jeszcze jedna rzecz. Przed wrzucaniem wszystkiego z CSV do bazy danych wyrzuć wszystkie indeksy. Nadaj je dopiero jak wszystko wrzucisz. Import trwa wtedy zauważalnie szybciej.
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.