From b90ba7cd779d17ff5394dca4c283f1fd9b7e65dc Mon Sep 17 00:00:00 2001 From: Barak Michener Date: Sun, 19 Apr 2015 14:59:22 -0400 Subject: [PATCH] don't replace unless strictly better --- graph/mongo/quadstore_iterator_optimize.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/graph/mongo/quadstore_iterator_optimize.go b/graph/mongo/quadstore_iterator_optimize.go index 2120e13..57d257a 100644 --- a/graph/mongo/quadstore_iterator_optimize.go +++ b/graph/mongo/quadstore_iterator_optimize.go @@ -63,6 +63,7 @@ func (qs *QuadStore) optimizeAndIterator(it *iterator.And) (graph.Iterator, bool newAnd.AddSubIterator(it) } } + mongostats := firstmongo.Stats() lset := []graph.LinkageSet{ { @@ -75,6 +76,11 @@ func (qs *QuadStore) optimizeAndIterator(it *iterator.And) (graph.Iterator, bool for _, it := range it.SubIterators() { if it.Type() == graph.LinksTo { lto := it.(*iterator.LinksTo) + // Is it more effective to do the replacement, or let the mongo check the linksto? + ltostats := lto.Stats() + if (ltostats.ContainsCost+mongostats.NextCost)*mongostats.Size > (ltostats.NextCost+mongostats.ContainsCost)*ltostats.Size { + continue + } newLto := NewLinksTo(qs, lto.SubIterators()[0], "quads", lto.Direction(), lset) newAnd.AddSubIterator(newLto) ltocount++