AWS Lambda + Tinkerpop/Gremlin + EC2 上的 TitanDB + 云中的 AWS DynamoDB

AWS Lambda + Tinkerpop/Gremlin + TitanDB on EC2 + AWS DynamoDB in cloud

我正在尝试执行以下流程:

  1. 用户点击 AWS 网关 (REST),

  2. 它触发 AWS Lambda,

  3. 使用Tinkerpop/Gremlin连接到

  4. EC2 上的 TitanDB,使用

  5. 云中的 AWS DynamoDB(不在 EC2 上)作为后端。

现在我已经设法在 EC2 上创建了完全可用的 TitanDB 实例,它将数据存储在云中的 DynamoDB 中。 我也可以通过 Tinkerpop/Gremlin 从 AWS Lambda 连接到 EC2,但只能这样:

Cluster.build()
       .addContactPoint("10.x.x.x") // ip of EC2
       .create()
       .connect()
       .submit("here I type my query as string and it will work");

这很有效,但是我更喜欢使用 "Criteria API" (GremlinPipeline) 而不是普通的 Gremlin 语言。 换句话说,我需要 ORM 或类似的东西。 我知道,Tinkerpop 包括它。 我已经意识到,我需要的是 class Graph 的对象。 这是我试过的:

Graph graph = TitanFactory
            .build()
            .set("storage.hostname", "10.x.x.x")
            .set("storage.backend", "com.amazon.titan.diskstorage.dynamodb.DynamoDBStoreManager")
            .set("storage.dynamodb.client.credentials.class-name", "com.amazonaws.auth.DefaultAWSCredentialsProviderChain")
            .set("storage.dynamodb.client.credentials.constructor-args", "")
            .set("storage.dynamodb.client.endpoint", "https://dynamodb.ap-southeast-2.amazonaws.com")
            .open();

但是,它抛出 "Could not find implementation class: com.amazon.titan.diskstorage.dynamodb.DynamoDBStoreManager"。 当然电脑是对的,IntelliJ IDEA也找不到。

我的依赖项:

//
// aws
compile 'com.amazonaws:aws-lambda-java-core:+'
compile 'com.amazonaws:aws-lambda-java-events:+'
compile 'com.amazonaws:aws-lambda-java-log4j:+'
compile 'com.amazonaws:aws-java-sdk-dynamodb:1.10.5.1'
compile 'com.amazonaws:aws-java-sdk-ec2:+'
//
// database
// titan 1.0.0 is compatible with gremlin 3.0.2-incubating, but not yet with 3.2.0
compile 'com.thinkaurelius.titan:titan-core:1.0.0'
compile 'org.apache.tinkerpop:gremlin-core:3.0.2-incubating'
compile 'org.apache.tinkerpop:gremlin-driver:3.0.2-incubating'

我的目标是什么:拥有完全可用的 Graph 对象

我的问题是什么:我没有 DynamoDBStoreManager class,而且我不知道我必须添加什么依赖项。

我的另一个问题是:为什么通过集群 class 连接只需要 IP 就可以工作,但 TitanFactory 需要像我在 EC2 上的 gremlin-server 上使用的那些属性? 我不想创建第二个服务器,我只想作为客户端连接到它并获取 Graph 对象。

编辑: 添加解析器后,它会构建,在输出中我得到多个:

13689 [TitanID(0)(4)[0]] WARN com.thinkaurelius.titan.diskstorage.idmanagement.ConsistentKeyIDAuthority - 获取 id 块时出现临时存储异常 - 在 PT2.4S 中重试:com.thinkaurelius.titan.diskstorage.TemporaryBackendException:为 id 块写入声明[1, 51) in PT0.342S => 太慢,阈值为:PT0.3S

并且执行挂在 open() 方法上,所以不允许我执行任何查询。

对于 DynamoDBStoreManager class,您需要 dependency:

compile 'com.amazonaws:dynamodb-titan100-storage-backend:1.0.0'

然后对于 DynamoDBLocal 问题,尝试添加此解析器:

resolvers += "AWS DynamoDB Local Release Repository" at "http://dynamodb-local.s3-website-us-west-2.amazonaws.com/release"

我不是很清楚这意味着什么 -- "Criteria API" 而不是简单的 Gremlin 语言。我猜你的意思是你想使用 Java 与图形交互,而不是将 Gremlin 作为字符串传递给 运行 Titan/Gremlin 服务器?如果是这种情况,那么您根本不需要启动 Titan/Gremlin 服务器(上面的第 4 步)。编写一个 AWS Lambda 程序(上面的第 2-3 步),通过 TitanFactory 创建直接的 Titan 客户端连接,其中所有 Titan 配置属性都用于您的 DynamoDB 实例(上面的第 5 步)。