Dzięki djgarsi! Przemyślałem to.
Doszedłem do wniosku, że zamiast kasować wpisy co godzinę będę kasował je po dodaniu nowego.
Polecą wszystkie o id <= max(id) - 100.
Wyświetlam tak czy inaczej 30 wierszy.
Ale przechowując starsze wpisy zapewniłem sobie możliwość ciągłości SB.
Tzn. jeśli ktoś będzie spamował i system lub moderator to wychwyci wtedy dodaje użytkownika do listy zbanowanych i usuwa wszystkie wpisy tego użytkownika.
Wtedy zamiast spamu pojawią się wpisy, które być może ktoś chciał przeczytać.
Co do wpisywania tego samego tekstu:
sprawdzam, czy użytkownik nie wpisywał takiego tekstu.
Jeśli wpisał to pokazuję mu info, ze nie da rady wysłać dwa razy tego samego.
Tak samo nie może wysłać wiadomości krótszej niż 3 znaki.
Obecnie całość wygląda trochę lepiej z punktu widzenia wydajności.
Wyświetlanie danych:
- Pobieram dane z limitem do 30 wierszy.
Zapis danych:
Jeśli tekst nie jest pusty to:
- Sprawdzam czy użytkownik nie ma bana, jeśli nie ma to:
- Sprawdzam czy tekst się nie powtórzył lub czy nie jest za krótki, następnie:
- Sprawdzam czy wśród 30 ostatnio dodanych postów przynajmniej 20 nie było tego user'a. Jeśli tak to ban albo mute. W przeciwnym razie:
- Zwykły insert danych
W ten sposób mam tylko jeden select do bazy przy wypisywaniu danych, co poprawia już wydajność.
Co prawda sprawdzanie czy czy 20/30 postów było autorstwa danego użytkownika nie musi być kontretnie spamem. Ale podchodzi pod flood ;)
Mam jeszcze jedno pytanie:
Zna ktoś sposób na złamanie długiej linii?
Mam problem z tym, jak ktoś wpisze ciąg 100 znaków bez spacji. Nie mieści się to w oknie.