[tracker-miners/wip/carlosg/delete-perf: 5/5] tracker-miner-fs: Speed up delete of individual files
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker-miners/wip/carlosg/delete-perf: 5/5] tracker-miner-fs: Speed up delete of individual files
- Date: Fri, 25 Dec 2020 14:35:30 +0000 (UTC)
commit f88e926b325e4e0142470e8cbaf1f8dcb320e9f8
Author: Carlos Garnacho <carlosg gnome org>
Date: Mon Dec 21 12:37:24 2020 +0100
tracker-miner-fs: Speed up delete of individual files
Querying the graphs that contain some data for the given file may be a bit
expensive, perhaps not that much noticeable during individual deletes, but
gets to show with many updates batched together.
It is sensibly faster to provide all known graphs to the query, and let
the individual DELETE operations do nothing in those graphs that don't have
any data for the file.
Fixes: https://gitlab.gnome.org/GNOME/tracker/-/issues/182
src/miners/fs/tracker-miner-files.c | 82 ++++++++++++++++++++++++++-----------
1 file changed, 58 insertions(+), 24 deletions(-)
---
diff --git a/src/miners/fs/tracker-miner-files.c b/src/miners/fs/tracker-miner-files.c
index ce5a6ed59..45fc45fc9 100644
--- a/src/miners/fs/tracker-miner-files.c
+++ b/src/miners/fs/tracker-miner-files.c
@@ -2238,36 +2238,70 @@ add_delete_sparql (GFile *file,
g_return_if_fail (delete_self || delete_children);
uri = g_file_get_uri (file);
- sparql = g_string_new ("DELETE { "
- " GRAPH " DEFAULT_GRAPH " {"
- " ?f a rdfs:Resource . "
- " }"
- " GRAPH ?g {"
- " ?f a rdfs:Resource . "
- " ?ie a rdfs:Resource . "
- " }"
- "} WHERE {"
- " GRAPH " DEFAULT_GRAPH " {"
- " ?f a rdfs:Resource ; "
- " nie:url ?u . "
- " }"
- " GRAPH ?g {"
- " ?f a rdfs:Resource . "
- " OPTIONAL { ?ie nie:isStoredAs ?f } . "
- " }"
- " FILTER (");
-
- if (delete_self)
- g_string_append_printf (sparql, "?u = \"%s\" ", uri);
+
+ sparql = g_string_new (NULL);
if (delete_children) {
- if (delete_self)
- g_string_append (sparql, " || ");
+ sparql = g_string_new ("DELETE { "
+ " GRAPH " DEFAULT_GRAPH " {"
+ " ?f a rdfs:Resource . "
+ " }"
+ " GRAPH ?g {"
+ " ?f a rdfs:Resource . "
+ " ?ie a rdfs:Resource . "
+ " }"
+ "} WHERE {"
+ " GRAPH " DEFAULT_GRAPH " {"
+ " ?f a rdfs:Resource ; "
+ " nie:url ?u . "
+ " }"
+ " GRAPH ?g {"
+ " ?f a rdfs:Resource . "
+ " OPTIONAL { ?ie nie:isStoredAs ?f } . "
+ " }"
+ " FILTER (");
g_string_append_printf (sparql, "STRSTARTS (?u, \"%s/\")", uri);
+
+ g_string_append (sparql, ")}");
+ }
+
+ if (delete_self) {
+ const gchar *data_graphs[] = {
+ "tracker:Audio",
+ "tracker:Documents",
+ "tracker:Pictures",
+ "tracker:Software",
+ "tracker:Video",
+ "tracker:FileSystem",
+ };
+ gint i;
+
+ for (i = 0; i < G_N_ELEMENTS (data_graphs); i++) {
+ g_string_append_printf (sparql,
+ "DELETE { "
+ " GRAPH %s {"
+ " <%s> a rdfs:Resource . "
+ " ?ie a rdfs:Resource . "
+ " }"
+ "} WHERE {"
+ " GRAPH " DEFAULT_GRAPH " {"
+ " <%s> a rdfs:Resource . "
+ " OPTIONAL { "
+ " GRAPH %s {"
+ " ?ie nie:isStoredAs <%s> "
+ " }"
+ " }"
+ " }"
+ "} ",
+ data_graphs[i],
+ uri,
+ uri,
+ data_graphs[i],
+ uri);
+ }
}
- g_string_append (sparql, ")}");
g_free (uri);
tracker_sparql_buffer_push_sparql (buffer, file, sparql->str);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]