Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ilość rekordów i lokowanie w bazie.
Forum PHP.pl > Forum > Bazy danych
Posio
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
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 smile.gif
Posio
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
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.