3

저는 MySQL에 익숙하며 이제는 키 값 저장소 사용 방법을 이해하려고합니다. 데이터베이스 설계의 예와 정보를 삽입하고 얻는 방법과 같은 좋은 멍청한 생각이 있습니다.DynamoDB 데이터베이스 설계 (키 - 값 저장소, noSQL)

이것은 키 값 저장소에 MySQL의 데이터를 저장하는 방법을 나타내는 올바른 표현입니까?

TYPE: MySQL 
TABLE: users 
COLUMNS: user_id(primary), username, location 

TYPE: Key Value Store 
TABLE: users 
KEY: user_id 
VALUES: username, location 

그래서 위의 내용이 정확합니다. 일반적인 사용자 정보를 추출하는 것은 이해하기에 충분히 간단합니다. 그렇다면 키 값 저장소에서 다음 쿼리를 어떻게 수행합니까?

SELECT username FROM users WHERE location = 'mexico' 

내가 쉽게 할 수있는 방법은 다른 테이블을 만드는 것입니다. ,

--Original Table-- 
TYPE: Key Value Store 
TABLE: users 
KEY: user_id 
VALUES: username, location 

--Additional "query" Table-- 
TYPE: Key Value Store 
TABLE: user-location 
KEY: location 
VALUES: user_id 

그러나 지금 우리는 새로운 사람이 조인 두 테이블을 조정할 필요가 자신의 위치를 ​​업데이트합니다 (당신은 단지 몇 백 있던 경우에이 작업을 수행 할 수있는 다른 방법이 있는지 메신저, 5,000 명 이상의 사용자가 가정) 내가 생각하기에 엄청난 문제는 아니며, 애플리케이션 코드와 함께 매우 정확해야합니다.

이러한 문제를 해결하는 가장 좋은 방법입니까? 또는 나는 무엇인가 놓치고 있냐?

+1

일반적으로 NoSQL 데이터 저장소는 적은 기능을 제공합니다. 그것들은 개발자 생산성에 대해 정확히 알려지지 않았습니다. – usr

답변

2

업데이트 대답 (1 월 2014)

DynamoDB의 당신이 지금 위치에 인덱스를 넣어 빠른 사람들은 멕시코에 거주하는 만 검색 할 수 있습니다 의미 Global Secondary Indices을 지원하기 시작했다.

작성 당시 (변경 될 수 있음) 기존 테이블에 인덱스를 추가 할 수 없습니다.

원래 대답 (3 월 2013) 일반적으로되는 NoSQL에

주 :
되는 NoSQL DBMS는 일반적으로 확장에 초점을 맞 춥니 다.
또한 대개 서버 측 코드가 추가되어 응용 프로그램 오버 헤드가 추가됩니다.

"멕시코에서 사용자에게 쿼리하는 횟수"를 물어보십시오.
대답은 데이터베이스를 모델링 할 때 올바른 접근 방식을 제시 할 가능성이 높습니다. 이유도
는 (적어도 내 지식)에는 "완벽한 - 맞는"없이 정말 "멍청한 놈 샘플"

지금 특히 DynamoDB의보고, 당신이 차의 사치가 필요하지 않습니다이 없습니다 인덱스 (다른 NoSQL 솔루션과는 달리)이므로 인덱스별로 테이블을 만들어야합니다. 모델에서 해시 키가 위치이고 범위 키가 사용자 ID 인 테이블을 만들 수 있습니다. 따라서 QUERY API 호출로 모든 MEXICO 사용자를 확보 할 수 있습니다.

DynamoDB는 64KB 개체 만 허용하므로 다른 개체를 단일 개체에 연결하는 등의 다른 구현 방법도 고려할 수 있습니다. 여기서는 크기 조정 문제가 발생할 것입니다.

+0

사용되지 않는 대답으로 새 글로벌 보조 인덱스 기능을 사용하십시오. –

+0

@DanielSteigerwald에게 감사드립니다. 새로운 GSI 기능을 반영하도록 업데이트했습니다. –

1

다음은 YouTube의 최근 동영상으로이 질문에 대한 답변입니다. 10 분 전쯤에 DynamoDB 사용에 대한 구체적인 설명이 시작됩니다. 그러나 전체 비디오는 더 많은 것을 알고 싶어하는 사람에게 좋습니다.

웹 세미나 : 아마존 디나모 DB -

0

설계는 경우 http://youtu.be/meBjA68DeIU 당신이 다음 범위 키와 hashkey 및 userId를 같은 위치로 사용자 테이블을 다시 디자인해야 위치를 기반으로 조회의 많은 일을 끝낼 것이다. 위와 같은 방법으로 사용자 이름이나 사용자 ID를 쿼리 할 수있는 기능을 제거합니다. 또한 새 사용자를 삽입 할 때 userID의 고유성을 검사 할 수 없습니다 (MySql의 기본 키와 모순되는).

이제 위치를 기반으로 검색하지 않는 경우 스캔 작업을 수행하는 것이 더 좋은 해결책 일 수 있습니다.

가장 좋은 방법은 필요에 따라 API 수준에서 이러한 모든 처리를 수행하는 것입니다.

1

별도의 색인 테이블을 직접 관리하지 마십시오.

대신 새 global secondary index 기능을 사용하십시오.

관련 문제