Stronicowanie po dwóch modelach

Witam
Potrzebuje zrobic stronnicowanie do dwoch modeli kotre sa wyswietlone w jednej liscie na stronie i posortowane.

http://github.com/mislav/will_paginate/tree/master/lib/will_paginate/collection.rb#L58 - zobacz tutaj

To jest jedno z wyjsc ale do moich potrzebj jest niewystarczajace. Co jesli beda np.: 3 modele a kazdy z nich po 10 000 rekordow. wyciaganie wszystkiego i mergowanie( + sortowanie po dacie utworzenia ) a pozniej robienie z tego paginacji to troche obsysa

A jak sobie wyobrażasz to inaczej skoro masz dane w 3 różnych tabelach ? Baza i tak musi posortować kolekcję, do mergowania możesz użyć “UNION” (na przykład), poza tym z reguły nie tworzysz 10,000 obiektów tylko tyle ile wyświetlasz na stronie (np. 10), więc baza z reguły robi limit i offset. Możesz też utworzyć klasę , która będzie kontenerem dla innych typów - tak będzie łatwiesz korzystać z will paginate. Napisz konkretnie o co Ci chodzi i daj przykład a nie takie ogólniki.

Obsysa tak, ale wyciąganie danych z 3 różnych tabel jak z jednej ;-). Tylko UNION tu pomoże i nie będzie to zbyt optymalne (przy dużej liczbie rekordów).

Artur, wyświetlasz je równolegle (dwie kolumny niezależnych rekordów obok siebie) czy przemieszane w jednej kolumnie (jakiś polimorfik)?

Bo jeśli to pierwsze, to ja nie widzę problemu z jednym nawigatorem paginacyjnym na całą stronę, oczywiście z maksimum ustawionym według największego z dwóch czy trzech.

Problem:
mamy 3 model A, B, C i musimy wyciagnac wszystkie kolekcje zmergować do jednej listy, posortować po created_at oraz dodać paginacje

Problem stał się jeszcze ciekawszy gdyż okazało sie ze do tego wszystkiego potrzebuje dodać fereta :smiley:

Matko boska komandoska, tylko nie Ferret. Obczaj lepiej sphinxa. Mam trochę za dużo doświadczeń z Ferretem, żeby pozwalać kolegom na jego używanie :wink:

Tak jak mowi Tomash. Jeszcze nie slyszlem dobrego zdania o ferrecie (i to w real nie na blogach) a o Sphinx same superlatywy. Niestety sam mialem do czynienia tylko z ferretem :frowning:

To dlatego, że programiści RoR to straszne papugi co powtarzają to co przeczytają bez własnoręcznej weryfikacji. Używamy ferreta od roku do ~ 20 róznych site’ów i nie było z nim żadnych problemów. Z reguły robisz query i zwracasz listę id, tę listę później wrzucasz do bazy jako AND id IN (1,2,3 etc) i baza robi resztę (dodatkowe warunki/grupowanie/stronicowanie). Sphinx też jest świetny, super szybki, wbudowane grupowanie i zaawansowane query też z niego korzystam od około roku ale do trochę innych rzeczy, poza tym nie wszystko w Sphinx’ie jest takie super, np. musisz ręcznie przebudowywać indeks co jakiś czas, często to nie jest problem ale często musisz wiedzieć updaty in real time. Wszystko zależy od potrzeb, np. do CMS’a z max kilka tysięcy rekordów wystarczy Ferret, setup jest o wiele prostszy niż Sphinxa a do zaawansowanej wyszukiwarki lepszy jest Sphinx. Sorry za te papugi ale ostatnio coraz bardziej denerwuję się jak widzę jak prosto można manipulować opinią osób w “blogosferze”, szczególnie w światku RoR.

Ja mogę powiedzieć tyle: używałem ferreta mało, nigdy w produkcji, bo jak tylko usłyszałem o sphinxie, to ferreta wywaliłem.

Ferret zaczyna być ciężki do używania, gdy często zmieniają się rekordy. Z tego co pamiętam kiedy to implementowałem dla kilku mongreli trzeba było się trochę namęczyć. Rzeczywiście o tych problemach większość osób pewnie przeczytała w sieci, ale akurat to na czym się większość opiera to najpewniej wypowiedź Ezry Zygmuntowicza - z tego co pisał przy dużej ilości update’ów do bazy, przy kilku serwerach aplikacji, zaczynają się problemy z indexem.

Oczywiście, przy małych bazach może to nie stanowi problemu, ale jednak jak tworzę aplikację chciałbym, żeby w przyszłości nie było przykrych niespodzianek i reimplementacji wyszukiwania.

Jeżeli chodzi o sphinxa, to jest coś takiego jak indexy delta - małe indexy, w których zapisywane są zmiany aż do reindexowania, w thinking sphinx jest to kwestia dodania kolumny boolean do bazy i jednej linijki w modelu.

Używaliśmy Ferreta w jednym projekcie, wyleciał ze względu na wycieki pamięci i związaną z tym konieczność regularnego restartowania mongreli. Natomiast Sphinx sprawuje się bez zarzutów, co więcej pozwolił nam rozwiązać dokładnie taki problem z jakim boryka się seeweer.

Mieliśmy modele Post, Comment, Profile z konieczności (i rozsądku) wrzucone do osobnych tabel. Wszystkie były indeksowane Sphinxem. Plugin ultrasphinx pozwolił nam szukać we wszystkich modelach na raz przy czym wyniki ładnie dało się paginować za pomocą will_paginate.