안녕하세요 매일 눈팅만 하다 처음으로 질문을 올려봅니다. 빠른 속도로 대량의…

안녕하세요 매일 눈팅만 하다 처음으로 질문을 올려봅니다.
빠른 속도로 대량의 데이터를 작성해야 하는 일이 있어 DynamoDB에 값을 저장하려고 테이블을 생성해 데이터를 저장하고 있습니다.

pub/sub 형식으로 400개 항목을 모니터링하고 있다가 새 값을 전달받으면 이를 boto3를 이용해 put_item() 함수로 저장하고 있는데요, 대략 초당 100개 이상의 값이 들어올 것으로 예상돼 capacity를 read:1, write:100 으로 설정했습니다.

그런데 테이블에 값이 기록되는 속도를 보면 형편없이 느리고, 메트릭을 봐도 write capacity를 25도 사용하지 않고 있습니다.

혹시나 해서 들어온 값을 csv 파일에도 같이 기록하고 있는데, csv에 내용이 쌓이는 속도에 비하면 너무도 느리게 DynamoDB에 값이 쌓이고 있습니다. 15시35분 현재 아직도 15시에 받은 값이 저장되지 않고 있습니다. 새로고침을 해보면 느리지만 꾸준히 저장되고 있기는 하네요.

모니터링하는 항목 수를 줄이고 프로세스를 여러개 띄워야 할까요 아니면 다른 원인이 있는걸까요? 많은 조언 부탁드리겠습니다.

4 thoughts on “안녕하세요 매일 눈팅만 하다 처음으로 질문을 올려봅니다. 빠른 속도로 대량의…

  1. pub/sub을 dynamoDB로 하신 건 아닌 거죠? (dynamoDB에 pub/sub API는 못봤던 것 같아서요). 그럼 질문은 정확히 (pub/sub과는 관계없이) csv에는 write가 되는데 dynamo DB write latency가 매우 느리다 로 이해해도 되는 걸까요?

  2. 혹시 read/write capacity를 일시적으로 늘려보면 해결이 되는 이슈일까요? 실제 초당 사용량이 1 이라고 해도, 실제 item size에 따라서 Capacity Units을 더 소모하게 되는 경우도 있기도 해서요.
    (write capacity를 25도 사용하지 않고 있다는 점에서 그 부분은 아닐 수도 있을것 같습니다만)

  3. 아 그리고 참 이상한게 메트릭에서 put latency를 보면 7ms정도로 일정합니다. 쓰기가 문제가 아니라 네트워크 또는 프로세스의 메모리가 문제일까요…

  4. 벌크의 방법을 사용 가능하신지 한번 확인해 보시면 어떨까 합니다. 벌크 작업을 위해 BatchWriteItem 이라는게 있습니다. 주의 사항은 throughput 이 모자르거나 하는 경우라면 unprocessed item 카운트가 올라가는데 이게 나오면 exponential backoff 로 다시 넣는걸 추천하고 있습니다. 한번에 15메가씩 때려 넣을수 있다고 하네요. 개발환경에서 테스트 해 보시면 효과와 프로덕션 적용에 아이디어가 생기시지 않을까 합니다. http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchWriteItem.html

답글 남기기

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