Mamy serwer bazy danych, serwer aplikacji, i klienta, standardzik. Serwer aplikacji korzysta z Lucene do szybkiego wyszukiwania. W indeksie leza sobie id i na podstawie zapytan dostajemy liste id, wykonujemy zapytanie do bazy i dostajemy obiekty (oczywiscie stronicowanie itp jest, ale nie o tym tutaj). Te wyniki wysylane sa do aplikacji klienckiej, i tam pokazywane w stronach.
Teraz uzytkownik ma liste z boku z wynikami, klika na cos na liscie, i w glownej formie pokazuje sie ten obiekt, z ktorym moze robic fiku miku, np go usunac. No i usuwamy. W tym momencie wywolywana jest EJB ktory usuwa z bazy obiekt o takim id, a lista jest akutalizowana. Piknie, tylko troszke wolno mi sie to wydawalo.
No i co sie okazuje - gdy jest usuwane, zaraz po nim wykonywane jest nastepne wywolanie EJB (innego tym razem) ktory ponawia wyszukiwanie. Te wyniki sa pokazywane znowu na liscie, przy czym lista jest pomniejszona o poprzedni element (czyli jak bylo 10, 1 usuniety, to pokazane jest pozostale 9).
To wszystko wymaga wycieczki do serwera, ktory moze byc daleko, a serwer aplikacji i bazy danych tez sa najczesciej (u nas) osobne. Czyli troszke moze to potrwac.
Alternatywa jest po prostu wywalic dany obiekt z listy ktora ma klient jak uda sie usunac z bazy - bez ponawiania wyszukiwania. Zaproponowalem takie male usprawnienie, ale spadla na mnie fala krytyki. Podstawowy zarzut to taki ze Lucene i jej indeks sa super szybkie i przeciez nie ma problemow z wydajnoscia. Nie przemawia to ze sprawdzalismy to na liscie z 3 wynikami, indeks ma 10kb a nie 3gb, i ze wszystko jest lokalnie - i tak bylo widac wyrazne migniecie ekranu na podmianie listy i ulamek sekundy (moim zdaniem za dlugo) poczekac.
Teraz moje pytanie do Was - jak byscie postapili w takim przypadku? Ktore rozwiazanie by byscie wybrali i dlaczego? Moze jest jakis bardzo wazny powod dlaczego opcja ktora akutlanie mamy jest jedyna sluszna, jednak nie przychodzi mi do glowy i nikt nie potrafil takiego przywolac.
Wg mnie sytuacja jest taka - robimy wycieczke na serwer tylko po to aby dowiedziec sie tego co juz sie dowiedzielismy jak user kliknac 'Usun' i metoda usuniecia z bazy wrocila bez bledu - ze ten obiekt nie powinien byc na liscie.
Rozumiem ze przedwczesna optymalizacja to zuo, ale to nie znaczy ze trzeba byc glupim i pizgac na kowboja byle dzielalo, bezmyslnie.
Przepraszam ze tak dlugo i prosze o opinie ;d