Trever Fischer has proposed merging lp:~tdfischer/zeitgeist/event-caching into lp:zeitgeist.
Requested reviews: Zeitgeist Framework Team (zeitgeist) For more details, see: https://code.launchpad.net/~tdfischer/zeitgeist/event-caching/+merge/97450 Implements a LRU cache for events, to reduce hitting the database on every request. -- https://code.launchpad.net/~tdfischer/zeitgeist/event-caching/+merge/97450 Your team Zeitgeist Framework Team is requested to review the proposed merge of lp:~tdfischer/zeitgeist/event-caching into lp:zeitgeist.
=== modified file 'extensions/fts++/Makefile.am' --- extensions/fts++/Makefile.am 2012-02-12 20:17:52 +0000 +++ extensions/fts++/Makefile.am 2012-03-14 16:35:57 +0000 @@ -42,6 +42,7 @@ ontology-uris.vala \ mimetype.vala \ ext-dummies.vala \ + event-cache.vala \ $(NULL) libzeitgeist_internal_la_SOURCES = \ === modified file 'src/Makefile.am' --- src/Makefile.am 2012-02-15 19:55:59 +0000 +++ src/Makefile.am 2012-03-14 16:35:57 +0000 @@ -48,6 +48,7 @@ ontology.vala \ ontology-uris.vala \ mimetype.vala \ + event-cache.vala \ $(NULL) zeitgeist_daemon_SOURCES = \ === modified file 'src/db-reader.vala' --- src/db-reader.vala 2012-03-14 12:31:51 +0000 +++ src/db-reader.vala 2012-03-14 16:35:57 +0000 @@ -45,6 +45,8 @@ protected TableLookup mimetypes_table; protected TableLookup actors_table; + protected EventCache cache; + public DbReader () throws EngineError { Object (database: new Zeitgeist.SQLite.Database.read_only ()); @@ -59,6 +61,8 @@ manifestations_table = new TableLookup (database, "manifestation"); mimetypes_table = new TableLookup (database, "mimetype"); actors_table = new TableLookup (database, "actor"); + + cache = new EventCache(); } protected Event get_event_from_row (Sqlite.Statement stmt, uint32 event_id) @@ -117,7 +121,20 @@ if (event_ids.length == 0) return new GenericArray<Event?> (); - var sql_event_ids = database.get_sql_string_from_event_ids (event_ids); + var results = new GenericArray<Event?> (); + uint32[] uncached_ids = new uint32[0]; + for(int i = 0; i < event_ids.length; i++) + { + Event? e = cache.get_event (event_ids[i]); + if (e == null) { + results.set(i, e); + } else { + uncached_ids.resize(uncached_ids.length+1); + uncached_ids[uncached_ids.length-1] = event_ids[i]; + } + } + + var sql_event_ids = database.get_sql_string_from_event_ids (uncached_ids); string sql = """ SELECT * FROM event_view WHERE id IN (%s) @@ -149,12 +166,13 @@ } // Sort events according to the sequence of event_ids - var results = new GenericArray<Event?> (); results.length = event_ids.length; int i = 0; foreach (var id in event_ids) { - results.set(i++, events.lookup (id)); + Event e = events.lookup (id); + cache.cache_event (e); + results.set(i++, e); } return results; === modified file 'test/direct/Makefile.am' --- test/direct/Makefile.am 2012-02-15 18:55:42 +0000 +++ test/direct/Makefile.am 2012-03-14 16:35:57 +0000 @@ -11,6 +11,7 @@ TESTS = \ datamodel-test \ + event-cache-test \ marshalling-test \ mimetype-test \ query-operators-test \ @@ -36,8 +37,12 @@ $(top_srcdir)/src/ontology.vala \ $(top_srcdir)/src/ontology-uris.vala \ $(top_srcdir)/src/mimetype.vala \ + $(top_srcdir)/src/event-cache.vala \ $(NULL) +event-cache-test: event-cache-test.vala $(SRC_FILES) + $(VALA_V)$(VALAC) $(VALAFLAGS) -o $@ $^ + datamodel-test: datamodel-test.vala $(SRC_FILES) $(VALA_V)$(VALAC) $(VALAFLAGS) -o $@ $^ @@ -66,11 +71,13 @@ query-operators-test \ table-lookup-test \ where-clause-test \ + event-cache-test \ $(NULL) EXTRA_DIST = \ assertions.vapi \ datamodel-test.vala \ + event-cache-test.vala \ marshalling-test.vala \ mimetype-test.vala \ query-operators-test.vala \
_______________________________________________ Mailing list: https://launchpad.net/~zeitgeist Post to : zeitgeist@lists.launchpad.net Unsubscribe : https://launchpad.net/~zeitgeist More help : https://help.launchpad.net/ListHelp