2016-07-26 61 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