afs opened a new issue, #1697:
URL: https://github.com/apache/jena/issues/1697

   ### Version
   
   4.7.0
   
   ### Feature
   
   A buffering dataset wraps another dataset. It collects changes (add and 
delete for triples, quads and prefixes), presents a dataset API that is the 
base dataset as if the chnages had been applied. It has a flush operation that 
executes the changes on the base dataset (normally, as a single transaction).
   
   Use case: _adding true transactional abort to any dataset_
   
   General purpose datasets can not provide MR+SW transaction and can not 
provide abort. (see 
[`DatasetGraph.supportsTransactionAbort`](https://jena.apache.org/documentation/javadoc/arq/org.apache.jena.arq/org/apache/jena/sparql/core/DatasetGraph.html#supportsTransactionAbort()).
 By delaying changes to the underlying dataset until a commit is performed, 
abort can be provided by using a buffered dataset that stores the changes until 
the commit; an abort is simply forget the buffered changes.
   
   Use case: _batching many small transactions into a single transaction on the 
base storage_
   
   Many small updates (add/delete one or two triples) can result in more work 
being in the transaction mechanism than in the updates themselves. A buffered 
dataset (with an associated journal to make each small transaction safe - see 
"RDF Patch".) 
   
   Use case: _Rule-derived (inference) overlay_
   
   The buffering layer can keep inferred triples separately from the base data.
   
   _Notes_
   
   * For the use cases above, the buffering dataset uses JVM heap to store the 
ongoing differences. If larger than that, it is probably better to use a proper 
persistent dataset directly.
   
   * With a switchable buffering dataset, the update of the underlying dataset 
may be done asynchronously.
   
   Interfaces: `DatasetGraphBuffering`, `BufferingCtl`.
   
   Classes: `BufferingDatasetGraph`, `BufferingGraph`, `BufferingPrefixMap`, 
`BufferingPrefixMapping`
   
   Once the machinery design is done, providing a standalone graph case is 
simple. The general design is a pattern where there is an in-memory 
`DatasetGraph` that records additions, and a set of items deleted, that is used 
to filter the `find()` iterator.
   
   
   ### Are you interested in contributing a solution yourself?
   
   Yes


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to