> On 31 May 2017, at 12:15, Guillaume Delhumeau <guillaume.delhum...@xwiki.com> 
> wrote:
> 
> Help me to decide!
> 
> TL;DR:
> 
> * I need to know if performing a query on the database for each user who
> want to receive an email with all the notifications, is a scalability issue
> (in a job context).
> * If it's not an issue, I can implement the "naïve" solution which requires
> less development.
> 
> Full message:
> 
> Status:
> * notifications are displayed on the top menu when you browse the wiki.
> * notifications are displayed differently for each individual user
> according to their preferences (filters on event type, on locations,
> etc...).
> * similar notifications are grouped together into "composite notifications".
> * there is only a few notifications displayed (5 by default).
> 
> Objective:
> * send an email periodically (every hour, every day, every week) according
> to the user preferences with ALL events that happened during the last
> period of time, but still according to the user preferences.

Don’t forget the realtime email notification use case too!

Thanks
-Vincent

> Inspiration:
> * the watchlist gets ALL events that happened during the last period of time
> * then, for each user, remove the events which the user is not interested in
> * Benefit: only one query to get the events from the database for all users
> 
> Problems:
> * in the notifications, I have introduced a NotificationFilter role the
> make possible to inject some SQL in the query to get the events according
> to the user preferences. I call this "pre-filters".
> ** it means we generate a unique request for each individual user, so if we
> send a mail to 1000 users, we will have 1000 requests to the database.
> 
> I wonder if it's a non-problem or a big scability issue. Because even if
> the whole job that send emails take ~10 minutes, it does not matter. It's
> not a realtime thing.
> 
> For the records, NotificationFilter have "post-filters" too, that perform
> check on the event itself (for example checking the permissions, etc...).
> 
> Alternatives:
> * just like the watchlist, perform a very generic query on the database to
> get all the events that happened during the last period of time
> * then for each user, use only the "post-filters" to remove events the user
> don't care of
> 
> Problem:
> * it means the pre-filters that make sense in the notification use-case
> cannot be used for emails. Developers must be aware of this.
> * it requires some refactoring of the code that group similar notifications.
> 
> Question:
> Should I go with the "naive" solution, ie for each user get all
> notifications and send a mail, or should I go with the "only 1 query to the
> database for all users" version?
> 
> Thanks,
> 
> -- 
> Guillaume Delhumeau (guillaume.delhum...@xwiki.com)
> Research & Development Engineer at XWiki SAS
> Committer on the XWiki.org project

Reply via email to