
com.amazon.janusgraph.diskstorage.dynamodb.Constants Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of dynamodb-janusgraph-storage-backend Show documentation
Show all versions of dynamodb-janusgraph-storage-backend Show documentation
The Amazon DynamoDB Storage Backend for JanusGraph: This is an updated version that works with a later version of JanusGraph Distributed Graph Database allows JanusGraph graphs to use DynamoDB as a storage backend.
The newest version!
/*
* Copyright 2014-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
* Portions copyright Titan: Distributed Graph Database - Copyright 2012 and onwards Aurelius.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file 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 com.amazon.janusgraph.diskstorage.dynamodb;
import static org.janusgraph.diskstorage.configuration.ConfigOption.Type.FIXED;
import static org.janusgraph.diskstorage.configuration.ConfigOption.Type.LOCAL;
import java.util.List;
import org.janusgraph.diskstorage.Backend;
import org.janusgraph.diskstorage.configuration.ConfigNamespace;
import org.janusgraph.diskstorage.configuration.ConfigOption;
import org.janusgraph.graphdb.configuration.GraphDatabaseConfiguration;
import com.amazonaws.ClientConfiguration;
import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableList;
/**
* Constants for the DynamoDB backend.
*
* @author Matthew Sowders
* @author Alexander Patrikalakis
*
*/
public final class Constants {
private Constants() { }
//begin adaptation of
//https://github.com/buka/titan/blob/master/src/main/java/com/thinkaurelius/titan/diskstorage/dynamodb/DynamoDBClient.java#L26
public static final String JANUSGRAPH_VALUE = "v";
public static final String JANUSGRAPH_HASH_KEY = "hk";
public static final String JANUSGRAPH_RANGE_KEY = "rk";
//end adaptation of
//https://github.com/buka/titan/blob/master/src/main/java/com/thinkaurelius/titan/diskstorage/dynamodb/DynamoDBClient.java#L26
public static final String HEX_PREFIX = "0x";
public static final String JANUSGRAPH_USER_AGENT = "dynamodb-janusgraph010-storage-backend_1.0.0";
public static final List REQUIRED_BACKEND_STORES = ImmutableList.of(Backend.EDGESTORE_NAME,
Backend.INDEXSTORE_NAME,
Backend.SYSTEM_TX_LOG_NAME,
Backend.SYSTEM_MGMT_LOG_NAME,
GraphDatabaseConfiguration.SYSTEM_PROPERTIES_STORE_NAME);
public static final ConfigNamespace DYNAMODB_CONFIGURATION_NAMESPACE =
new ConfigNamespace(GraphDatabaseConfiguration.STORAGE_NS, "dynamodb",
"DynamoDB storage options", false /*isUmbrella*/);
public static final ConfigNamespace DYNAMODB_STORES_NAMESPACE =
new ConfigNamespace(DYNAMODB_CONFIGURATION_NAMESPACE, "stores",
"DynamoDB KCV store options", true /*isUmbrella*/);
public static final ConfigNamespace DYNAMODB_CLIENT_NAMESPACE =
new ConfigNamespace(DYNAMODB_CONFIGURATION_NAMESPACE,
"client", "DynamoDB client options", false /*isUmbrella*/);
public static final ConfigNamespace DYNAMODB_CLIENT_PROXY_NAMESPACE =
new ConfigNamespace(DYNAMODB_CLIENT_NAMESPACE,
"proxy", "DynamoDB client proxy options", false /*isUmbrella*/);
public static final ConfigNamespace DYNAMODB_CLIENT_SOCKET_NAMESPACE =
new ConfigNamespace(DYNAMODB_CLIENT_NAMESPACE, "socket", "DynamoDB client socket options", false /*isUmbrella*/);
public static final ConfigNamespace DYNAMODB_CLIENT_EXECUTOR_NAMESPACE =
new ConfigNamespace(DYNAMODB_CLIENT_NAMESPACE,
"executor", "DynamoDB client executor options", false /*isUmbrella*/);
public static final ConfigNamespace DYNAMODB_CLIENT_CREDENTIALS_NAMESPACE =
new ConfigNamespace(DYNAMODB_CLIENT_NAMESPACE, "credentials", "DynamoDB client credentials options",
false /*isUmbrella*/);
public static final ConfigOption DYNAMODB_TABLE_PREFIX = new ConfigOption<>(DYNAMODB_CONFIGURATION_NAMESPACE,
"prefix", "A prefix to put before the JanusGraph table name. "
+ "This allows clients to have multiple graphs on the same AWS DynamoDB account.",
LOCAL, "jg");
public static final ConfigOption DYNAMODB_METRICS_PREFIX = new ConfigOption<>(DYNAMODB_CONFIGURATION_NAMESPACE, "metrics-prefix",
"Prefix on the codahale metric names emitted by DynamoDbDelegate.",
LOCAL, "d");
public static final ConfigOption DYNAMODB_ENABLE_PARALLEL_SCAN =
new ConfigOption<>(DYNAMODB_CONFIGURATION_NAMESPACE, "enable-parallel-scans",
"This feature enables scans to run in parallel, which should decrease the total blocking time "
+ "spent when iterating over large sets of vertices. "
+ "WARNING: while this feature is enabled JanusGraph's OLAP libraries are NOT supported."
+ "The JanusGraph-Hadoop implementations of OLAP rely on consistent scan orders across multiple scans, "
+ "which cannot be guaranteed when scans are run in parallel",
LOCAL, false);
public static final ConfigOption STORES_DATA_MODEL =
new ConfigOption<>(Constants.DYNAMODB_STORES_NAMESPACE, "data-model",
"SINGLE Means that all the values for a given key are put into a single DynamoDB item. "
+ "A SINGLE is efficient because all the updates for a single key can be done atomically. "
+ "However, the trade-off is that DynamoDB has a 400k limit per item so it cannot hold much data. "
+ "MULTI Means that each 'column' is used as a range key in DynamoDB so a key can span multiple items. "
+ "A MULTI implementation is slightly less efficient than SINGLE because it must use DynamoDB Query "
+ "rather than a direct lookup. It is HIGHLY recommended to use MULTI for edgestore unless your graph has "
+ "very low max degree.",
FIXED, BackendDataModel.MULTI.name());
public static final ConfigOption STORES_SCAN_LIMIT =
new ConfigOption<>(Constants.DYNAMODB_STORES_NAMESPACE, "scan-limit",
"The maximum number of items to evaluate (not necessarily the number of matching items). "
+ "If DynamoDB processes the number of items up to the limit while processing the results, it stops "
+ "the operation and returns the matching values up to that point, and a key in LastEvaluatedKey to apply "
+ "in a subsequent operation, so that you can pick up where you left off. Also, if the processed data set "
+ "size exceeds 1 MB before DynamoDB reaches this limit, it stops the operation and returns the matching "
+ "values up to the limit, and a key in LastEvaluatedKey to apply in a subsequent operation to continue "
+ "the operation.",
LOCAL, 10000);
public static final ConfigOption DYNAMODB_USE_NATIVE_LOCKING = new ConfigOption<>(DYNAMODB_CONFIGURATION_NAMESPACE,
"native-locking", "Set this to false if you need to use JanusGraph's locking mechanism for remote lock expiry.",
FIXED, true);
//begin adaptation of the following block up until line 63
//https://github.com/buka/titan/blob/master/src/main/java/com/thinkaurelius/titan/diskstorage/dynamodb/DynamoDBClient.java#L29
public static final ConfigOption DYNAMODB_FORCE_CONSISTENT_READ =
new ConfigOption<>(DYNAMODB_CONFIGURATION_NAMESPACE, "force-consistent-read",
"This feature sets the force consistent read property on dynamodb calls.",
LOCAL, true);
public static final ConfigOption STORES_INITIAL_CAPACITY_READ =
new ConfigOption<>(Constants.DYNAMODB_STORES_NAMESPACE, "initial-capacity-read",
"Define the initial read capacity for a given dynamodb table.",
LOCAL, 4L);
public static final ConfigOption STORES_INITIAL_CAPACITY_WRITE =
new ConfigOption<>(Constants.DYNAMODB_STORES_NAMESPACE, "initial-capacity-write",
"Define the initial write capacity for a given dynamodb table.",
LOCAL, 4L);
public static final ConfigOption STORES_READ_RATE_LIMIT =
new ConfigOption<>(Constants.DYNAMODB_STORES_NAMESPACE, "read-rate",
"The max number of reads per second.",
LOCAL, 4.0);
public static final ConfigOption STORES_WRITE_RATE_LIMIT =
new ConfigOption<>(Constants.DYNAMODB_STORES_NAMESPACE, "write-rate",
"Used to throttle write rate of given table. The max number of writes per second.",
LOCAL, 4.0);
public static final ConfigOption DYNAMODB_CLIENT_CONN_TIMEOUT =
new ConfigOption<>(DYNAMODB_CLIENT_NAMESPACE, "connection-timeout",
"The amount of time to wait (in milliseconds) when initially establishing a connection before giving up and timing out.", //
LOCAL, ClientConfiguration.DEFAULT_CONNECTION_TIMEOUT);
public static final ConfigOption DYNAMODB_CLIENT_CONN_TTL =
new ConfigOption<>(DYNAMODB_CLIENT_NAMESPACE, "connection-ttl",
"The expiration time (in milliseconds) for a connection in the connection pool.",
LOCAL, ClientConfiguration.DEFAULT_CONNECTION_TTL);
public static final ConfigOption DYNAMODB_CLIENT_MAX_CONN =
new ConfigOption<>(DYNAMODB_CLIENT_NAMESPACE, "connection-max",
"The maximum number of allowed open HTTP connections.",
LOCAL, ClientConfiguration.DEFAULT_MAX_CONNECTIONS);
public static final ConfigOption DYNAMODB_CLIENT_MAX_ERROR_RETRY =
new ConfigOption<>(DYNAMODB_CLIENT_NAMESPACE, "retry-error-max",
"The maximum number of retry attempts for failed retryable "
+ "requests (ex: 5xx error responses from services).",
LOCAL, 0);
public static final ConfigOption DYNAMODB_CLIENT_USE_GZIP =
new ConfigOption<>(DYNAMODB_CLIENT_NAMESPACE, "use-gzip",
"Sets whether gzip compression should be used.",
LOCAL, ClientConfiguration.DEFAULT_USE_GZIP);
public static final ConfigOption DYNAMODB_CLIENT_USE_REAPER =
new ConfigOption<>(DYNAMODB_CLIENT_NAMESPACE, "use-reaper",
"Sets whether the IdleConnectionReaper is to be started as a daemon thread.",
LOCAL, ClientConfiguration.DEFAULT_USE_REAPER);
public static final ConfigOption DYNAMODB_CLIENT_USER_AGENT =
new ConfigOption<>(DYNAMODB_CLIENT_NAMESPACE, "user-agent",
"The HTTP user agent header to send with all requests.",
LOCAL, JANUSGRAPH_USER_AGENT);
public static final ConfigOption DYNAMODB_CLIENT_ENDPOINT =
new ConfigOption<>(DYNAMODB_CLIENT_NAMESPACE, "endpoint",
"Sets the service endpoint to use for connecting to DynamoDB.",
LOCAL, String.class);
public static final ConfigOption DYNAMODB_CLIENT_SIGNING_REGION =
new ConfigOption<>(DYNAMODB_CLIENT_NAMESPACE, "signing-region",
"Sets the signing region to use for signing requests to DynamoDB. Required.",
LOCAL, String.class);
public static final ConfigOption DYNAMODB_CLIENT_PROXY_DOMAIN =
new ConfigOption<>(DYNAMODB_CLIENT_PROXY_NAMESPACE, "domain",
"The optional Windows domain name for configuration an NTLM proxy.",
LOCAL, "", Predicates.alwaysTrue());
public static final ConfigOption DYNAMODB_CLIENT_PROXY_WORKSTATION =
new ConfigOption<>(DYNAMODB_CLIENT_PROXY_NAMESPACE, "workstation",
"The optional Windows workstation name for configuring NTLM proxy support.",
LOCAL, "", Predicates.alwaysTrue());
public static final ConfigOption DYNAMODB_CLIENT_PROXY_HOST =
new ConfigOption<>(DYNAMODB_CLIENT_PROXY_NAMESPACE, "host",
"The optional proxy host the client will connect through.",
LOCAL, "", Predicates.alwaysTrue());
public static final ConfigOption DYNAMODB_CLIENT_PROXY_PORT =
new ConfigOption<>(DYNAMODB_CLIENT_PROXY_NAMESPACE, "port",
"The optional proxy port the client will connect through.",
LOCAL, 0, Predicates.alwaysTrue());
public static final ConfigOption DYNAMODB_CLIENT_PROXY_USERNAME =
new ConfigOption<>(DYNAMODB_CLIENT_PROXY_NAMESPACE, "username",
"The optional proxy user name to use if connecting through a proxy.",
LOCAL, "", Predicates.alwaysTrue());
public static final ConfigOption DYNAMODB_CLIENT_PROXY_PASSWORD =
new ConfigOption<>(DYNAMODB_CLIENT_PROXY_NAMESPACE, "password",
"The optional proxy password to use when connecting through a proxy.",
LOCAL, "", Predicates.alwaysTrue());
public static final ConfigOption DYNAMODB_CLIENT_SOCKET_BUFFER_SEND_HINT =
new ConfigOption<>(DYNAMODB_CLIENT_SOCKET_NAMESPACE, "buffer-send-hint",
"The optional size hint (in bytes) for the low level TCP send buffer.",
LOCAL, 1048576);
public static final ConfigOption DYNAMODB_CLIENT_SOCKET_BUFFER_RECV_HINT =
new ConfigOption<>(DYNAMODB_CLIENT_SOCKET_NAMESPACE, "buffer-recv-hint",
"The optional size hints (in bytes) for the low level TCP receive buffer.",
LOCAL, 1048576);
public static final ConfigOption DYNAMODB_CLIENT_SOCKET_TIMEOUT =
new ConfigOption<>(DYNAMODB_CLIENT_SOCKET_NAMESPACE, "timeout",
"The amount of time to wait (in milliseconds) for data to be transfered over an established, "
+ "open connection before the connection times out and is closed.",
LOCAL, ClientConfiguration.DEFAULT_SOCKET_TIMEOUT);
public static final ConfigOption DYNAMODB_CLIENT_SOCKET_TCP_KEEP_ALIVE =
new ConfigOption<>(DYNAMODB_CLIENT_SOCKET_NAMESPACE, "tcp-keep-alive",
"Sets whether or not to enable TCP KeepAlive support at the socket level. Not used at the moment.",
LOCAL, false);
public static final ConfigOption DYNAMODB_CLIENT_EXECUTOR_CORE_POOL_SIZE =
new ConfigOption<>(DYNAMODB_CLIENT_EXECUTOR_NAMESPACE, "core-pool-size",
"The core number of threads for the DynamoDB async client.",
LOCAL, 25);
public static final ConfigOption DYNAMODB_CLIENT_EXECUTOR_MAX_POOL_SIZE =
new ConfigOption<>(DYNAMODB_CLIENT_EXECUTOR_NAMESPACE, "max-pool-size",
"The maximum allowed number of threads for the DynamoDB async client.",
LOCAL, 50);
public static final ConfigOption DYNAMODB_CLIENT_EXECUTOR_KEEP_ALIVE =
new ConfigOption<>(DYNAMODB_CLIENT_EXECUTOR_NAMESPACE, "keep-alive",
"The time limit for which threads may remain idle before being terminated for the DynamoDB async client.",
LOCAL, 60000L);
//end adaptation of the following block up until line 63
//https://github.com/buka/titan/blob/master/src/main/java/com/thinkaurelius/titan/diskstorage/dynamodb/DynamoDBClient.java#L29
public static final ConfigOption DYNAMODB_CLIENT_EXECUTOR_QUEUE_MAX_LENGTH =
new ConfigOption<>(DYNAMODB_CLIENT_EXECUTOR_NAMESPACE, "max-queue-length",
"The maximum size of the executor queue before requests start getting run in the caller.",
LOCAL, 1024);
public static final ConfigOption DYNAMODB_MAX_SELF_THROTTLED_RETRIES =
new ConfigOption<>(DYNAMODB_CONFIGURATION_NAMESPACE, "max-self-throttled-retries",
"The max number of retries to use when DynamoDB throws temporary failure exceptions",
LOCAL, 60L);
public static final ConfigOption DYNAMODB_INITIAL_RETRY_MILLIS =
new ConfigOption<>(DYNAMODB_CONFIGURATION_NAMESPACE, "initial-retry-millis",
"The initial retry time (in milliseconds) to use during exponential backoff between DynamoDB requests",
LOCAL, 25L);
public static final ConfigOption DYNAMODB_CONTROL_PLANE_RATE =
new ConfigOption<>(DYNAMODB_CONFIGURATION_NAMESPACE, "control-plane-rate",
"The maximum rate at which control plane requests (CreateTable, UpdateTable, DeleteTable, ListTables, "
+ "DescribeTable) are issued.",
LOCAL, 10.0);
public static final ConfigOption DYNAMODB_CLIENT_EXECUTOR_MAX_CONCURRENT_OPERATIONS =
new ConfigOption<>(DYNAMODB_CLIENT_EXECUTOR_NAMESPACE, "max-concurrent-operations",
"The expected number of threads expected to be using a single TitanGraph instance. "
+ "Used to allocate threads to batch operations", //
LOCAL, 1);
public static final ConfigOption DYNAMODB_CREDENTIALS_CLASS_NAME =
new ConfigOption<>(DYNAMODB_CLIENT_CREDENTIALS_NAMESPACE, "class-name",
"Specify the fully qualified class that implements AWSCredentialsProvider or AWSCredentials.",
LOCAL, "com.amazonaws.auth.BasicAWSCredentials");
public static final ConfigOption DYNAMODB_CREDENTIALS_CONSTRUCTOR_ARGS =
new ConfigOption<>(DYNAMODB_CLIENT_CREDENTIALS_NAMESPACE, "constructor-args",
"Comma separated list of strings to pass to the credentials constructor.",
LOCAL, new String[] {
"accessKey", "secretKey"
});
// DynamoDB doesn't allow empty binary values.
public static final String EMPTY_BUFFER_PLACEHOLDER = "EMPTY";
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy