This seemed to be the most sensible way to manipulate the database. After all, Datomic follows the same paradigm, where connections are executed against, and new values of the database are created that can be retrieved from the connection
I was thinking more for transient usecases, i.e. where you just want to compute a value… e.g. load some triples into asami, expand the graph with naga rules, and then spit the data or a query result out… without having to engage in resource management etc
e.g. possibly also in the context of a http request… i.e. querying data out of a sparql triple store with constructs, but using asami perhaps with naga in place of a Jena/RDF4j model to build a response.
In that case, I would just use a graph URI with asami:mem://
for the scheme. It’s basically doing exactly what you just said.
(admittedly, the asami:local://
scheme is still a work in progress. So you HAVE to use asami:mem://
for now anyway).
There’s no “resource management”, except that the connection holds an atom for the vector of DBs, and when you do a transaction like Naga does, then it just calls update
on the maps that make up the latest DB, and does a conj
to the vector in the connections atom.
My colleagues are doing this all the time. Create a memory graph, throw data into it, and use queries to pull out exactly what they want. Then they throw it all away. 😱
I was a bit shocked to see them do it, but it’s fast, and they find it useful to do!