[
https://issues.apache.org/jira/browse/JENA-624?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14991819#comment-14991819
]
ASF GitHub Bot commented on JENA-624:
-------------------------------------
Github user afs commented on a diff in the pull request:
https://github.com/apache/jena/pull/94#discussion_r44024970
--- Diff:
jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/InMemDatasetAssembler.java
---
@@ -0,0 +1,67 @@
+package org.apache.jena.sparql.core.assembler;
+
+import static org.apache.jena.assembler.JA.MemoryDataset;
+import static org.apache.jena.assembler.JA.data;
+import static org.apache.jena.query.DatasetFactory.createTxnMem;
+import static org.apache.jena.riot.RDFDataMgr.loadModel;
+import static org.apache.jena.riot.RDFDataMgr.read;
+import static
org.apache.jena.sparql.core.assembler.AssemblerUtils.setContext;
+import static
org.apache.jena.sparql.core.assembler.DatasetAssemblerVocab.*;
+import static org.apache.jena.sparql.util.FmtUtils.stringForRDFNode;
+import static org.apache.jena.sparql.util.graph.GraphUtils.*;
+
+import java.util.function.Predicate;
+
+import org.apache.jena.assembler.Assembler;
+import org.apache.jena.assembler.Mode;
+import org.apache.jena.assembler.assemblers.AssemblerBase;
+import org.apache.jena.query.Dataset;
+import org.apache.jena.rdf.model.Model;
+import org.apache.jena.rdf.model.RDFNode;
+import org.apache.jena.rdf.model.Resource;
+
+/**
+ * An {@link Assembler} that creates in-memory {@link Dataset}s.
+ *
+ */
+public class InMemDatasetAssembler extends AssemblerBase {
+
+ @Override
+ public Dataset open(final Assembler assembler, final Resource root,
final Mode mode) {
+ checkType(root, MemoryDataset);
+ final Dataset dataset = createTxnMem();
+ setContext(root, dataset.getContext());
+ // Default graph can be defined with ja:graph or ja:defaultGraph
+ final Resource defaultGraphDef =
root.hasProperty(pDefaultGraph) ? getResourceValue(root,
+ pDefaultGraph) : root.hasProperty(pGraph) ?
getResourceValue(root, pGraph) : null;
+ if (defaultGraphDef != null)
dataset.setDefaultModel(retrieve(defaultGraphDef, assembler, mode));
+ // or with ja:data
+ final Predicate<RDFNode> isResource = n -> {
+ if (n.isResource()) return true;
+ throw new DatasetAssemblerException(root, "Not a
resource: " + stringForRDFNode(n));
+ };
+ multiValue(root, data).parallelStream().filter(isResource)
+ .forEach(defaultGraphNode -> read(dataset,
defaultGraphNode.asResource().getURI()));
+
--- End diff --
.parallelStream() does not make sense here.
I think it needs to be sequential and all in the same transaction. The
memory dataset does not support parallel updates. At best, it'll just get
queued on the lock. But then error messages are going to be random order.
> Develop a new in-memory RDF Dataset implementation
> --------------------------------------------------
>
> Key: JENA-624
> URL: https://issues.apache.org/jira/browse/JENA-624
> Project: Apache Jena
> Issue Type: Improvement
> Reporter: Andy Seaborne
> Assignee: A. Soroka
> Labels: gsoc, gsoc2015, java, linked_data, rdf
>
> The current (Jan 2014) Jena in-memory dataset uses a general purpose
> container that works for any storage technology for graphs together with
> in-memory graphs.
> This project would develop a new implementation design specifically for RDF
> datasets (triples and quads) and efficient SPARQL execution, for example,
> using multi-core parallel operations and/or multi-version concurrent
> datastructures to maximise true parallel operation.
> This is a system project suitable for someone interested in datatbase
> implementation, datastructure design and implementation, operating systems or
> distributed systems.
> Note that TDB can operate in-memory using a simulated disk with
> copy-in/copy-out semantics for disk-level operations. It is for faithful
> testing TDB infrastructure and is not designed performance, general in-memory
> use or use at scale. While lesson may be learnt from that system, TDB
> in-memory is not the answer here.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)