[Owncloud] Calendar access - speed issues
Florian Hülsmann
fh at cbix.de
Sat Apr 14 12:36:41 UTC 2012
Hi Jonathan,
I had the same problem a year ago when working on another calendar app (unfortunately closed source...) and had to highly optimize the calculation of recurrence events (IMO there are too many possible RRULEs in the iCalendar standard). Here's some ways to go:
* given a start and end time of the currently viewed interval, select only events with dtstart < end
* use a caching table for recurring events (select by month) which is smartly cleaned on every update
* store the recent requests in a table, check for updates, only once pass all events (with rrules) to javascript and include the functionality of When.php in javascript (or better: contribute to fullcalendar!) though this is most work of these provided solutions...
* make When.php even more efficient
Florian
-------- Original-Nachricht --------
Von: Jonathan <jh-owncloud-dev at ninja.org.uk>
Gesendet: Sat Apr 14 14:09:33 MESZ 2012
An: owncloud at kde.org
Betreff: [Owncloud] Calendar access - speed issues
Hi,
I'm trying to use owncloud in anger now, but have come across what seems
to be a speed issue when viewing/retrieving/querying calendar data.
Essentially, I have now imported my calendar entries from my mobile
phone (I have 15 years of calendar data history), and this has degraded
the response times of the web-based calendar app and the DAV interface
as used by the dmfs CalDAV Android app for example, to a point where
they are effectively unusable.
Full details below, but essentially it appears that the calendar/DAV
code is reading in *all* calendar events, then filtering/evaluating them
in software, before returning just the subset that has been asked for.
With this quantity of events, it's taking about a minute to crunch
through that - and this affects the performance of the web interface as
well as calendar sync via DAV.
I would have thought that a simple SELECT query could narrow down the
data before having to crunch through it all - or am I missing something?
A profile of caldav.php's execution is here, showing just how many times
each function call is called for the query below:
http://users.ninja.org.uk/~jonathan/caldav/webgrind-caldav.pdf
I have 4081 calendar entries, of which 291 are repeating events:
SELECT count(*) FROM owncloud.oc_calendar_objects WHERE calendarid=4;
4081
SELECT count(*) from oc_calendar_objects where calendarid=4 and
repeating=1;
291
The issue is that when trying to view calendar events for a reasonable
time period (e.g. the current month), it takes a very long time to
return the results:
localhost$ time curl -k --data-binary @calendar_query.xml \
-H "depth:1" -H "user-agent:caldav" \
-H "content-type: application/xml" -D - \
-X REPORT -u username \
http://localhost/apps/calendar/caldav.php/calendars/username/main
[...]
real 1m0.854s
user 0m0.007s
sys 0m0.031s
(These are figures from just now; last night it returned the data in 37
seconds, but for some reason it's taking longer at the moment)
The calendar query is asking for basically the current month's events:
<?xml version="1.0" encoding="utf-8" ?>
<C:calendar-query xmlns:D="DAV:"
xmlns:C="urn:ietf:params:xml:ns:caldav">
<C:filter>
<C:comp-filter name="VCALENDAR">
<C:comp-filter name="VEVENT">
<C:time-range start="20120401T000000Z"
end="20120501T000000Z"/>
</C:comp-filter>
</C:comp-filter>
</C:filter>
<D:prop>
<D:getetag />
</D:prop>
</C:calendar-query>
In actual fact, there are 34 events in this time period:
SELECT count(*) FROM owncloud.oc_calendar_objects WHERE calendarid=4 and
startdate>'2012-04-01' and enddate<'2012-05-01';
34
plus I expect the 291 repeating events would have to be evaluated, too -
thus making a total of 325 events to process, not 4081. Still not
insignificant, but in theory that should be over 10 times quicker!
I would have thought that the code could (should?) first of all ask the
database for just those events in the relevant time period (plus perhaps
all events with 'repeating=1', as they will need to be evaluated),
rather than just grabbing all events.
Have I missed something?
Many thanks!
Jonathan
_______________________________________________
Owncloud mailing list
Owncloud at kde.org
https://mail.kde.org/mailman/listinfo/owncloud
--
Florian Hülsmann
<fh at cbix.de>
http://cbix.de
More information about the Owncloud
mailing list