HI Evgeny, Yes, Mnesia does not have a 'count' function, so I did a 'quick and dirty' to implement the boss_db functionality. It was not something I needed so I did not worry about it too much at the time. (Actually I thought I was the only one using Mnesia!)
Short of enhancing Mnesia itself I am not sure how to improve this. :-( g On 23 January 2014 20:40, Evgeny M <[email protected]> wrote: > Pagination with mnesia could be quite tricky. > mnesia adapter contains the following function: > count(Conn, Type, Conditions) -> > length(find(Conn, Type, Conditions, all, 0, id, ascending)). > > So every time you do Count on mnesia boss_db will load full query result > in memory, with all data of all fields. > > And as you do boss_db:find(Model, Conditions, ArgList) again, you will do > the same query and load the same data again. > > You may not notice this on developers box when there's only so much of > data, but on real server you will have huge hit on performance and memory. > > Of course there's no such problem on postgres or mysql, but > count(*)..where ... is quite heavy operation even in RDBMS world > > среда, 22 января 2014 г., 19:17:20 UTC+4 пользователь David Welton написал: >> >> Would it be worth including something like this directly in boss_db ? >> >> paginate(Model, Conditions, Args) -> >> Page = proplists:get_value(page, Args, 1), >> PageSize = proplists:get_value(page_size, Args, ?DEFAULT_PAGE_SIZE), >> ArgList = proplists:delete(page_size, proplists:delete(page, Args)) >> ++ >> [{offset, PageSize * (Page - 1)}, {limit, PageSize}], >> Total = boss_db:count(Model, Conditions), >> TotalPages = (Total div PageSize) + (case Total rem PageSize of >> 0 -> 0; >> _ -> 1 >> end), >> {Page, TotalPages, boss_db:find(Model, Conditions, ArgList)}. >> >> -- >> David N. Welton >> >> http://www.welton.it/davidw/ >> >> http://www.dedasys.com/ >> > -- > You received this message because you are subscribed to the Google Groups > "ChicagoBoss" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > Visit this group at http://groups.google.com/group/chicagoboss. > To view this discussion on the web visit > https://groups.google.com/d/msgid/chicagoboss/abd60772-8956-49b6-ba66-273e057fb286%40googlegroups.com > . > For more options, visit https://groups.google.com/groups/opt_out. > -- You received this message because you are subscribed to the Google Groups "ChicagoBoss" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. Visit this group at http://groups.google.com/group/chicagoboss. To view this discussion on the web visit https://groups.google.com/d/msgid/chicagoboss/CAKF5fiCtr9iQqtCoJaMheCCHcvetOCKwgFQmsLt-wLJV6EnM_w%40mail.gmail.com. For more options, visit https://groups.google.com/groups/opt_out.
