DynamoDB 에서 아이템을 읽고 싶은데요. 반드시 조건에 Hash, Range Key…

DynamoDB 에서 아이템을 읽고 싶은데요. 반드시 조건에 Hash, Range Key 가 들어가야 하나요?

아무 Key 나 하나만 가지고도 조건에 맞는 아이템들을 get 하고 싶습니다.

테스트 해보니까 scan() 은 전체 다 가져오는거 같고… getItem() 이랑 query() 는 Hash 키가 안 들어가면 결과가 아무것도 안 나오더라구요 ㅠㅠ

Global Secondary Index… 같은거 사용해야 하는걸로 판단되는데 그냥 MySQL처럼 아무 컬럼이나 잡고 조건서칭 하고 싶습니다~

4 thoughts on “DynamoDB 에서 아이템을 읽고 싶은데요. 반드시 조건에 Hash, Range Key…

  1. DynamoDB를 쓰시는군요… 특정 데이터만 리턴받기 위해서 FilterExpression으로 조건을 줄 수 있을 것 같습니다..
    FilterExpression은 스캔이나 쿼리 동작이 끝나고, 실제로 데이터가 돌아가기 직전에 filtering 하는 것 이기 때문에, capacity소모는 filtering전의 읽/쓰 아이템양과 관련이 있는걸로 알고 있습니다.
    따라서 원하는 데이터를 scan동작과 filtering으로 얻어낼 수 있더라도 실제로 filtering 전에 read 되는 아이템을 최소화 하는 것이 좋을 것 같습니다.
    (틀렸다면 누군가 지적해주시길.ㅠㅠ)

    아직 NoSQL DB에 대해 깊게 공부해보지 못했는데, 제가 사용할 때는 일반 RDB와 많이 다르게 설계해야 했습니다.
    어떤 데이터를 자주 검색할지에 따라 Hash, Range Key, Local 2nd Idx, Global 2nd Idx 설정하고,데이터 구조를 잡는 방식으로 했었습니다.
    정규화를 하고 DB테이블을 만들 수 없으니, 데이터를 보고 주로 어떻게 검색되는지가 중요했던 것 같습니다. 어디서 DynamoDB설계 강의라도 좀 듣고 싶긴 합니다.ㅎㅎ

  2. 아~ 역시 매뉴얼대로만 쓸 수 있는거군요 ㅠㅠ 말씀하신대로 테이블 구조를 잘~ 짜서 사용해보도록 하겠습니다 언제나 빠르고 상세한 댓글 감사드립니다!

  3. 스캔은 아무 컬럼이나 필터할 수 있고 세컨더리 인덱스 잡으면 쿼리시에 인덱스 컬럼으로 조건 날릴수있어요. 다만 전부 비용과 제한이(해시키당 인덱스 개수 제한) 있기때문에 테이블 설계를 잘하셔야 합니다. 쿼리시 해시키는 필수고 레인지키는 옵션이에요

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.