org.apache.jena.tdb.setup.StoreParams Maven / Gradle / Ivy
Show all versions of jena-tdb Show documentation
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jena.tdb.setup;
import java.util.Objects ;
import org.apache.jena.tdb.base.block.FileMode ;
import org.apache.jena.tdb.index.IndexParams ;
import org.apache.jena.tdb.setup.StoreParamsBuilder.Item ;
/** System parameters for a TDB database instance.
*
* Some parameters can be changed from run to run
* and some parameters can only be changed at the point the database is
* created.
*
* Getting parameters settings wrong can destroy a database.
* Alternating the block size is not encouraged and should only be
* done if necessary. It can silently destroy a database if set
* to a different value than that used to create the database. The
* default value of 8 kilobytes is good for almost use.
*
* @see StoreParamsBuilder for constructing StoreParams
* @see StoreParamsConst for default values.
*/
public class StoreParams implements IndexParams, StoreParamsDynamic
{
/* These are items you can change JVM to JVM */
/*package*/ final Item fileMode ;
/*package*/ final Item blockReadCacheSize ;
/*package*/ final Item blockWriteCacheSize ;
/*package*/ final Item Node2NodeIdCacheSize ;
/*package*/ final Item NodeId2NodeCacheSize ;
/*package*/ final Item NodeMissCacheSize ;
/* These are items affect database layout and
* only can be applied when a database is created.
* They do not affect existing databases.
* If you want to, say, change the index structure,
* you'll need to use the index tools.
*/
/*package*/ final Item blockSize ;
/*package*/ final Item indexNode2Id ;
/*package*/ final Item indexId2Node ;
/*package*/ final Item primaryIndexTriples ;
/*package*/ final Item tripleIndexes ;
/*package*/ final Item primaryIndexQuads ;
/*package*/ final Item quadIndexes ;
/*package*/ final Item primaryIndexPrefix ;
/*package*/ final Item prefixIndexes ;
/*package*/ final Item indexPrefix ;
/*package*/ final Item prefixNode2Id ;
/*package*/ final Item prefixId2Node ;
/** Build StoreParams, starting from system defaults.
*
* @return StoreParamsBuilder
*/
public static StoreParamsBuilder builder() { return StoreParamsBuilder.create() ; }
/** Build StoreParams, starting from given default values.
*
* @return StoreParamsBuilder
*/
public static StoreParamsBuilder builder(StoreParams params) { return StoreParamsBuilder.create(params) ; }
/*package*/ StoreParams(Item fileMode, Item blockSize,
Item blockReadCacheSize, Item blockWriteCacheSize,
Item node2NodeIdCacheSize, Item nodeId2NodeCacheSize,
Item nodeMissCacheSize,
Item indexNode2Id, Item indexId2Node,
Item primaryIndexTriples, Item tripleIndexes,
Item primaryIndexQuads, Item quadIndexes,
Item primaryIndexPrefix, Item prefixIndexes,
Item indexPrefix, Item prefixNode2Id, Item prefixId2Node) {
this.fileMode = fileMode ;
this.blockSize = blockSize ;
this.blockReadCacheSize = blockReadCacheSize ;
this.blockWriteCacheSize = blockWriteCacheSize ;
this.Node2NodeIdCacheSize = node2NodeIdCacheSize ;
this.NodeId2NodeCacheSize = nodeId2NodeCacheSize ;
this.NodeMissCacheSize = nodeMissCacheSize ;
this.indexNode2Id = indexNode2Id ;
this.indexId2Node = indexId2Node ;
this.primaryIndexTriples = primaryIndexTriples ;
this.tripleIndexes = tripleIndexes ;
this.primaryIndexQuads = primaryIndexQuads ;
this.quadIndexes = quadIndexes ;
this.primaryIndexPrefix = primaryIndexPrefix ;
this.prefixIndexes = prefixIndexes ;
this.indexPrefix = indexPrefix ;
this.prefixNode2Id = prefixNode2Id ;
this.prefixId2Node = prefixId2Node ;
}
/** The system default settings. This is the normal set to use.
* It is the set of values used when no StoreParams is provided,
* which is the normal usage.
*/
public static StoreParams getDftStoreParams() {
return StoreParamsConst.dftStoreParams ;
}
/** A {@code StoreParams} that provides a smaller
* in-JVM foot print. This is compatible with
* any database but it is wise to use this consistently,
* that is, use when created and when opened later.
* It reduces cache sizes and runs the database in "direct"
* file mode so as not to use memory mapped files
* in addition to the JVM space.
*/
public static StoreParams getSmallStoreParams() {
return StoreParamsConst.smallStoreParams ;
}
@Override
public FileMode getFileMode() {
return fileMode.value ;
}
@Override
public boolean isSetFileMode() {
return fileMode.isSet ;
}
@Override
public Integer getBlockSize() {
return blockSize.value ;
}
@Override
public Integer getBlockReadCacheSize() {
return blockReadCacheSize.value ;
}
@Override
public boolean isSetBlockReadCacheSize() {
return blockReadCacheSize.isSet ;
}
@Override
public Integer getBlockWriteCacheSize() {
return blockWriteCacheSize.value ;
}
@Override
public boolean isSetBlockWriteCacheSize() {
return blockWriteCacheSize.isSet ;
}
@Override
public Integer getNode2NodeIdCacheSize() {
return Node2NodeIdCacheSize.value ;
}
@Override
public boolean isSetNodeId2NodeCacheSize() {
return NodeId2NodeCacheSize.isSet ;
}
@Override
public boolean isSetNode2NodeIdCacheSize() {
return Node2NodeIdCacheSize.isSet ;
}
@Override
public Integer getNodeId2NodeCacheSize() {
return NodeId2NodeCacheSize.value ;
}
@Override
public Integer getNodeMissCacheSize() {
return NodeMissCacheSize.value ;
}
@Override
public boolean isSetNodeMissCacheSize() {
return NodeMissCacheSize.isSet ;
}
public String getIndexNode2Id() {
return indexNode2Id.value ;
}
public String getIndexId2Node() {
return indexId2Node.value ;
}
public String getPrimaryIndexTriples() {
return primaryIndexTriples.value ;
}
public String[] getTripleIndexes() {
return tripleIndexes.value ;
}
public String getPrimaryIndexQuads() {
return primaryIndexQuads.value ;
}
public String[] getQuadIndexes() {
return quadIndexes.value ;
}
public String getPrimaryIndexPrefix() {
return primaryIndexPrefix.value ;
}
public String[] getPrefixIndexes() {
return prefixIndexes.value ;
}
public String getIndexPrefix() {
return indexPrefix.value ;
}
public String getPrefixNode2Id() {
return prefixNode2Id.value ;
}
public String getPrefixId2Node() {
return prefixId2Node.value ;
}
@Override
public String toString() {
StringBuilder buff = new StringBuilder() ;
fmt(buff, "fileMode", getFileMode().toString(), fileMode.isSet) ;
fmt(buff, "blockSize", getBlockSize(), blockSize.isSet) ;
fmt(buff, "readCacheSize", getBlockReadCacheSize(), blockReadCacheSize.isSet) ;
fmt(buff, "writeCacheSize", getBlockWriteCacheSize(), blockWriteCacheSize.isSet) ;
fmt(buff, "Node2NodeIdCacheSize", getNode2NodeIdCacheSize(), Node2NodeIdCacheSize.isSet) ;
fmt(buff, "NodeId2NodeCacheSize", getNodeId2NodeCacheSize(), NodeId2NodeCacheSize.isSet) ;
fmt(buff, "NodeMissCacheSize", getNodeMissCacheSize(), NodeMissCacheSize.isSet) ;
fmt(buff, "indexNode2Id", getIndexNode2Id(), indexNode2Id.isSet) ;
fmt(buff, "indexId2Node", getIndexId2Node(), indexId2Node.isSet) ;
fmt(buff, "primaryIndexTriples", getPrimaryIndexTriples(), primaryIndexTriples.isSet) ;
fmt(buff, "tripleIndexes", getTripleIndexes(), tripleIndexes.isSet) ;
fmt(buff, "primaryIndexQuads", getPrimaryIndexQuads(), primaryIndexQuads.isSet) ;
fmt(buff, "quadIndexes", getQuadIndexes(), quadIndexes.isSet) ;
fmt(buff, "primaryIndexPrefix", getPrimaryIndexPrefix(), primaryIndexPrefix.isSet) ;
fmt(buff, "prefixIndexes", getPrefixIndexes(), prefixIndexes.isSet) ;
fmt(buff, "indexPrefix", getIndexPrefix(), indexPrefix.isSet) ;
fmt(buff, "prefixNode2Id", getPrefixNode2Id(), prefixNode2Id.isSet) ;
fmt(buff, "prefixId2Node", getPrefixId2Node(), prefixId2Node.isSet) ;
return buff.toString() ;
}
private void fmt(StringBuilder buff, String name, String[] strings, boolean isSet) {
String dftStr = "" ;
if ( ! isSet )
dftStr = "dft:" ;
buff.append(String.format("%-20s %s[%s]\n", name, dftStr, String.join(", ", strings))) ;
}
private void fmt(StringBuilder buff, String name, String value, boolean isSet) {
String dftStr = "" ;
if ( ! isSet )
dftStr = "dft:" ;
buff.append(String.format("%-20s %s%s\n", name, dftStr, value)) ;
}
private void fmt(StringBuilder buff, String name, int value, boolean isSet) {
String dftStr = "" ;
if ( ! isSet )
dftStr = "dft:" ;
buff.append(String.format("%-20s %s%s\n", name, dftStr, value)) ;
}
@Override
public int hashCode() {
final int prime = 31 ;
int result = 1 ;
result = prime * result + ((Node2NodeIdCacheSize == null) ? 0 : Node2NodeIdCacheSize.hashCode()) ;
result = prime * result + ((NodeId2NodeCacheSize == null) ? 0 : NodeId2NodeCacheSize.hashCode()) ;
result = prime * result + ((NodeMissCacheSize == null) ? 0 : NodeMissCacheSize.hashCode()) ;
result = prime * result + ((blockReadCacheSize == null) ? 0 : blockReadCacheSize.hashCode()) ;
result = prime * result + ((blockSize == null) ? 0 : blockSize.hashCode()) ;
result = prime * result + ((blockWriteCacheSize == null) ? 0 : blockWriteCacheSize.hashCode()) ;
result = prime * result + ((fileMode == null) ? 0 : fileMode.hashCode()) ;
result = prime * result + ((indexId2Node == null) ? 0 : indexId2Node.hashCode()) ;
result = prime * result + ((indexNode2Id == null) ? 0 : indexNode2Id.hashCode()) ;
result = prime * result + ((indexPrefix == null) ? 0 : indexPrefix.hashCode()) ;
result = prime * result + ((prefixId2Node == null) ? 0 : prefixId2Node.hashCode()) ;
result = prime * result + ((prefixIndexes == null) ? 0 : prefixIndexes.hashCode()) ;
result = prime * result + ((prefixNode2Id == null) ? 0 : prefixNode2Id.hashCode()) ;
result = prime * result + ((primaryIndexPrefix == null) ? 0 : primaryIndexPrefix.hashCode()) ;
result = prime * result + ((primaryIndexQuads == null) ? 0 : primaryIndexQuads.hashCode()) ;
result = prime * result + ((primaryIndexTriples == null) ? 0 : primaryIndexTriples.hashCode()) ;
result = prime * result + ((quadIndexes == null) ? 0 : quadIndexes.hashCode()) ;
result = prime * result + ((tripleIndexes == null) ? 0 : tripleIndexes.hashCode()) ;
return result ;
}
/** Equality but ignore "isSet" */
public static boolean sameValues(StoreParams params1, StoreParams params2) {
if ( params1 == null && params2 == null )
return true ;
if ( params1 == null )
return false ;
if ( params2 == null )
return false ;
if ( !sameValues(params1.fileMode, params2.fileMode) )
return false ;
if ( !sameValues(params1.blockReadCacheSize, params2.blockReadCacheSize) )
return false ;
if ( !sameValues(params1.blockWriteCacheSize, params2.blockWriteCacheSize) )
return false ;
if ( !sameValues(params1.Node2NodeIdCacheSize, params2.Node2NodeIdCacheSize) )
return false ;
if ( !sameValues(params1.NodeId2NodeCacheSize, params2.NodeId2NodeCacheSize) )
return false ;
if ( !sameValues(params1.NodeMissCacheSize, params2.NodeMissCacheSize) )
return false ;
if ( !sameValues(params1.blockSize, params2.blockSize) )
return false ;
if ( !sameValues(params1.indexNode2Id, params2.indexNode2Id) )
return false ;
if ( !sameValues(params1.indexId2Node, params2.indexId2Node) )
return false ;
if ( !sameValues(params1.primaryIndexTriples, params2.primaryIndexTriples) )
return false ;
if ( !sameValues(params1.tripleIndexes, params2.tripleIndexes) )
return false ;
if ( !sameValues(params1.primaryIndexQuads, params2.primaryIndexQuads) )
return false ;
if ( !sameValues(params1.quadIndexes, params2.quadIndexes) )
return false ;
if ( !sameValues(params1.primaryIndexPrefix, params2.primaryIndexPrefix) )
return false ;
if ( !sameValues(params1.prefixIndexes, params2.prefixIndexes) )
return false ;
if ( !sameValues(params1.indexPrefix, params2.indexPrefix) )
return false ;
if ( !sameValues(params1.prefixNode2Id, params2.prefixNode2Id) )
return false ;
if ( !sameValues(params1.prefixId2Node, params2.prefixId2Node) )
return false ;
return true ;
}
private static boolean sameValues(Item item1, Item item2) {
return Objects.deepEquals(item1.value, item2.value) ;
}
@Override
public boolean equals(Object obj) {
if ( this == obj )
return true ;
if ( obj == null )
return false ;
if ( getClass() != obj.getClass() )
return false ;
StoreParams other = (StoreParams)obj ;
if ( Node2NodeIdCacheSize == null ) {
if ( other.Node2NodeIdCacheSize != null )
return false ;
} else if ( !Node2NodeIdCacheSize.equals(other.Node2NodeIdCacheSize) )
return false ;
if ( NodeId2NodeCacheSize == null ) {
if ( other.NodeId2NodeCacheSize != null )
return false ;
} else if ( !NodeId2NodeCacheSize.equals(other.NodeId2NodeCacheSize) )
return false ;
if ( NodeMissCacheSize == null ) {
if ( other.NodeMissCacheSize != null )
return false ;
} else if ( !NodeMissCacheSize.equals(other.NodeMissCacheSize) )
return false ;
if ( blockReadCacheSize == null ) {
if ( other.blockReadCacheSize != null )
return false ;
} else if ( !blockReadCacheSize.equals(other.blockReadCacheSize) )
return false ;
if ( blockSize == null ) {
if ( other.blockSize != null )
return false ;
} else if ( !blockSize.equals(other.blockSize) )
return false ;
if ( blockWriteCacheSize == null ) {
if ( other.blockWriteCacheSize != null )
return false ;
} else if ( !blockWriteCacheSize.equals(other.blockWriteCacheSize) )
return false ;
if ( fileMode == null ) {
if ( other.fileMode != null )
return false ;
} else if ( !fileMode.equals(other.fileMode) )
return false ;
if ( indexId2Node == null ) {
if ( other.indexId2Node != null )
return false ;
} else if ( !indexId2Node.equals(other.indexId2Node) )
return false ;
if ( indexNode2Id == null ) {
if ( other.indexNode2Id != null )
return false ;
} else if ( !indexNode2Id.equals(other.indexNode2Id) )
return false ;
if ( indexPrefix == null ) {
if ( other.indexPrefix != null )
return false ;
} else if ( !indexPrefix.equals(other.indexPrefix) )
return false ;
if ( prefixId2Node == null ) {
if ( other.prefixId2Node != null )
return false ;
} else if ( !prefixId2Node.equals(other.prefixId2Node) )
return false ;
if ( prefixIndexes == null ) {
if ( other.prefixIndexes != null )
return false ;
} else if ( !prefixIndexes.equals(other.prefixIndexes) )
return false ;
if ( prefixNode2Id == null ) {
if ( other.prefixNode2Id != null )
return false ;
} else if ( !prefixNode2Id.equals(other.prefixNode2Id) )
return false ;
if ( primaryIndexPrefix == null ) {
if ( other.primaryIndexPrefix != null )
return false ;
} else if ( !primaryIndexPrefix.equals(other.primaryIndexPrefix) )
return false ;
if ( primaryIndexQuads == null ) {
if ( other.primaryIndexQuads != null )
return false ;
} else if ( !primaryIndexQuads.equals(other.primaryIndexQuads) )
return false ;
if ( primaryIndexTriples == null ) {
if ( other.primaryIndexTriples != null )
return false ;
} else if ( !primaryIndexTriples.equals(other.primaryIndexTriples) )
return false ;
if ( quadIndexes == null ) {
if ( other.quadIndexes != null )
return false ;
} else if ( !quadIndexes.equals(other.quadIndexes) )
return false ;
if ( tripleIndexes == null ) {
if ( other.tripleIndexes != null )
return false ;
} else if ( !tripleIndexes.equals(other.tripleIndexes) )
return false ;
return true ;
}
}