On Thu, Nov 27, 2008 at 10:28 AM, Stefan Fußenegger <[EMAIL PROTECTED]> wrote: > > Hi Igor, > > thanks for implementing this minimal version. i totally agree with your > reasoning. Is there any chance though that this goes into 1.3 branch as > well? I'd really appreciate that.
done > you mentioned that you implemented such a repeater yourself. didn't you use > any navigation or did you write that yourself? just wondering. i implemented a simple prev/next pager which is all that was required for that usecase. > shall i open a ticket against 1.5 to track this issue/enhancement? i added it to the wishlist wiki page. if you add a jira ticket please add the number to the wiki page. -igor > > best regards, stefan > > > > igor.vaynberg wrote: >> >> On Thu, Nov 27, 2008 at 12:46 AM, Stefan Fußenegger >> <[EMAIL PROTECTED]> wrote: >>> >>> I don't think IDataProvider is only about databases. >> >> you started off with your core assumption being wrong. idataprovider >> was written exclusively for accessing databases. my thinking, at the >> time, was that 99% of people use wicket to build applications that >> access databases, and i dare say it was a good guess because in its ~3 >> years of existence only a handful of people had a problem with the way >> it works. >> >>> There are other data >>> sources and some return the total amount and the desired subset at the >>> same >>> time (Lucene as a famous example). Such data sources would really benefit >>> of >>> a single-query-approach. >> >> i am not disputing this fact. i am simply saying that we are not going >> to fix this right now because this is not a bug. you are trying to use >> the components for something they were not designed to be used. in 1.5 >> we may address this. >> >>> I faced this issue myself in a search (read Lucene) >>> centered application. I successfully went down the road of implementing a >>> custom repeater. >> >> i had to do the same myself. >> >>> But when the repeater was working as desired, I figured out >>> that PagingNavigationLink is the real showstopper, not IDataProvider (see >>> my >>> JIRA comment [0]). The fix would be rather trivial, as >>> PagingNavigationLink >>> is doing something it needn't do (checking the requested page against the >>> valid range of pages). >>> >>> Let me answer 2 possible questions in advance: >>> >>> Q: Why is this check in PagingNavigationLink a problem? >>> A: Obviously, you can't fetch size and data as long as the page isn't >>> known. >> >> the check is there because we code defensively. we do not assume that >> every implementation of ipageable will cull the number when you call >> setcurrentpage(x). >> >>> Q: How would a custom repeater that fetches data and size at the same >>> tame >>> handle invalid (out of range) pages? >>> A: Out of range pages will return the size and an empty dataset. In this >>> case, the repeater would change the page number to the last valid and do >>> a >>> second query. Yeah, two queries again. But this should only happen rarely >>> though. >> >> this will change the existing behavior. if you are on page 5 and click >> page 10 (which happens to not exist) you would end up back on 5 with >> your suggestion where as currently you would properly end up on 9. >> >> looking at WICKET-1784, i extracted the code you want into an >> overridable int cullPageNumber(int x). so feel free to subclass the >> link and override that to return x without any extra checks. >> >> we may properly fix this in 1.5, but for right now this is too big a >> refactor because it changes the basic assumptions with which the code >> was written. >> >> -igor >> >>> >>> Best regards, Stefan >>> >>> [0] >>> https://issues.apache.org/jira/browse/WICKET-1784?focusedCommentId=12651278#action_12651278 >>> >>> >>> igor.vaynberg wrote: >>>> >>>> On Wed, Nov 26, 2008 at 9:32 AM, Wayne Pope >>>> <[EMAIL PROTECTED]> wrote: >>>>>>so you think pushing all that extra data over the network is actually >>>>>>more efficient then doing another query???? wtf. >>>>> The point is I'd rather avoid 2 calls where 1 will do. >>>>> AbstractPageableView >>>>> will do fine I believe. >>>> >>>> the number of calls itself is meaningless, i dont comprehend why >>>> people have a hard time understanding this simple fact. >>>> >>>> if you have one call that takes 1000ms and ten calls that each take >>>> 10ms you should concentrate on the one call that takes a long time >>>> rather then eliminating all ten 10ms calls which only saves you 100ms. >>>> if you can optimize the 1000ms and shave off 20% then your eleven >>>> calls are still faster then the one call. >>>> >>>> and since connection pools have been inventind many years ago there is >>>> no more overhead of establishing network connections, just pushing >>>> bits around. maybe that is still a problem in php, but in java it has >>>> been solved a long time ago. >>>> >>>> -igor >>>> >>>> >>>>> >>>>>>i can only assume that you have actually profiled your app and that >>>>>>one select count() call was what was taking a significant chunk of >>>>>>processing time in the database server? to the point where eliminating >>>>>>it will actually reduce enough load on the database to increase your >>>>>>throughput? >>>>> >>>>> No I haven't, as mentioned before, I just want to avoid 2 calls when >>>>> one >>>>> will do. I have however seen several times in production systems >>>>> waiting >>>>> on >>>>> i/o's reduces your scalability. I'd rather keep server count down as >>>>> money >>>>> is tight. >>>>> I'll be mindfull not to ask 'stupid' questions again. >>>>> >>>>> >>>>> >>>>> On Wed, Nov 26, 2008 at 6:19 PM, Igor Vaynberg >>>>> <[EMAIL PROTECTED]>wrote: >>>>> >>>>>> On Wed, Nov 26, 2008 at 9:06 AM, Wayne Pope >>>>>> <[EMAIL PROTECTED]> wrote: >>>>>> > Hi Igor, >>>>>> > >>>>>> >>what? why would you ever load the whole dataset? >>>>>> > just to avoid 2 calls on smallish datasets, especially when there >>>>>> are >>>>>> > multiple joins and database isnt on the same box. >>>>>> >>>>>> so you think pushing all that extra data over the network is actually >>>>>> more efficient then doing another query???? wtf. >>>>>> >>>>>> >>yeah. because select count() queries are the most expensive queries >>>>>> >>you can run on the database. you are right, its totally going to >>>>>> kill >>>>>> >>it. you know how all those sites on the internet that have a pager >>>>>> >>above the pageable view that shows you the number of the last >>>>>> >>available page...you know how those work without doing a select >>>>>> >>count()? >>>>>> > >>>>>> > Ouch. >>>>>> > I just want to limit calls if possible to the database as waiting >>>>>> for >>>>>> i/o's >>>>>> > is never great for scalability. I'm not 'having a go' at wicket or >>>>>> DataViews >>>>>> > or anything, just trying to understand it. I never claimed to be a >>>>>> guru - >>>>>> > far from it. >>>>>> >>>>>> i can only assume that you have actually profiled your app and that >>>>>> one select count() call was what was taking a significant chunk of >>>>>> processing time in the database server? to the point where eliminating >>>>>> it will actually reduce enough load on the database to increase your >>>>>> throughput? >>>>>> >>>>>> -igor >>>>>> >>>>>> > >>>>>> > Wayne >>>>>> > >>>>>> > >>>>>> > On Wed, Nov 26, 2008 at 5:58 PM, Igor Vaynberg >>>>>> <[EMAIL PROTECTED] >>>>>> >wrote: >>>>>> > >>>>>> >> On Wed, Nov 26, 2008 at 7:32 AM, Wayne Pope >>>>>> >> <[EMAIL PROTECTED]> wrote: >>>>>> >> > I'm sure I must be missing something still, as I can't beleive >>>>>> that >>>>>> we >>>>>> >> need >>>>>> >> > to either a) load the whole data set >>>>>> >> >>>>>> >> what? why would you ever load the whole dataset? >>>>>> >> >>>>>> >> b) call count on the Db , then load in >>>>>> >> > the iterator mehod. Thats going to kill the database in prod (or >>>>>> really >>>>>> >> not >>>>>> >> > help.) >>>>>> >> >>>>>> >> yeah. because select count() queries are the most expensive queries >>>>>> >> you can run on the database. you are right, its totally going to >>>>>> kill >>>>>> >> it. you know how all those sites on the internet that have a pager >>>>>> >> above the pageable view that shows you the number of the last >>>>>> >> available page...you know how those work without doing a select >>>>>> >> count()? >>>>>> >> >>>>>> >> -igor >>>>>> >> >>>>>> >> >>>>>> >> >>>>>> >> >>>>>> >> >>>>>> >> >>>>>> >> > >>>>>> >> > On Wed, Nov 26, 2008 at 3:58 PM, Michael Sparer < >>>>>> [EMAIL PROTECTED] >>>>>> >> >wrote: >>>>>> >> > >>>>>> >> >> >>>>>> >> >> have a look at https://issues.apache.org/jira/browse/WICKET-1784 >>>>>> >> >> >>>>>> >> >> >>>>>> >> >> Wayne Pope-2 wrote: >>>>>> >> >> > >>>>>> >> >> > Ok, >>>>>> >> >> > >>>>>> >> >> > I was just having a bit of code clean up and I realized that >>>>>> in >>>>>> our >>>>>> >> >> > IDataProviders we are loading all rows for a given dataset. >>>>>> >> >> > So looking at the iterator method I see we can limit the >>>>>> result >>>>>> (and >>>>>> >> the >>>>>> >> >> > offset). Great I thought - however I see that that the size() >>>>>> method >>>>>> >> is >>>>>> >> >> > called as part of the getViewSize() in the >>>>>> AbstractPageableView. >>>>>> Thus >>>>>> >> I >>>>>> >> >> > need >>>>>> >> >> > to call the database here to figure out the size. >>>>>> >> >> > >>>>>> >> >> > Am I doing sonething wrong or have I got to hit the database >>>>>> twice >>>>>> for >>>>>> >> >> > each >>>>>> >> >> > DataProvider render. >>>>>> >> >> > >>>>>> >> >> > Obvously I don't want to hard code a size. Is there any other >>>>>> way ? >>>>>> >> >> > >>>>>> >> >> > Thanks >>>>>> >> >> > Wayne >>>>>> >> >> > >>>>>> >> >> > >>>>>> >> >> >>>>>> >> >> >>>>>> >> >> ----- >>>>>> >> >> Michael Sparer >>>>>> >> >> http://talk-on-tech.blogspot.com >>>>>> >> >> -- >>>>>> >> >> View this message in context: >>>>>> >> >> >>>>>> >> >>>>>> http://www.nabble.com/Is-there-any-other-way--DataProviders-must-hit-the-Db-twice-for-%28possible%29-large-datasets-tp20701684p20702476.html >>>>>> >> >> Sent from the Wicket - User mailing list archive at Nabble.com. >>>>>> >> >> >>>>>> >> >> >>>>>> >> >> >>>>>> --------------------------------------------------------------------- >>>>>> >> >> To unsubscribe, e-mail: [EMAIL PROTECTED] >>>>>> >> >> For additional commands, e-mail: [EMAIL PROTECTED] >>>>>> >> >> >>>>>> >> >> >>>>>> >> > >>>>>> >> >>>>>> >> >>>>>> --------------------------------------------------------------------- >>>>>> >> To unsubscribe, e-mail: [EMAIL PROTECTED] >>>>>> >> For additional commands, e-mail: [EMAIL PROTECTED] >>>>>> >> >>>>>> >> >>>>>> > >>>>>> >>>>>> --------------------------------------------------------------------- >>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED] >>>>>> For additional commands, e-mail: [EMAIL PROTECTED] >>>>>> >>>>>> >>>>> >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: [EMAIL PROTECTED] >>>> For additional commands, e-mail: [EMAIL PROTECTED] >>>> >>>> >>>> >>> >>> >>> ----- >>> ------- >>> Stefan Fußenegger >>> http://talk-on-tech.blogspot.com // looking for a nicer domain ;) >>> -- >>> View this message in context: >>> http://www.nabble.com/Is-there-any-other-way--DataProviders-must-hit-the-Db-twice-for-%28possible%29-large-datasets-tp20701684p20715382.html >>> Sent from the Wicket - User mailing list archive at Nabble.com. >>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: [EMAIL PROTECTED] >>> For additional commands, e-mail: [EMAIL PROTECTED] >>> >>> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: [EMAIL PROTECTED] >> >> >> > > > ----- > ------- > Stefan Fußenegger > http://talk-on-tech.blogspot.com // looking for a nicer domain ;) > -- > View this message in context: > http://www.nabble.com/Is-there-any-other-way--DataProviders-must-hit-the-Db-twice-for-%28possible%29-large-datasets-tp20701684p20723759.html > Sent from the Wicket - User mailing list archive at Nabble.com. > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]