Each transaction to Fluree contains either a new RDF triple or an update to an RDF triple already in the db. Fluree converts all subject prefixes to an integer which is used in the hashing of the RDF triples. There are no null values stored in an RDF store due to the nature of the Subject-Predicate-Object format, so null values are suppressed by default.
Fluree indexes are built using an AVL-tree structure and an inverted index using Lucene is available as a configuration option on individual predicates. When
"fullText": true is added to a predicate an additional index is created and managed by Fluree, specifically for the predicates where this option is enabled.
In addition to supporting GraphQL and SPARQL, Fluree has its own query language format called FlureeQL which adds support for some features not exposed via a traditional GQL or SPARQL endpoint, such as historical or block queries. SQL is also supported to a limited extent, at this time.
Fluree uses disk-oriented storage at the ledger tier for more durable storage. However, the indexes which are produced can be replicated to the client and stored locally in-memory for expedited query speeds in cases where the Fluree service worker is implemented.