I use TDB, it's much faster. I've never been impressed with triple
store performance...it's always been an issue when trying to create a
consumer facing web portal with Jena.
Most mature Jena utilzations place Jena fairly far back, in tiers,
there was a discussion along these lines at the SFO semantic web users
group.
Neo4j performs better, it's not RDBMS backed but a full fledged graph
database, but you loose some of the inferencing goodness of jena.
Taylor
> --
> You received this message because you are subscribed to the Google Groups "jenabean-dev" group.
> To post to this group, send email to jenabe...@googlegroups.com.
> To unsubscribe from this group, send email to jenabean-dev...@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/jenabean-dev?hl=en.
>
>
//a or its id comes from a webapp param, or by RDF2Bean.load(id)
A aa = new A(a.getId());
B b = new B();
b.setA(aa)
Bean2RDF.save(b)
I got around my problems by using a batching technique with the SDB
model. This gives acceptable performance on write, and is a common
technique (some might say gotcha) for ORM layer performance improvements
also. I was surprised at the relative difference even with a small
Object - like one I described earlier.
So now, for me, each web connection gets a pooled database connection,
which in turn used to build a model to SDB for the duration of that
request. Where the request doesnt spawn other threads that need access
to the model, then enterCriticalSection and method sync doesnt seem to
be neccessary to me - any conflict is ultimately handled by database
ACID heuristics (I hope ! - still need to load test this). That said, Im
not about to change any code until I need to.
I still cant see how an in JVM repository can scale across a "cluster"
or farm of webapps. As you say, blocking on write is arguably just not
good enough, but also replicating an update model to several read-only
models, and having to restart or reload the JVM wont cut the mustard
either. (Tell me if Ive misunderstood you please). At least with a
database you can replicate and not need webapp/jvm restarts, eg MySQL
shards, and this approach is very useful where speed and reactivity
expectations are different dependent on what the client is doing. A
client request to post a deep object can be expected to be a slower
operation than reading a 100 items out of the repository.
I had also started to look at AllegroGraph which uses Http rather than
jdbc to provide access to a repository, but on reflection I cant see how
this would be any better - theres still a need to batch up changes to
avoid chatty network and repository calls, and some of the services
provided by Allegro Ive also tackled with Joseki and LARQ for instance.
Still, it looks interesting and Ive asked Jeremy Carroll for comment on
this.[1] Think hes busy at SemTech tho...
[1] http://tech.groups.yahoo.com/group/jena-dev/message/44330