2012-11-27 3 views
5

Amazon의 AWS 및 API for Java에 상당히 익숙하다. 그래서 내가 가장 효율적인 방법이 무엇인지 잘 모르겠다. 하려고하는 것은 될 것입니다. 기본적으로 프로젝트의 ID, 상태, S3 버킷에 사용자가 업로드 할 때 버킷 및 위치를 저장할 데이터베이스를 설정하려고합니다. 내가 겪고있는 문제는 상태 속성에서 "준비"상태 인 모든 프로젝트 ID의 목록을 얻는 것입니다. "준비"상태 인 프로젝트는 추후 참조를 위해 어레이 또는 arraylist에 ID 번호를로드해야합니다. 어떤 추천?Amazon DynamoDB의 속성 값이 ... (Java API)

답변

4

이렇게하는 방법은 스캔 API를 사용하는 것입니다. 그러나 다이너 모는 테이블의 모든 항목을 살펴보고 속성 "status"가 "ready"와 같은지 확인해야합니다. 이 작업의 비용은 클 것이고 테이블의 모든 항목을 읽는 데 비용이 청구됩니다.

코드는 다음과 같을 것이다 : 그것은 당신의 데이터를 비정규 필요하지만

Condition scanFilterCondition = new Condition() 
    .withComparisonOperator(ComparisonOperator.EQ.toString()) 
    .withAttributeValueList(new AttributeValue().withS("ready")); 
Map<String, Condition> conditions = new HashMap<String, Condition>(); 
conditions.put("status", scanFilterCondition); 

ScanRequest scanRequest = new ScanRequest() 
    .withTableName("MasterProductTable") 
    .withScanFilter(conditions); 

ScanResult result = client.scan(scanRequest); 

이 더 잘 만들 수있는 방법이있다. 해시 키가 "status"이고 범위 키가 "project ID"인 두 번째 테이블을 유지하십시오. 이것은 기존 테이블에 추가 된 것입니다. 이렇게하면 쿼리 API (스캔 속도가 훨씬 저렴)를 사용하고 해시 키가 "준비 됨"인 모든 항목을 요청할 수 있습니다. 그러면 필요한 프로젝트 ID 목록이 표시되며 이미 가지고있는 프로젝트 ID 테이블에서 가져올 수 있습니다.

이 코드는 같은 것을 보일 것이다 :이 방법의 단점은 당신이 상태 필드를 업데이트 할 때마다 두 개의 테이블을 업데이트 할 필요가있다

QueryRequest queryRequest = new QueryRequest() 
    .withTableName("ProductByStatus") 
    .withHashKeyValue(new AttributeValue().withS("ready")); 

QueryResult result = client.query(queryRequest); 

을, 당신은 당신이에 보관 있는지 확인해야합니다 동조. Dynamo는 트랜잭션 성을 제공하지 않으므로 마스터 프로젝트 테이블에 대한 업데이트가 성공했지만 보조 상태 테이블에서는 성공할 준비가되어 있어야합니다. 혹은 그 반대로도.

자세한 참조 : http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/QueryAndScan.html

+0

이것은 트릭을 수행하는 것처럼 보입니다. 이 프로세스는 이미 폭포 형 워크 플로우에서 처리되므로 마지막 단계 (이 상태를 업데이트 할 예정) 이전에 실패한 부분이 있으면 조기에 종료되므로 다른 모든 항목이 성공하면 상태가 업데이트됩니다. 도와 주셔서 감사합니다! – DGolberg

+0

1 년 반 만에 나는 이것에 대한 업보트를 얻었지만, 죄책감을 느낀다 : DynamoDB는 다른 테이블을 관리 할 필요없이이 목적을 위해 만들어진 2 차 인덱스를 발표했다. 한번 봐봐! –

+0

롤 (Lol), 나는 또한 게시물을 업데이트하는 것을 고려하고 있다고 생각했습니다. 하지만 그래, 보조 인덱스는 좋은데 ... 원래 응답이 여전히 적용되는 인스턴스가 여전히 존재하지만. 이 게시물에 관심이있는 사람은 누구인지, 특히 궁금한 사항이 있으면 설명서의 "색인을 드물게 사용"섹션을 참조하십시오. 여기에서 사용할 수 있습니다 (http://docs.aws.com/). .amazon.com/amazondynamodb/latest/developerguide/GuidelinesForLSI.html). – DGolberg