You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jena.apache.org by Loic R Julien <lj...@us.ibm.com> on 2011/11/16 18:21:22 UTC

TDB Model - Best practices

Hi,

1/ I currently only support a single persistent location: this.model = 
TDBFactory.createModel(getPersistentLocation ()); for my TDB Model. My 
Model is serving requests from many clients concurrently.
Some earlier posts seem to recommend that for a single location, there 
should only be a single instance of the Model always up and running that 
serve all client's requests (with TDB.sync on update). 
        -> I would like to confirm that this is the best practice.

2/ While I implemented MRSW, it sounds that there should be some common 
knowledge on best practices. I have seen this 
https://cwiki.apache.org/confluence/display/JENA/TxTDB but this is 
incomplete at this stage.
        -> Any documentation/sample written on this? 

Thanks for your help,
~Loic

Re: TDB Model - Best practices

Posted by Andy Seaborne <an...@apache.org>.
On 17/11/11 15:58, Loic R Julien wrote:
> Hi Andy,
>
> Thank you for your answer. I have added a few questions below [Loic1]
>
>> Hi,
>>
>> 1/ I currently only support a single persistent location: this.model =
>> TDBFactory.createModel(getPersistentLocation ()); for my TDB Model.
>
>> [Andy]: (minor) It is better to use Datasets, not Models.
>
>>> [Loic1]: Is this to avoid the hidden, shared dataset? Are you
> suggesting I do
>>> TDBFactory.createDataset(Location) and get the Default Model instead?
> Thanks for
>>> clarifying the extent of your comment so that I make sure I have the
> right
>>> architecture.

Yes and yes.

It is effective what the implementation does these days - but if you 
have the dataset it can be useful for other models.

>> My
>> Model is serving requests from many clients concurrently.
>> Some earlier posts seem to recommend that for a single location, there
>> should only be a single instance of the Model always up and running that
>> serve all client's requests (with TDB.sync on update).
>>           ->   I would like to confirm that this is the best practice.
>
> There must only be one database engine per location ... but TDBFactory
> sorts that out for you.  If you ask TDBFactory for a dataset (or model)
> at a location, it returns a suitably shared instance.  The actual Java
> object will be different but internally it refers to the shared objects.
>
> Use from multiple JVMs is not supported (use Fuseki).
>
>> 2/ While I implemented MRSW, it sounds that there should be some common
>> knowledge on best practices. I have seen this
>> https://cwiki.apache.org/confluence/display/JENA/TxTDB but this is
>> incomplete at this stage.
>>           ->   Any documentation/sample written on this?
>
> TDB trunk (v0.9.0) is transactional if you ask for a transactional
> dataset.  In 0.9.0, existing usage will act as before; you need to ask
> for a transactional database.
>
> http://openjena.org/wiki/TDB/Transactions shows the internal APIs -
> there will be (actually,there is in trunk/) TDBFactoryTxn.
>
> This will be in the next release, along with documentation.
>
>>> [Loic1] OK, great. Thank you. Just got the code out of Trunk. Is there
> a planned dated for 0.9.0 so that I know if this
>>> would be suitable for us?

"soon" and "ASAP".

IBM having been helping test it.

	Andy

>
>                   Andy
>
>>
>> Thanks for your help,
>> ~Loic
>
>
>


Re: TDB Model - Best practices

Posted by Loic R Julien <lj...@us.ibm.com>.
Hi Andy,

Thank you for your answer. I have added a few questions below [Loic1]

> Hi,
>
> 1/ I currently only support a single persistent location: this.model =
> TDBFactory.createModel(getPersistentLocation ()); for my TDB Model.

> [Andy]: (minor) It is better to use Datasets, not Models.

>> [Loic1]: Is this to avoid the hidden, shared dataset? Are you 
suggesting I do 
>> TDBFactory.createDataset(Location) and get the Default Model instead? 
Thanks for 
>> clarifying the extent of your comment so that I make sure I have the 
right 
>> architecture.

> My
> Model is serving requests from many clients concurrently.
> Some earlier posts seem to recommend that for a single location, there
> should only be a single instance of the Model always up and running that
> serve all client's requests (with TDB.sync on update).
>          ->  I would like to confirm that this is the best practice.

There must only be one database engine per location ... but TDBFactory 
sorts that out for you.  If you ask TDBFactory for a dataset (or model) 
at a location, it returns a suitably shared instance.  The actual Java 
object will be different but internally it refers to the shared objects.

Use from multiple JVMs is not supported (use Fuseki).

> 2/ While I implemented MRSW, it sounds that there should be some common
> knowledge on best practices. I have seen this
> https://cwiki.apache.org/confluence/display/JENA/TxTDB but this is
> incomplete at this stage.
>          ->  Any documentation/sample written on this?

TDB trunk (v0.9.0) is transactional if you ask for a transactional 
dataset.  In 0.9.0, existing usage will act as before; you need to ask 
for a transactional database.

http://openjena.org/wiki/TDB/Transactions shows the internal APIs - 
there will be (actually,there is in trunk/) TDBFactoryTxn.

This will be in the next release, along with documentation.

>> [Loic1] OK, great. Thank you. Just got the code out of Trunk. Is there 
a planned dated for 0.9.0 so that I know if this
>> would be suitable for us?

                 Andy

>
> Thanks for your help,
> ~Loic



Re: TDB Model - Best practices

Posted by Andy Seaborne <an...@apache.org>.
On 16/11/11 17:21, Loic R Julien wrote:
> Hi,
>
> 1/ I currently only support a single persistent location: this.model =
> TDBFactory.createModel(getPersistentLocation ()); for my TDB Model.

(minor) It is better to use Datasets, not Models.

> My
> Model is serving requests from many clients concurrently.
> Some earlier posts seem to recommend that for a single location, there
> should only be a single instance of the Model always up and running that
> serve all client's requests (with TDB.sync on update).
>          ->  I would like to confirm that this is the best practice.

There must only be one database engine per location ... but TDBFactory 
sorts that out for you.  If you ask TDBFactory for a dataset (or model) 
at a location, it returns a suitably shared instance.  The actual Java 
object will be different but internally it refers to the shared objects.

Use from multiple JVMs is not supported (use Fuseki).

> 2/ While I implemented MRSW, it sounds that there should be some common
> knowledge on best practices. I have seen this
> https://cwiki.apache.org/confluence/display/JENA/TxTDB but this is
> incomplete at this stage.
>          ->  Any documentation/sample written on this?

TDB trunk (v0.9.0) is transactional if you ask for a transactional 
dataset.  In 0.9.0, existing usage will act as before; you need to ask 
for a transactional database.

http://openjena.org/wiki/TDB/Transactions shows the internal APIs - 
there will be (actually,there is in trunk/) TDBFactoryTxn.

This will be in the next release, along with documentation.

	Andy

>
> Thanks for your help,
> ~Loic