![]() |
![]() |
-lukasamd- |
![]()
Post
#1
|
Goście ![]() |
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:
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. Ten post edytował lukasamd 30.05.2009, 09:06:10 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
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ź. -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
-lukasamd- |
![]()
Post
#3
|
Goście ![]() |
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
![]() 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). |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
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 ;] -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
-lukasamd- |
![]()
Post
#5
|
Goście ![]() |
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? Ten post edytował lukasamd 30.05.2009, 21:04:49 |
|
|
![]()
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%) ![]() ![]() |
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 = '...'
-------------------- Nie lubię jednorożców.
|
|
|
-lukasamd- |
![]()
Post
#7
|
Goście ![]() |
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? |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
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. -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 08:19 |