Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> procedury i triggery
ciekawski
post
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 29.05.2007

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


Witam,
jestem w tym temacie zasadniczo początkujący, dlatego mam na wstępie kilka pytań. Pierwsze, teoretyczne bardziej, to czy wykonanie procedury jest atomowe, tzn. objęte jedną transakcją (mam nadzieję, że mimo, iż pewnie źle to nazywam wiadomo o co chodzi smile.gif ).
Drugie pytanie jest już bardziej praktyczne. Mianowicie robię prostą stronę, w której będzie wyszukiwarka. Do tej pory robiąc wyszukiwanie korzystałem z LIKE, jednak czytałem o jego wadach. Chciałbym korzystać z AGAINST MATCH, gdyż jest podobno lepsze, ale mam table InnoDB. Czy zatem taki trick, że będę dublować tabele, wyszukiwać w tabeli myisam, a wszystkie inne dane w tabeli InnoDB. Można by np po stronie mysql napisać do tego procedurę. Co sądzicie o takim rozwiązaniu? Zależy mi na wydajności, ale też dobrym wyszukiwaniu (wiem, że istnieją silniki do wyszukiwania pełnotekstowego, ale nie na poziomie php, więc nie chciałbym z nich korzystać). Jakie są Wasze przemyślenia na ten temat? Opłaca się takie coś stosować? Też pytanie o zalety InnoDB nad myisam, bo być może tabele z podstronami zrobić w myisam (wówczas tracę możliwość transakcji z udziałem tej tabeli, co też nie za bardzo mi się podoba). Proszę o Wasze opinie...

z góry dzięki
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Taki już jest MySQL. Albo więzy integralności i transakcje, albo wyszukiwanie pełnotekstowe. Możesz zrobić tak, że mając np. komentarze i chcąc umożliwić wyszukiwanie pełnotekstowe po ich treści pakujesz całość do dwóch tabel.

1. comments [id, user_id, created_at]
2. comment_contents [comment_id, content]

Pierwsza tabela może być InnoDB. Pole id jest kluczem głównym z Auto Increment. Druga tabela jest typu MyISAM, pole comment_id jest zarazem kluczem głównym oraz kluczem obcym (do tabeli comments). Na polu content założony jest indeks do wyszukiwania pełnotekstowego. Wyszukując komentarze szukasz ich w drugiej tabeli dołączając odpowiedni rekord z pierwszej (JOIN).

Oczywiście istnieje problem z utrzymaniem integralności danych (usuwając komentarz nie usuniesz automatycznie jego treści z drugiej tabeli). Musisz o to zadbać "ręcznie" albo (lepsze rozwiązanie) zastosować triggera, który zrobi to automatycznie.
Go to the top of the page
+Quote Post
wookieb
post
Post #3





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Co zamiast MyIsam
Sposobów na wyszukiwanie jest w cholere więcej. Możesz użyć n-gramów i będzie spoko. Możesz również użyć Sphinxa - jeszcze lepiej.

MyIsam : InnoDb -> MyIsam
Także jeżeli pomimo wszystko chcesz używać myisam do wyszukiwania to triggerem możesz kopiować zawartość pola z tabeli InnoDB do MyISAM (po to żeby zaoszczędzić miejsce).
Przy wyszukiwaniu pobierasz tylko ID komentarza z tabeli MyIsam
  1. SELECT a.*
  2. FROM myisam_table a
  3. INNER JOIN innodb_table b USING (id)
  4. WHERE (...)


Oczywiście rodzi to jeden problem. Dane kopiowane w triggerze nie zostaną objęte transakcją, także nie ma szansy zrobić rollbacka aczkolwiek możesz to obejść przez odpalenie co jakiś czas skryptu czyszczącego MyIsam z rekordów, które nie istnieją w drugiej tabeli.


--------------------
Go to the top of the page
+Quote Post
ciekawski
post
Post #4





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 29.05.2007

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


Cytat
Możesz również użyć Sphinxa - jeszcze lepiej.

ale chyba Sphinxa już na standardowym hostingu nie uruchomię?
Go to the top of the page
+Quote Post
wookieb
post
Post #5





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




No niestety raczej nie.


--------------------
Go to the top of the page
+Quote Post
ciekawski
post
Post #6





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 29.05.2007

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


ale zdaje się, że n-gramy już tak, znalazłem info na blogu i w en wikipedii - sądzę, że są raczej wystarczające ( http://en.wikipedia.org/wiki/N-gram oraz http://www.beldzio.com/czy-chodzilo-ci-o-&....-czyli-n-gramy) - jeżeli jednak masz jakieś inne/lepsze źródło to chętnie zajrzę. Faktycznie wydaje się to lepsze rozwiązanie aniżeli dublowanie tabel. Dzięki za pomoc smile.gif

Ten post edytował ciekawski 27.07.2010, 09:49:10
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 14:31