Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Cache linków z seo jako tablica w pliku
Forum PHP.pl > Forum > PHP
lukasamd
Witam,
chciałbym zrobić sobie na stronach linki niezawierające jakiegokolwiek id, jedynie słowa kluczowe.
Zastanawiałem się, jak zrobić aby działało to sensownie, mam 2 rozwiązania:

a) szukanie w bazie danych po linku przerobionym na seo, tzn. po wartości varchar, która niejednokrotnie może być długa -> i to jest raczej złe rozwiązanie.

b) przy dodawaniu newsa / artykułu itp. zapisywanie jego linka i id do tablicy w odpowiednim pliku-cache:


  1. <?php
  2. $url = Array(
  3.   'link_seo_newsa1' => 1,
  4.   'link_seo_newsa2' => 2,
  5.   'link_seo_newsa3' => 3,
  6.   'link_seo_newsa4' => 4
  7. );
  8. ?>


Gdy ktoś wejdzie na daną stronę, sprawdzane jest czy taki link znajduje się w tablicy, jeżeli tak to pobierane jest z niej jego id i dopiero wtedy wykonywane zapytanie do bazy danych. Wydaje mi się dobrym rozwiązaniem, bo i odpada problem ochrony przed sql injection.


Pytanie tylko: czy operacje na takiej tablicy w php będą szybsze aniżeli operacja szukania po varchar w bazie (mysql)? IMO rekordów w bazie / tablicy będzie 100, może nieco więcej.
erix
Cytat
bo i odpada problem ochrony przed sql injection.

Bym się tym nie sugerował przy wyborze rozwiązania.

Cytat
IMO rekordów w bazie / tablicy będzie 100, może nieco więcej.

No przy takiej ilości tablice na pewno będą sprawniejszym rozwiązaniem. Choć niekoniecznie - przy poprawnie założonych indeksach baza będzie nawet szybsza, zwłaszcza w przypadku indeksów numerycznych. Ale musisz porobić testy, wtedy będziesz miał najlepszą odpowiedź.
lukasamd
No w wypadku indeksów numerycznych i szukaniu po id występujących w linku to oczywiste, że będzie szybciej. Tyle że ja chcę bez ID, tylko pokarm dla robotów indeksujących no i wygodna budowa winksmiley.jpg

Mógłbym dać indeks na pole varchar, ale to by chyba nie spełniło swojego zadania (długość pola IMO byłaby w granicach 100-150 znaków).
erix
Cytat
Mógłbym dać indeks na pole varchar, ale to by chyba nie spełniło swojego zadania (długość pola IMO byłaby w granicach 100-150 znaków).

CRC32 ;]
lukasamd
Cytat(erix @ 30.05.2009, 21:43:23 ) *
CRC32 ;]


Mógłbyś to "rozszerzyć", bo póki co niewiele mi mówi...

A może jednak nie... chodzi ci o zrobienie dla każdego linka rekordu typu liczbowego i szukać po nim?
Jeżeli tak to mam drugie pytanko: jaką mam dać długość pola dla crc32 tytułu?
10 wystarczy?
dr_bonzo
Google -> crc32, zawsze mozesz uzyc md5, czy tez trzymac pelen url w TEXT a pierwsze 255 znakow w varchar i tu zalozyc index, i szukasz where skrot = '...' and pelen_link = '...'
lukasamd
Sprawdzałem na bazie z około 240 rekordami, max. długość pola varchar 200, szukany ciąg 28:

Varchar: ~0,0050s
Smallint (indeks): ~0,0006s
Varchar (indeks): ~0,0007s

Czyli nie ma potrzeby hashowania, tym bardziej że długość pola chyba będzie jeszcze mniejsza (~100 znaków).

Tylko teraz pytanie, jak to zabezpieczyć? Przeglądałem nieco topic o SQL Injection i porównywałem szybkość działania, najlepszym rozwiązanie jest addslashes (ale chyba nie zawsze da radę) oraz mysql_escape_string - czasy obrabiania mniejsze niż w wypadku hashowania. Dobre to będzie rozwiązanie?
erix
Cytat
Mógłbyś to "rozszerzyć", bo póki co niewiele mi mówi...

Mógłbyś wówczas korzystać z wartości liczbowych na kolumnie.

Cytat
Dobre to będzie rozwiązanie?

Zależy od potrzeb i danych wejściowych. [; Ale mysql_REAL_escape_string" title="Zobacz w manualu PHP" target="_manual styknie.
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.