2016-07-26 96 views
1

我试图执行流程如下:AWS LAMBDA + TinkerPop有关/精怪+ TitanDB在EC2 + AWS DynamoDB云

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

  2. 它触发AWS LAMBDA ,

  3. 使用TinkerPop有关/的Gremlin连接到

  4. TitanDB上EC2,使用

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

现在我已经设法克隆完全在EC2上运行的TitanDB实例,它将数据存储在DynamoDB的云中。 我也能够从AWS LAMBDA连接通过TinkerPop有关/精怪,但只有这样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"); 

而这个工作,但是我强烈地倾向于使用“标准API”,而不是简单的小鬼语言(GremlinPipeline) 。 换句话说,我需要ORM或类似的东西。 我知道,那Tinkerpop包括它。 我意识到,我需要的是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(); 

然而,抛出“无法找到实现类: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类的,我不知道是什么的依赖我加上。

我的另外一个问题是:为什么通过Cluster类连接只需要IP并且工作,但TitanFactory需要像我在EC2上的gremlin-server上使用的属性? 我不想创建第二台服务器,我只想将它作为客户端连接到它并采用Graph对象。

编辑: 添加分解之后,它建立,在输出I得到多个:

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

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

回答

1

对于DynamoDBStoreManager类,你会需要这个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" 

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

+0

失败:生成失败并出现异常。 *出错了: 无法解析配置':compileClasspath'的所有依赖关系。 >找不到com.amazonaws的任何匹配:DynamoDBLocal:[1.10.5.1,2.0.0)因为没有com.amazonaws的版本:DynamoDBLocal可用。 在以下位置搜索: https://repo1.maven.org/maven2/com/amazonaws/DynamoDBLocal/maven-metadata.xml https://repo1.maven.org/maven2/com/amazonaws/DynamoDBLocal/ 必需: [我的申请]> com.amazonaws:dynamodb-titan100-storage-backend:1.0.0 – spam

+0

我基本上得到这个问题:http://stackoverflow.com/questions/35240114/dynamodblocal-in-sbt “依赖关系 – spam

+0

”Criteria API“我的意思是现在(在Apache完成项目之后)称为GremlinPipeline - 所以使用java语法遍历图而不是查询字符串(如JPQL vs Criteria API)。 – spam