![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 702 Pomógł: 65 Dołączył: 16.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Z potrzeby zastosowania kluczy obcych w bazie zaprojektowałem część tabel z Innodb , ale w jednej (gdzie mam umieszczone forum ,kategorie oraz posty użytkowników ) potrzebuję zbudować wyszukiwarke i nie moge zastosować klucza FULLTEXT . Więc idąc dalej szukając rozwiązania zbudowałem silnik mniej więcej taki jaki ma forum phpbb3 gdzie tekst jest rozbijany na słowa a potem w dodatkowej tabeli SQL powiązane są słowa z id rekordu który go zawiera ,pojawiło się alę .... jeśli tekst zawiera dużą ilość słów (500>) cała akcja trwa 3-4 sekundy a na taką ilość czasu po przeładowaniu strony nie moge pozwolić sobie w projekcie . Całość pisze w kohana 3.Sprowadzając do najprostrzej postaci model aby przyspieszyć dodawanie do bazy lecz i tak dalej wynik jest mizerny . więc poszukuje rozwiązania aby zbudować wyszukiwarke , może ma ktoś pomysł ? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 262 Pomógł: 26 Dołączył: 23.01.2009 Skąd: eZ Systems Ostrzeżenie: (0%) ![]() ![]() |
tam gdzie potrzebujesz wyszukiwać korzystaj z myisam
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 702 Pomógł: 65 Dołączył: 16.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
nie mogę ponieważ potrzebyuje korzystać z kluczy obcych w tabelach
|
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Trzeba było wybrać PostgreSQL, a nie MySQL - nie miałbyś takich dylematów. ~sunpietro dobrze prawi: utwórz sobie 1 tabelę MyISAM, w której będziesz przechowywał indeks pełnotekstowy oraz odwołanie do rekordu źródłowego. Automatyczne usuwanie rekordów z tej tabeli musisz zrobić samodzielnie np. triggerami.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 471 Pomógł: 89 Dołączył: 29.07.2008 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
zgadzam sie z przedmowcami. Opcjonalnie mozesz rozwazyc procedure skladaowana odpalana co jakis czas w cronie ktora odswiezy tabele fulltextowa
mozesz tez rozwazyc zastosowanie Lucene albo podobnego silnika |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 374 Pomógł: 149 Dołączył: 1.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 006 Pomógł: 111 Dołączył: 23.07.2010 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Chcę odnowić temat, bo też szukam sposobu na wyszukiwarkę.
Aplikację piszę w Zendzie, baza jest na silniku InnoDB (potrzebuję kluczy obcych). Nie chciałbym robić dodatkowych tabel na przechowywanie danych do wyszukiwania, bo potem jak do nich zamontować klucze (chyba, że ona jest nie oficjalnie połączona)? Niech to będzie ostateczność. Zastanawiam się po prostu nad użyciem hardcore'owego like... Ale to tak mało PRO (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
MySql od najnowszej wersji (5.6) wspiera FULL TEXT SEARCH na silniku InnoDb
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 006 Pomógł: 111 Dołączył: 23.07.2010 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
A w xampp'ie da się zrobić jakoś update?
I używa się jej tak samo jak na MyISAM? Tylko, że ta wersja MySQL jest teraz w fazie beta :/ Ten post edytował IceManSpy 7.08.2011, 23:43:43 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Więc innego wyboru jak robienie tabelki MyIsam odpowiedzialnej za search nie masz - przy dobrych triggerach da się to ładnie zrobić by w kodzie nie robić śmietniku (IMG:style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 1 006 Pomógł: 111 Dołączył: 23.07.2010 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
A trigger się wywoła automatycznie na jakiś zdarzenie (insert,update,delete)? Czy muszę go wywoływać w programie? I triggera mam wywołać na tabeli na której chcę, aby działał?
Ten post edytował IceManSpy 8.08.2011, 00:12:25 |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Cytat A trigger się wywoła automatycznie na jakiś zdarzenie (insert,update,delete)? Tak, i wtedy piszesz triggery dla tabelki InnoDb która automatycznie update'uje tabelkę MyIsam. |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 1 006 Pomógł: 111 Dołączył: 23.07.2010 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Ok, wielkie dzięki za podpowiedzi (IMG:style_emoticons/default/smile.gif) Kliknąłbym "Pomógł" ale nie jestem właścicielem tematu (IMG:style_emoticons/default/wink.gif) Zrobię sobie 3 triggery - 1 na insert, 2 na update i 3 na delete. Choć chyba na update nie będzie potrzebny, bo ta tabela nie będzie update'owana (IMG:style_emoticons/default/smile.gif)
Taki mały offtop, czy lepiej zrobić to na triggerach czy zrobić taki insert w aplikacji? Piszę w Zendzie, więc można by było stworzyc jakąś metodę do tego celu i ją wywoływać. Dzięki temu w razie zmiany źródła danych to nie powinno się wysypać. Małe są szanse na zmianę źródła, ale chciałbym poznać opinię na ten pomysł. Ten post edytował IceManSpy 8.08.2011, 00:38:52 |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Cytat Taki mały offtop, czy lepiej zrobić to na triggerach czy zrobić taki insert w aplikacji? Piszę w Zendzie, więc można by było stworzyc jakąś metodę do tego celu i ją wywoływać. Dzięki temu w razie zmiany źródła danych to nie powinno się wysypać. Małe są szanse na zmianę źródła, ale chciałbym poznać opinię na ten pomysł. To też zależy czy na serwerze będziesz miał prawa do założenia triggera na bazie, zazwyczaj nie ma się do nich dostępu. Ogólnie jeżeli używasz Zend'a to dobrze się składa, ponieważ możesz nadpisać klasę ActiveRecordu i tam nadpisać metody save / delete:
Mam nadzieję że wyjaśniłem (IMG:style_emoticons/default/smile.gif) PS. Musisz także pamiętać o tym że przy tej metodzie nie zadizałają funkcje typu:
Ten post edytował melkorm 8.08.2011, 05:31:23 |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 1 006 Pomógł: 111 Dołączył: 23.07.2010 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Albo stworzyć nowy model dla tej tabeli do wyszukiwania i potem tworzyć obiekty w "głównym" modelu i tylko wywoływać odpowiednie metody.
Chyba, że modele między sobą nie mogą się bezpośrednio (w jednym modelu tworzone są obiekty innych) kontaktować? tylko za pomocą kontrolera. Ten post edytował IceManSpy 8.08.2011, 09:48:52 |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Ja mówię o samej aktualizacji, system samego szukania implementuj sobie normalnie (IMG:style_emoticons/default/wink.gif)
Ten post edytował melkorm 8.08.2011, 12:01:15 |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 1 006 Pomógł: 111 Dołączył: 23.07.2010 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Właśnie nie za bardzo to rozumiem :/
Myślałem o czymś takim (taki ogólny skrót):
Dzięki temu w UserSearcher mógłbym napisać sobie system szukania jako metodę. Ten post edytował IceManSpy 8.08.2011, 13:32:59 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 3.10.2025 - 19:52 |