[tracker] libtracker-data: Don't schedule all deletes only because of FTS
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker] libtracker-data: Don't schedule all deletes only because of FTS
- Date: Tue, 21 Jul 2015 21:17:40 +0000 (UTC)
commit a33816f29af384708f1bdf4478f95017dd756796
Author: Carlos Garnacho <carlosg gnome org>
Date: Sun Jul 19 13:35:27 2015 +0200
libtracker-data: Don't schedule all deletes only because of FTS
The limitations in FTS why it made sense to perform the scheduled
delete no longer apply since FTS4 and external content tables
(or rather, we don't need the previous values explicitly).
The scheduled delete is a lot more (if not extremely) thorough,
decomposing the properties and items to be deleted into individual
queries. This has quite an effect on deletes involving a large
number of elements, a query like
delete { ?u a rdfs:Resource; }
where { ?u nie:url ?url .
FILTER (fn:starts-with (?url, ".../linux/"))}
on a linux git checkout indexed through tracker-miner-fs used
to involve 7M sqlite queries, with this fast path it's down to
1.6M (and infinitely less sqlite3_stmt cache misses). In result
the timing is improved substantially, time(1) from that query
on the "tracker sparql" command went from:
real 2m33.377s
user 0m0.021s
sys 0m0.008s
Down to:
real 1m23.625s
user 0m0.021s
sys 0m0.009s
src/libtracker-data/tracker-data-update.c | 11 ++++++-----
1 files changed, 6 insertions(+), 5 deletions(-)
---
diff --git a/src/libtracker-data/tracker-data-update.c b/src/libtracker-data/tracker-data-update.c
index 694cf67..a83036b 100644
--- a/src/libtracker-data/tracker-data-update.c
+++ b/src/libtracker-data/tracker-data-update.c
@@ -2068,9 +2068,11 @@ cache_delete_resource_type_full (TrackerClass *class,
iface = tracker_db_manager_get_db_interface ();
if (!single_type) {
- if (!HAVE_TRACKER_FTS &&
- strcmp (tracker_class_get_uri (class), TRACKER_PREFIX_RDFS "Resource") == 0 &&
+ if (strcmp (tracker_class_get_uri (class), TRACKER_PREFIX_RDFS "Resource") == 0 &&
g_hash_table_size (resource_buffer->tables) == 0) {
+#if HAVE_TRACKER_FTS
+ tracker_db_interface_sqlite_fts_delete_id (iface, resource_buffer->id);
+#endif
/* skip subclass query when deleting whole resource
to improve performance */
@@ -2134,9 +2136,8 @@ cache_delete_resource_type_full (TrackerClass *class,
}
}
- /* bypass buffer if possible
- we need old property values with FTS */
- direct_delete = (!HAVE_TRACKER_FTS && g_hash_table_size (resource_buffer->tables) == 0);
+ /* bypass buffer if possible */
+ direct_delete = g_hash_table_size (resource_buffer->tables) == 0;
/* delete all property values */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]