2012-06-20 9 views
2

우리는 싱가포르 지역에서 호스팅되는 AWS 서비스를 사용합니다. 몇 가지 EC2 인스턴스와 RDS 인스턴스가 있습니다. 일부 데이터를 Amazon DynamoDB로 마이그레이션하여 애플리케이션 데이터 디자인에 도움이 될 계획이었습니다.Amazon DynamoDB는 Amazon RDS (php)보다 느립니다?

불행히도 DynamoDB는 항상 RDS보다 느립니다. 필자는 EC2 인스턴스와 동일한 영역에 작성된 테이블에 단일 행을 작성했습니다. 이 행을 읽는 것은 php 용 AmazonAWS SDK를 사용하여 1 초 이상 걸리고 mysql을 사용하여 RDS에서 행을 가져 오는 것은 그보다 10 배 이상 적습니다.

최적화 할 수있는 방법이 있습니까? 나는 SSL을 사용하지 못하게했지만 그 차이가별로 없다고 생각한다.

+0

언제든지 자신의 질문에 답변 할 수 있습니다 :-). – greg

답변

4

가능합니다. DynamoDB는 상당한 대기 시간을 가지며 RDS 호스트 데이터베이스 (MySQL, SQL Server, Oracle)보다 두꺼운 응용 프로그램 스택에서 실행됩니다.

그러나 IMO는 DynamoDB (및 대부분의 NoSQL DB)의 주요 이점은 대기 시간이 신뢰할 수 있다는 것입니다. 레코드 검색에서 400ms 대기 시간이 표시되는 경우 1 회의 세션 또는 100,000 회의 세션에서 400ms 대기 시간을 계산할 수 있습니다.

[참고 : 1 초가 오래 걸리는 것처럼 보입니다. 대부분의 경우 < 초를 여러 번받을 수 있지만 PHP 전용 SDK (.Net)에는 DynamoDB 메소드를 실제로 사용하지 않았습니다. 다른 것들이 병목이 될 수 있는지 궁금합니다.]

+0

그래, 더 큰 데이터 세트 및 더 많은 연결에 관해서는 DynamoDB의 장점은 신뢰성이라는 것입니다. 하지만 RDS의 MySQL보다 여전히 약간 느리지 만 400ms는 매우 만족합니다. 내 1 초 지연은 견딜 수 없습니다. 문자열 비교를 기반으로 레코드를 가져 오기 위해 scan API 호출을 사용했습니다. 그것은 1 초가 걸렸습니다. 이것이 .net 드라이버에서 더 빠르다고 말하고 있습니까? – Munim

+0

@ 뮤닉 .net 드라이버가 더 빨리 (또는 걱정할만큼 충분하지 않다고) 생각하지 않을 것입니다. 난 그냥 dynamoDB에 대한 PHP SDK를 사용하지 않은 참조 지점을 필요가 없습니다.내 직감은 서비스에서 수행해야하는 대부분의 처리와 거의 동일하다는 것입니다. 몇 개의 레코드를 스캔합니까? 해시 범위를 쿼리 할 수있는 경우 언제든지 검색보다 훨씬 빠르게 수행해야합니다. – Hal

+0

해시 범위에서 스캔 및 get_items를 시도해 보았습니다. 모두 느립니다. 지금 테스트 할 테이블에 하나의 레코드 만 있습니다. – Munim

5

이전의 코멘트를 보면 나는 스캔이 문제라고 말하고 싶습니다. 실제로 필수적인 경우에만이를 사용하고 싶습니다. 즉, 분석을 위해지도에 데이터를 입력하거나 그 선을 따라 무언가를 공급할 수 있습니다. 내가 아는 한 스캔은 실제로 모든 단일 레코드를 검색하여 기준 (sloooowwwww)과 일치하는 항목을 찾습니다. 여기서 get/query는 잘 색인 된 해시/범위 키에서 작동합니다.

가능하면 해시/범위 키를 쿼리 할 수 ​​있도록 데이터를 구조화해야합니다. 가능하지 않은 경우 메타 데이터/쿼리 필드를 cloudsearch에 넣고 ID를 반환하는 방식으로 볼 수 있습니다. Dynamo에서 직접 항목을 가져 오는 중입니다. 또한 denomalized 테이블을 만들 수도 있습니다 (서로 다른 테이블에서 동일한 데이터를 재구성하여 범위 키가 다르기 때문에)

PHP SDK를 사용하여 get 및 query 명령을 사용하면 대기 시간이 길어져서는 안됩니다.

+0

흠 .. 해시 키를 지정하지 않고 두 번째 범위 키만에서 항목을 선택할 수 있습니까? 나는 해시/범위 키의 개념에 대해서는 아직 잘 모른다. 클라우드 검색을 사용하면 또 다른 추가 요청 오버 헤드가 발생할 것으로 생각되며, 아마도이를 피하려고 노력할 것입니다. 나는 denomalizing을 생각하지 않았다. 그것은 흥미로운 아이디어입니다. – Munim

+0

사실, 아니요. 나는 간단한 getitem 호출을 사용하여 시도했다. 여전히 상당히 느립니다 (1 초 초과). – Munim

+2

@ 뮤 님 - getitem이 느린 경우 다른 문제가 있어야합니다. – Hal

1

PHP 용 AWS SDK와 함께 DynamoDB를 사용하는 경우 사용중인 SDK의 버전을 최신 상태로 유지해야합니다. 특히, DynamoDB 작업을위한 최상의 성능을 얻으려면 버전 1.5.9 이상을 사용해야합니다. 최근에 해결 된 몇 가지 문제가 일부 요청에 추가 대기 시간을 추가하기 때문에 이것이 많은 도움이 될 수 있습니다.

또한 DynamoDB는 최근 AWS SignatureV4에 대한 서명 요청을 지원하므로 SDK가 이전에 가져 와서 캐시 한 STS 자격 증명이 필요하지 않습니다. 이것은 또한 더 나은 성능에도 기여해야합니다.

+0

팁 주셔서 감사. 내 서버에서 캐싱을 수정하여 대기 시간 문제를 해결했지만 라이브러리의 최신 버전도 살펴 보겠습니다. – Munim

관련 문제