- All Implemented Interfaces:
org.apache.jena.atlas.lib.Copyable<TripleStore>,TripleStore
Inner structure:
- three FastHashMap, one for each node (subject, predicate, object) in the triple
- each map maps from a node to a FastTripleBunch
- for up to 16 triples with the same subject, the bunch is an FastArrayBunch, otherwise it is
a FastHashedTripleBunch
- for up to 32 triples with the same predicate and object, the bunch is an FastArrayBunch, otherwise it is
a FastHashedTripleBunch
Other optimizations:
- each triple is added to three FastTripleBunches. To avoid the overhead of calculating the hash code three
times, the hash code is calculated once and passed to the FastTripleBunches.
- the different sizes for the FastArrayBunches are chosen:
- to avoid the memory-overhead of FastHashedTripleBunch for a small number of triples
- the subject bunch is smaller than the predicate and object bunches, because the subject is typically used for
#contains operations, which are faster for FastHashedTripleBunches.
- the predicate and object bunches are the same size, because they are typically used for #find operations, which
typically do not answer #contains operations. Making them much larger might slow down #remove operations on the
graph.
- "ANY_PRE_OBJ" matches primarily use the object bunch unless the size of the bunch is larger than 400 triples. In
that case, there is a secondary lookup in the predicate bunch. Then the smaller bunch is used for the lookup.
Especially for RDF graphs there are some very common object nodes like "true"/"false" or "0"/"1". In that case,
a secondary lookup in the predicate bunch might be faster than a primary lookup in the object bunch.
- FastTripleStore#contains uses FastTripleBunch.anyMatchRandomOrder(java.util.function.Predicate<org.apache.jena.graph.Triple>) for
"ANY_PRE_OBJ" lookups. This is only faster than JenaMapSetCommon.anyMatch(java.util.function.Predicate<E>)
if there are many matches and the set is ordered in an unfavorable way. "ANY_PRE_OBJ" matches usually fall into
this category. This optimization was only needed because the FastTripleBunches does not use the random
order of the triples in #anyMatch but the ordered dense array of triples, which is faster if there are only a few
matches.
- for the FastArrayBunches, the equals method of the triple is not called. Instead, only the two nodes that are
not part of the key of the containing map are compared.
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidAdd a triple to the map.voidclear()Remove all triples from the map.booleanAnswer true if the graph contains any triple matchingt.copy()Return a new triple store that is a copy of this one.intReturn the number of triples in the map.Returns anExtendedIteratorof all triples in the graph matching the given triple match.booleanisEmpty()Return true if the map is empty.voidRemove a triple from the map.stream()Returns aStreamof all triples in the graph.Returns aStreamof Triples matching the given pattern.
-
Constructor Details
-
FastTripleStore
public FastTripleStore()
-
-
Method Details
-
add
Description copied from interface:TripleStoreAdd a triple to the map.- Specified by:
addin interfaceTripleStore- Parameters:
triple- to add
-
remove
Description copied from interface:TripleStoreRemove a triple from the map.- Specified by:
removein interfaceTripleStore- Parameters:
triple- to remove
-
clear
public void clear()Description copied from interface:TripleStoreRemove all triples from the map.- Specified by:
clearin interfaceTripleStore
-
countTriples
public int countTriples()Description copied from interface:TripleStoreReturn the number of triples in the map.- Specified by:
countTriplesin interfaceTripleStore
-
isEmpty
public boolean isEmpty()Description copied from interface:TripleStoreReturn true if the map is empty.- Specified by:
isEmptyin interfaceTripleStore
-
contains
Description copied from interface:TripleStoreAnswer true if the graph contains any triple matchingt.- Specified by:
containsin interfaceTripleStore- Parameters:
tripleMatch- triple match pattern, which may be contained
-
stream
Description copied from interface:TripleStoreReturns aStreamof all triples in the graph. Note:BaseStream.parallel()is supported.- Specified by:
streamin interfaceTripleStore- Returns:
- a stream of triples in this graph.
-
stream
Description copied from interface:TripleStoreReturns aStreamof Triples matching the given pattern. Note:BaseStream.parallel()is supported.- Specified by:
streamin interfaceTripleStore- Parameters:
tripleMatch- triple match pattern- Returns:
- a stream of triples in this graph matching the pattern.
-
find
Description copied from interface:TripleStoreReturns anExtendedIteratorof all triples in the graph matching the given triple match.- Specified by:
findin interfaceTripleStore
-
copy
Description copied from interface:TripleStoreReturn a new triple store that is a copy of this one. Since Nodes and Triples are immutable and shared, the copy can share the same Nodes and Triples.- Specified by:
copyin interfaceorg.apache.jena.atlas.lib.Copyable<TripleStore>- Specified by:
copyin interfaceTripleStore- Returns:
- an independent copy of this store
-