Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][Sphinx] Wyszukiwanie po miejscowościach
Walian
post
Post #1





Grupa: Zarejestrowani
Postów: 124
Pomógł: 1
Dołączył: 13.07.2009

Ostrzeżenie: (0%)
-----


Jak byście zrobili wyszukiwanie po miejscowościach mając do dyspozycji MySQL + Sphinx?
Chodzi mi tutaj głównie o wydajność. Wiele serwisów umożliwia filtrowanie dajmy na to - ogłoszeń, aukcji itp. Poprzez wybranie miejscowości z listy rozwijalnej lub wpisanie jej nazwy. Często jest też opcja auto-uzupełniania. Wydaje mi się, że nie ma sensu z góry zapisywać do bazy listy większości miejscowości dostępnych w Polsce, szczególnie, że w pracy tworzymy serwis, którego docelowym targetem w późniejszej fazie będą również inne kraje. Sphinx wyszukuje już po innych kryteriach (również po kolumnach tekstowych), pozostaje dodanie wyszukiwania po województwach, powiatach i miejscowościach. Jak to zrobić wydajnie? I co najważniejsze - jak o wszystko połączyć z mapą, która będzie napisana we Flashu? Możecie podać jakieś przykłady rozwiązań?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Przede wszystkim powinieneś wyszukiwać po jakimś ID miejscowości, a nie jej nazwie - to znacznie uprości wszelkie operacje typu wyszukiwanie, filtrowanie, znajdowanie ogłoszeń w promieniu X kilometrów od danej miejscowości itp. itd. Sam proces wyszukiwania jest już wtedy banalnie prosty.

Tworzenie lokalnej bazy danych to wymóg, którego raczej nie przeskoczysz. Nie mniej jednak nie musisz na samym początku posiadać bazy danych absolutnie wszystkich miejscowości. Niezbędne minimum na start to wszystkie miejscowości o statusie gminnym. W Polsce jest chyba o ile się nie mylę niespełna 500. Jadnak nie można zapominać o mieszkańcach mniejszych miejscowości dlatego też w przypadku gdy podana miejscowość nie może zostać odnaleziona w lokalnej bazie danych możesz wykorzystać chociażby Google'a, który udostępnia API do wyszukiwania miejscowości. W momencie gdy Google zwróci jakieś wyniki robisz sobie jego lokalną kopię.
Go to the top of the page
+Quote Post
Walian
post
Post #3





Grupa: Zarejestrowani
Postów: 124
Pomógł: 1
Dołączył: 13.07.2009

Ostrzeżenie: (0%)
-----


Oczywiście będę przechowywał zarowno id, parent_id jak i samą nazwę bo to podstawa. Google też brałem pod uwagę. Ale co jeśli będziemy mieć mnóstwo rekordów (500 tyś - 1 mln) i do tego całą masę miejscowości itd. ? Wyszukiwanie może trochę potrwać przypuszczam. No i co z duplikatami miejscowości - wiele się powtarza... Na razie jest pomysł, żeby sprawdzać je po kodach pocztowych.
Go to the top of the page
+Quote Post
Crozin
post
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat
Ale co jeśli będziemy mieć mnóstwo rekordów (500 tyś - 1 mln) i do tego całą masę miejscowości itd. ?
Nie jestem pewien podawanych liczb, ale w Polsce mamy chyba raptem 60 000 zarejestrowanych miejscowości. Także ten milion osiągnąłbyś pewnie dopiero po utworzeniu bazy całej Europy. Wyszukanie ID na podstawie nazwy nie powinno stanowić problemu, a w docelowym wyszukiwaniu danych warunek porównujący ID oferty będzie prawdopodobnie jednym z bardziej odciążających.
Cytat
Wyszukiwanie może trochę potrwać przypuszczam.
Oczywiście, że przeszukanie sporej bazy danych trwa. Dlatego w pewnym momencie konieczne stanie się nie optymalizowanie algorytmu, a dokupywanie kolejnych maszyn. Na pewnym etapie optymalizacja przestaje być opłacalna.
Cytat
No i co z duplikatami miejscowości - wiele się powtarza...
O ile nazwy miejscowości w obrębie kraju rzeczywiście mogą się powtarzać o tyle w obrębie gminy są już unikalne. Dlatego, jeżeli ktoś wpisze miejscowość "abc" i system wyszuka przykładowo 6 miejscowości o takiej nazwie wyświetlasz pole w którym można wybrać o którą konkretnie chodzi. Podajesz po prostu pełną "ścieżkę" do miejscowości na zasadzie: woj. małopolskie, pow. nowosądecki, gm. Muszyna, Szczawnik.
Go to the top of the page
+Quote Post
Walian
post
Post #5





Grupa: Zarejestrowani
Postów: 124
Pomógł: 1
Dołączył: 13.07.2009

Ostrzeżenie: (0%)
-----


Miałem na myśli olbrzymią liczbę rekordów typu oferty, aukcje, artykuły i tym podobne.
Cytat
Wyszukanie ID na podstawie nazwy nie powinno stanowić problemu, a w docelowym wyszukiwaniu danych warunek porównujący ID oferty będzie prawdopodobnie jednym z bardziej odciążających.

I chyba tak zrobię, zwłaszcza, że Sphinx woli Id niż dane tekstowe.
Cytat
Oczywiście, że przeszukanie sporej bazy danych trwa. Dlatego w pewnym momencie konieczne stanie się nie optymalizowanie algorytmu, a dokupywanie kolejnych maszyn. Na pewnym etapie optymalizacja przestaje być opłacalna.

Prawda, ale ja właśnie staram się to zrobić najwydajniej jak się da, żeby konieczność użycia kolejnej maszyny pojawiła się jak najpóźniej. A właśnie - jak się rozkłada obciążenie bazy danych na kilka serwerów? Zna ktoś ciekawe źródła w sieci opisujące to zagadnienie? Zawsze mnie to ciekawiło, a niestety nie miałem jeszcze przyjemności pracować w firmie posiadającej na tyle rozbudowany serwis by mieć kilka maszyn (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
uupah5
post
Post #6





Grupa: Zarejestrowani
Postów: 207
Pomógł: 18
Dołączył: 4.09.2010
Skąd: warszawa

Ostrzeżenie: (0%)
-----


Cytat(Walian @ 11.04.2011, 15:03:48 ) *
Prawda, ale ja właśnie staram się to zrobić najwydajniej jak się da, żeby konieczność użycia kolejnej maszyny pojawiła się jak najpóźniej. A właśnie - jak się rozkłada obciążenie bazy danych na kilka serwerów? Zna ktoś ciekawe źródła w sieci opisujące to zagadnienie? Zawsze mnie to ciekawiło, a niestety nie miałem jeszcze przyjemności pracować w firmie posiadającej na tyle rozbudowany serwis by mieć kilka maszyn (IMG:style_emoticons/default/smile.gif)

słownik poczty polskiej to 34k nazw miejscowości. żadna ilość, nawet jakbyś miał to przeszukiwać w pliku tekstowym.
mam wrażenie, że zaczynasz szukać "obejść" i "hacków" na zwiększenie wydajności zanim jeszcze pojawił się jakikolwiek problem z tym związany.
IMHO: zrób to po "bożemu" a rozwiązywaniem problemów z wydajnością zajmij się, jak się faktycznie pojawią.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 08:50