here mnesia count with select https://github.com/mihawk/boss_db/commit/cf5e1ce91477fce731d0c4f504cad55141b09698
2014-01-23 22:38 GMT+08:00 Samuel Rose <[email protected]>: > On Thu, Jan 23, 2014 at 8:51 AM, Graeme Defty <[email protected]> > wrote: > > 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 > > > > > > > > For mnesia, I wonder if > http://www.erlang.org/doc/apps/mnesia/Mnesia_chap4.html#id74480 > pattern matching can help here? First to limit, then to select where > pattern does not match the first id's in the first limit. > > Just a thought anyway. > > > > > > > > > > > > > > > > > > > > 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. > > -- > 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/CA%2BH5g6oBmrkN3yFkK8CiC4fANNLJ%3DGEYPCMWseOi5kXm1tJq9g%40mail.gmail.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/CAB-OfhkBf06kQ9yEJE93d-ujfdvv9wku5suCef81tVCmihy9NQ%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
