![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 85 Pomógł: 0 Dołączył: 18.03.2006 Skąd: Sosnowiec Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Jestem w trakcie robienia szukajki mniej więcej takiej jak jest na http://dom.gratka.pl/ i chodzi mi o szybkość wyświetlania się wyników w trakcie wpisywania. Korzystam przy tym z jQuery, ale mam poważny dylemat w jakiej postaci powinny być przechowywane dane. Chodzi o to że mam bazę ok. 100 tyś miast w polsce a taką ilość nie jest łatwo szybko przeszukać, co będzie najszybsze: 1) - zapisać to w formie tablicy np. nazwa -> id 2) plik xml 3) baza mysql - jeśli baza to jakie powinna mieć ustawienia (fulltext, index itd) bo o ile sql-a znam dość dobrze o tyle na szczegółowych ustawieniach tego typu nie bardzo się znam co do czego. W tym przypadku szybkość jest naprawdę ważna bo nikt nie będzie czekał 10sek. aż mu się wyświetlą podpowiedzi (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Pozdrawiam wszystkich |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 231 Pomógł: 22 Dołączył: 6.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
przy złożonej bazie zalecam użycie postgresa, jest dużo bardziej wydajniejszy niż mysql w kontakcie ze złożonymi zapytaniami
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 26 Pomógł: 5 Dołączył: 29.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
Na pewno nie XML, zanim go sparsujesz to wieki miną. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 85 Pomógł: 0 Dołączył: 18.03.2006 Skąd: Sosnowiec Ostrzeżenie: (0%) ![]() ![]() |
Dzięki chłopaki, a co z tablicą? Bo jest mi wszystko jedno do jakiej postaci to przeniosę, baza nie musi być bo nie są to dane które będą jakoś aktualizowane (dodawanie usuwanie rekordów odpada) chodzi tylko o szybkie wyświetlenie. Czy jednak z bazy szybciej wyszuka niż z normalnej tablicy gdzie potem będe miał coś takiego:
? |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Zapisz w postaci zserializowanej tablicy w cache. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#6
|
|
Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
A nie mozesz trzymac miast w bazie, a potem ajaxem wyslac zapytania "znajdz miasta zaczynajace sie na Wro"?
Sa do tego gotowe pluginy: autocomplete http://dyve.net/jquery/?autocomplete http://www.pengoworks.com/workshop/jquery/autocomplete.htm Cytat W tym przypadku szybkość jest naprawdę ważna bo nikt nie będzie czekał 10sek. aż mu się wyświetlą podpowiedzi Zwykly varchar ci starczy + WHERE city_name LIKE 'wro%', predkosc pojawiania sie podpowiedzi bedzie zalezec i tak od szybkosci lacza userka - taka SQLka jest mega prosta i szybka. Ten post edytował dr_bonzo 31.07.2009, 14:05:42 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 85 Pomógł: 0 Dołączył: 18.03.2006 Skąd: Sosnowiec Ostrzeżenie: (0%) ![]() ![]() |
@dr_bonzo: dzięki za odp. - ja to wszystko wiem, tylko nie wiem po prostu jak szybko to będzie działać przy tak dużej ilości rekordów, czy podpowiedzi pokażą się powiedzmy po sekundzie od wpisania ostatniej litery? I załóżmy że mając tabelę id_miasta | nazwa to id_miasta wiadomo będzie PRIMARY a "nazwa" będzie jako full text?
|
|
|
![]()
Post
#8
|
|
Grupa: Przyjaciele php.pl Postów: 1 202 Pomógł: 117 Dołączył: 13.04.2007 Skąd: 127.0.0.1 Ostrzeżenie: (0%) ![]() ![]() |
Witaj!
W Polsce jest ok 52k wszystkich miejscowości (włącznie z najmniejszymi wsiami). Taka baza waży około 2MB więc to pikuś dla każdej bazy. Kwestia indeksów. Pozdrawiam! |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 85 Pomógł: 0 Dołączył: 18.03.2006 Skąd: Sosnowiec Ostrzeżenie: (0%) ![]() ![]() |
W polsce jest dokładnie 2x tyle co napisałeś czyli ponad 100 tyś. miejscowości. looknij sobie tutaj: http://www.stat.gov.pl/broker/access/prefi...stPreFiles.jspa (może komuś się przyda przy okazji)
|
|
|
![]()
Post
#10
|
|
Grupa: Przyjaciele php.pl Postów: 1 202 Pomógł: 117 Dołączył: 13.04.2007 Skąd: 127.0.0.1 Ostrzeżenie: (0%) ![]() ![]() |
Może być nawet i pół miliona, bez znaczenia tutaj. Jednak jest dokładnie 53236.
Pozdrawiam! |
|
|
![]()
Post
#11
|
|
Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Cytat @dr_bonzo: dzięki za odp. - ja to wszystko wiem, tylko nie wiem po prostu jak szybko to będzie działać przy tak dużej ilości rekordów, czy podpowiedzi pokażą się powiedzmy po sekundzie od wpisania ostatniej litery? I załóżmy że mając tabelę id_miasta | nazwa to id_miasta wiadomo będzie PRIMARY a "nazwa" będzie jako full text? No to ja bardzo chetnie utworze sobie bazke z miejscowosciami, zrobie skrypt z autocomplete, i potestuje jak szybko to sie pobiera przy roznych ilosciach userow na sekunde itd. A potem ci rachunek wystawie, co? |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
id: INT NOT NULL AUTO_INCREMENT PRIMARY KEY
nazwa: VARCHAR(60) NOT NULL INDEX Przy czym sprawdź sobie jaka długość VARCHARa będzie odpowiednia, bo 60 może być za mało, za dużo lub w sam raz. |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Myślisz, że będzie miał ponad 2 mld miast? (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Na szybkość wyszukiwania to nie wpłynie. |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Myślisz, że będzie miał ponad 2 mld miast? (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Na szybkość wyszukiwania to nie wpłynie. Co ma do tego ilość miast? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Poza tym ktoś pisał o wartościach rzędu 53k, w takim przypadku znacznie lepiej zastosować: smallint unsigned, który przyjmie max ~65k (nie pamiętam dokładnie) Warto myśleć o optymalnych rozwiązaniach a nie zajmować cenne miejsce w bazie, którego nigdy nie wykorzystamy. Ten post edytował fifi209 1.08.2009, 17:55:05 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 17.09.2025 - 22:34 |