Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Sposób sprawdzania ip głosujących
Forum PHP.pl > Forum > Przedszkole
samuello
Posiadam system głosowania i chcę dorobić do niego blokowanie możliwości wielokrotnego głosowania. Planuję wykorzystać do tego metodę sprawdzania ip osoby głosującej. Potrzeba do tego bazy z adresami ip, które już na dany element oddały głos.

Pytanie moje brzmi: w jaki sposób gromadzić adresy ip osób, które oddały głos?
  1. Czy zapisywać je do bazy danych, do tabeli która będzie składać się z dwóch kolumn: id elementu i ip? i każdy numer ip to nowy wiersz?
  2. Czy zapisywać je do tabeli w bazie danych z kolumnami jak wyżej, jednakże w taki sposób, że jeden wiersz będzie zawierał id i w polu ip wszystkie ip, które oddały głos na element o danym 'id'? Potem wykorzystać funkcję explode do porównania z aktualnie oddającym głos...
  3. Czy może zapisywać adresy ip do pliku? Jedna linijka to adres ip + id elementu.


Zastanawiam się czy sposób nr 1, przy założeniu 10 000 elementów na które można głosować i 10 000 użytkowników oddających głos na każdy z nich, nie będzie zbyt obciążający skrypt? Przy opisanym założeniu powstanie 10 000 000 wierszy w tabeli z adresami ip... A jeżeli jeszcze bardziej zwiększy się liczba elementów i głosujących? (generalnie ciekawy jestem czy jest jakieś praktyczne ograniczenie ilości wierszy i kolumn w tabeli bazy danych?)

W sposobie nr 2, może się okazać, że braknie miejsca na dopisywanie kolejnych adresów ip... gdyż z tego co się orientuję pola typu text czy nawet longtext ma jakieś ograniczenia ilości bajtów:>

W przypadku sposobu nr 3 też obawiam się o szybkość wykonywania skryptu...

Co Wy na to? Proszę o podpowiedzi i rady w poruszonej kwestii. A może ktoś widzi jakieś inne rozwiązanie problemu blokowania wielokrotnego głosowania? Może warto dodać jeszcze sprawdzanie cookies.
rocktech.pl
Witam.

Sposób pierwszy zdecydowanie 2 i 3 to porażka.

Zobacz także jak wydajniej przechowywać adresy IP w bazie jako INT.

  1. SELECT INET_ATON('192.168.0.10') AS ipn;
  2. SELECT INET_NTOA(3232235530) AS ipa;


A w php ip2long.
samuello
Korzystając z tematu chciałbym jeszcze zapytać o jakieś polecane artykuły na temat optymalizacji działania bazy danych. Chciałbym się dowiedzieć jak kształtować budowę mojej bazy danych z punktu widzenia szybkości działania serwisu. Kiedy i czy w ogóle tworzyć więcej niż jedną bazę, czy są jakieś ograniczenia praktyczne co do ilości tabel w bazie danych, czy kolejność i ilość kolumn w tabeli ma jakieś znaczenie?
Rysh
Jeśli w Twoim skrypcie można głosować raz na 24h, proponuje dodać do tabeli dodatkową kolumnę timestamp i przy pomocy zapytania sprawdzać czy IP znajduje się w bazie w ostatnich 24h. Jeśli dobrze kminie, wypadało by dodać również indeks na timestamp dla szybszego operowania na bazie.
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.