blob: 3d8574af5007fb34970cb297a8c190f2d9d276b6 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<title>Apache Jena - TDB - Store Parameters</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="/css/bootstrap.min.css" rel="stylesheet" media="screen">
<link href="/css/bootstrap-extension.css" rel="stylesheet" type="text/css">
<link href="/css/jena.css" rel="stylesheet" type="text/css">
<link rel="shortcut icon" href="/images/favicon.ico" />
<script src="https://code.jquery.com/jquery-2.2.4.min.js"
integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44="
crossorigin="anonymous"></script>
<script src="/js/jena-navigation.js" type="text/javascript"></script>
<script src="/js/bootstrap.min.js" type="text/javascript"></script>
<script src="/js/improve.js" type="text/javascript"></script>
</head>
<body>
<nav class="navbar navbar-default" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/index.html">
<img class="logo-menu" src="/images/jena-logo/jena-logo-notext-small.png" alt="jena logo">Apache Jena</a>
</div>
<div class="collapse navbar-collapse navbar-ex1-collapse">
<ul class="nav navbar-nav">
<li id="homepage"><a href="/index.html"><span class="glyphicon glyphicon-home"></span> Home</a></li>
<li id="download"><a href="/download/index.cgi"><span class="glyphicon glyphicon-download-alt"></span> Download</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-book"></span> Learn <b class="caret"></b></a>
<ul class="dropdown-menu">
<li class="dropdown-header">Tutorials</li>
<li><a href="/tutorials/index.html">Overview</a></li>
<li><a href="/documentation/fuseki2/index.html">Fuseki Triplestore</a></li>
<li><a href="/documentation/notes/index.html">How-To's</a></li>
<li><a href="/documentation/query/manipulating_sparql_using_arq.html">Manipulating SPARQL using ARQ</a></li>
<li><a href="/tutorials/rdf_api.html">RDF core API tutorial</a></li>
<li><a href="/tutorials/sparql.html">SPARQL tutorial</a></li>
<li><a href="/tutorials/using_jena_with_eclipse.html">Using Jena with Eclipse</a></li>
<li class="divider"></li>
<li class="dropdown-header">References</li>
<li><a href="/documentation/index.html">Overview</a></li>
<li><a href="/documentation/query/index.html">ARQ (SPARQL)</a></li>
<li><a href="/documentation/assembler/index.html">Assembler</a></li>
<li><a href="/documentation/tools/index.html">Command-line tools</a></li>
<li><a href="/documentation/rdfs/">Data with RDFS Inferencing</a></li>
<li><a href="/documentation/geosparql/index.html">GeoSPARQL</a></li>
<li><a href="/documentation/inference/index.html">Inference API</a></li>
<li><a href="/documentation/javadoc.html">Javadoc</a></li>
<li><a href="/documentation/ontology/">Ontology API</a></li>
<li><a href="/documentation/permissions/index.html">Permissions</a></li>
<li><a href="/documentation/extras/querybuilder/index.html">Query Builder</a></li>
<li><a href="/documentation/rdf/index.html">RDF API</a></li>
<li><a href="/documentation/rdfconnection/">RDF Connection - SPARQL API</a></li>
<li><a href="/documentation/io/">RDF I/O</a></li>
<li><a href="/documentation/rdfstar/index.html">RDF-star</a></li>
<li><a href="/documentation/shacl/index.html">SHACL</a></li>
<li><a href="/documentation/shex/index.html">ShEx</a></li>
<li><a href="/documentation/jdbc/index.html">SPARQL over JDBC</a></li>
<li><a href="/documentation/tdb/index.html">TDB</a></li>
<li><a href="/documentation/tdb2/index.html">TDB2</a></li>
<li><a href="/documentation/query/text-query.html">Text Search</a></li>
</ul>
</li>
<li class="drop down">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-book"></span> Javadoc <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="/documentation/javadoc.html">All Javadoc</a></li>
<li><a href="/documentation/javadoc/arq/">ARQ</a></li>
<li><a href="/documentation/javadoc_elephas.html">Elephas</a></li>
<li><a href="/documentation/javadoc/fuseki2/">Fuseki</a></li>
<li><a href="/documentation/javadoc/geosparql/">GeoSPARQL</a></li>
<li><a href="/documentation/javadoc/jdbc/">JDBC</a></li>
<li><a href="/documentation/javadoc/jena/">Jena Core</a></li>
<li><a href="/documentation/javadoc/permissions/">Permissions</a></li>
<li><a href="/documentation/javadoc/extras/querybuilder/">Query Builder</a></li>
<li><a href="/documentation/javadoc/shacl/">SHACL</a></li>
<li><a href="/documentation/javadoc/tdb/">TDB</a></li>
<li><a href="/documentation/javadoc/text/">Text Search</a></li>
</ul>
</li>
<li id="ask"><a href="/help_and_support/index.html"><span class="glyphicon glyphicon-question-sign"></span> Ask</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-bullhorn"></span> Get involved <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="/getting_involved/index.html">Contribute</a></li>
<li><a href="/help_and_support/bugs_and_suggestions.html">Report a bug</a></li>
<li class="divider"></li>
<li class="dropdown-header">Project</li>
<li><a href="/about_jena/about.html">About Jena</a></li>
<li><a href="/about_jena/architecture.html">Architecture</a></li>
<li><a href="/about_jena/citing.html">Citing</a></li>
<li><a href="/about_jena/team.html">Project team</a></li>
<li><a href="/about_jena/contributions.html">Related projects</a></li>
<li><a href="/about_jena/roadmap.html">Roadmap</a></li>
<li class="divider"></li>
<li class="dropdown-header">ASF</li>
<li><a href="http://www.apache.org/">Apache Software Foundation</a></li>
<li><a href="http://www.apache.org/foundation/sponsorship.html">Become a Sponsor</a></li>
<li><a href="http://www.apache.org/licenses/LICENSE-2.0">License</a></li>
<li><a href="http://www.apache.org/security/">Security</a></li>
<li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
</ul>
</li>
<li id="edit"><a href="https://github.com/apache/jena-site/edit/main/source/documentation/tdb/store-parameters.md" title="Edit this page on GitHub"><span class="glyphicon glyphicon-pencil"></span> Edit this page</a></li>
</ul>
</div>
</div>
</nav>
<div class="container">
<div class="row">
<div class="col-md-12">
<div id="breadcrumbs">
<ol class="breadcrumb">
<li><a href='/documentation'>DOCUMENTATION</a></li>
<li><a href='/documentation/tdb'>TDB</a></li>
<li class="active">STORE PARAMETERS</li>
</ol>
</div>
<h1 class="title">TDB - Store Parameters</h1>
<p>TDB (as of version Jena 3.0.0) supports configuration of the
databases when they are first created and each time an application connects
to an existing database. Databases using the default settings built-into
TDB continue to work exactly as before.</p>
<h2 id="setting-store-parameters">Setting Store Parameters</h2>
<p>In TDB, there is exactly one internal object for each dataset in the JVM
and this is shared between all application datasets for that location of
persistent storage.</p>
<p>Setting store parameters is done by setting the internal system state
before any other access to the disk area occurs. It is not possible to have
different setups for the same dataset on disk.</p>
<p><code>StoreParams</code> are set by populating the internal state with the setup
before a application level dataset is created.</p>
<pre><code>TDBFactory.setup(Location location, StoreParams params)
</code></pre>
<p>This must be called before any application calls to get a <code>Dataset</code> (or
<code>DatasetGraph</code>) object otherwise <code>IllegalStateException</code> is thrown by this
function.</p>
<pre><code>Location location = ... ;
StoreParams customParams = ... ;
TDBFactory.setup(location, customParams) ;
Dataset ds = TDBFactory.createDataset(location) ;
...
</code></pre>
<p>It is only possible to change store parameters by expelling the managed
storage by calling <code>TDBFactory.release(Location)</code>. This drops all caching.
Access to the dataset is then a cold start.</p>
<h2 id="per-connect-options">Per-connect Options</h2>
<p>The per-connect options are the ones that can be changed after the database has
been created and can be different each time the application attaches to the
database. A database can have at most one JVM attached to it (see Fuseki
to share a database).</p>
<p>These options do not affect the on-disk structures.</p>
<table>
<thead>
<tr>
<th>JSON key name</th>
<th align="right">Default value</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td>tdb.file_mode</td>
<td align="right">See below</td>
<td></td>
</tr>
<tr>
<td>tdb.node2nodeid_cache_size</td>
<td align="right">100,000</td>
<td>50,000 on 32 bit java</td>
</tr>
<tr>
<td>tdb.nodeid2node_cache_size</td>
<td align="right">500,000</td>
<td>50,000 on 32 bit java</td>
</tr>
<tr>
<td>tdb.node_miss_cache_size</td>
<td align="right">100</td>
<td></td>
</tr>
<tr>
<td>tdb.block_read_cache_size</td>
<td align="right">10000</td>
<td>Only in direct mode</td>
</tr>
<tr>
<td>tdb.block_write_cache_size</td>
<td align="right">2000</td>
<td>Only in direct mode</td>
</tr>
</tbody>
</table>
<h3 id="file-access---mapped-and-direct-modes">File access - &ldquo;mapped&rdquo; and &ldquo;direct&rdquo; modes</h3>
<p>TDB has two modes of operation for accessing block files - &ldquo;mapped&rdquo; and
&ldquo;direct&rdquo;.</p>
<ul>
<li>
<p>&ldquo;mapped&rdquo; uses memory mapped files and so the operating system is managing
caching, flexing the amount of memory for file system cache to balance
demands from other programmes on the same hardware.</p>
</li>
<li>
<p>&ldquo;direct&rdquo; using TDB&rsquo;s own in-heap block caching. It avoids the problem that
addressing is limited to a total of about 1.5Gbytes on 32 bit Java.</p>
</li>
</ul>
<p>By default, TDB uses memory mapped files on 64 bit Java and its own file
caching on 32 bit java.</p>
<p>On Microsoft Windows, &ldquo;mapped&rdquo; databases can not be deleted while the JVM is running on MS
Windows. This is a <a href="http://bugs.java.com/view_bug.do?bug_id=4715154">known issue with Java</a>.</p>
<p>TDB databases are compatible across these file modes. There is no
difference to the file layouts. Memory mapped files may appear larger
because they contain unused space. Some utilities report this in file
size, some do not.</p>
<h3 id="caching-options">Caching options.</h3>
<p>These are the useful tuning options. Only the <tt>node*</tt> choices have
any effect when running in &ldquo;mapped&rdquo; mode.</p>
<p>All these options effect the amount of heap used. The block read/write
cache sizes are tuned to 32 bit Java.</p>
<p>Increasing the Node/NodeId cache sizes on 64 bit machines may be
beneficial.</p>
<h2 id="static-options">Static Options</h2>
<p>While it is possible to customize a database, this is considered to be
experimental. It is possible to corrupt, unrecoverable, existing databases
and create nonsense databases with inappropriate settings. It will be
useful in very few real situations. Not all combinations of index choices
will work. Only the standard layout is supported; alternative schemes are
for experimentation only.</p>
<h3 id="block-size">Block Size</h3>
<p>The block size can not be changed once a database has been created.</p>
<p>While the code attempts to detect block size mismatches, in order to retain
compatibility with existing database, the testing can not be perfect. If
undetected, any update will permanently and irrecoverably damage the
database.</p>
<h2 id="store-parameters-file-format">Store Parameters File Format</h2>
<p>JSON is used for the on-disk record of store parameters, see the example
below. Unspecified options defaults to the for the running setup.</p>
<p>These are default settings for a 64 bit Java:</p>
<pre>
{
"tdb.file_mode" : "mapped" ,
"tdb.block_size" : 8192 ,
"tdb.block_read_cache_size" : 10000 ,
"tdb.block_write_cache_size" : 2000 ,
"tdb.node2nodeid_cache_size" : 100000 ,
"tdb.nodeid2node_cache_size" : 500000 ,
"tdb.node_miss_cache_size" : 100 ,
"tdb.index_node2id" : "node2id" ,
"tdb.index_id2node" : "nodes" ,
"tdb.triple_index_primary" : "SPO" ,
"tdb.triple_indexes" : [ "SPO" , "POS" , "OSP" ] ,
"tdb.quad_index_primary" : "GSPO" ,
"tdb.quad_indexes" : [ "GSPO" , "GPOS" , "GOSP" , "POSG" , "OSPG" , "SPOG" ] ,
"tdb.prefix_index_primary" : "GPU" ,
"tdb.prefix_indexes" : [ "GPU" ] ,
"tdb.file_prefix_index" : "prefixIdx" ,
"tdb.file_prefix_nodeid" : "prefix2id" ,
"tdb.file_prefix_id2node" : "prefixes"
}
</pre>
<h2 id="choosing-the-store-parameters">Choosing the store parameters</h2>
<p>This is the policy applied when creating or reattaching to a database.</p>
<p>If the database location has a parameter file, <code>tdb.cfg</code> then use that.
This is modified by any dynamic options supplied by the application. So to
create a specialized database, one way to do that is to create an empty
directory and put a <code>tdb.cfg</code> in place.</p>
<p>If there is no parameter file and this is a new database, use the
application provided store parameters, or if there are no application
provided parameters, use the system default parameters. If application
supplied parameters are used, write a <code>tdb.cfg</code> file.</p>
<p>Finally, if this is an existing database, with no <code>tdb.cfg</code>, use the system
default modified by any application parameters.</p>
<p>In other words, if there is no <code>tdb.cfg</code> assume the system defaults, except
when creating a database.</p>
<p><em>Modification</em> involves taking one set of store parameters and applying any
dynamic parameters set in the second set. Only explicitly set dynamic
parameters modify the original.</p>
</div>
</div>
</div>
<footer class="footer">
<div class="container" style="font-size:80%" >
<p>
Copyright &copy; 2011&ndash;2022 The Apache Software Foundation, Licensed under the
<a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.
</p>
<p>
Apache Jena, Jena, the Apache Jena project logo, Apache and the Apache feather logos are trademarks of
The Apache Software Foundation.
<br/>
<a href="https://privacy.apache.org/policies/privacy-policy-public.html"
>Apache Software Foundation Privacy Policy</a>.
</p>
</div>
</footer>
<script type="text/javascript">
var link = $('a[href="' + this.location.pathname + '"]');
if (link != undefined)
link.parents('li,ul').addClass('active');
</script>
</body>
</html>