필요한 데이터

  1. 재생 수
  2. 재생 시간
  3. 재생 퍼센티지
  4. 채널명

현재 각 사용자의 미디어 재생은 uuid로 구분되어 data_play 테이블에 축적되고 있다. 이 형태를 그대로 NoSQL인 DynamoDB에 입력하면 집계 함수를 사용할 수 없기 때문에 다른 구성방식 고려해야 사용이 가능하다.

DynamoDB Streams + Lambda = Database Trigger

DynamoDB에는 스트림 기능이 있다. 스트림은 DynamoDB 테이블의 변경을 추적을 가능하게 해주는 기능이다. 테이블마다 지정할 수 있으며 스트림 기능을 활성화 한 테이블은 모든 변경 사항(PUT, UPDATE, DELETE)를 24시간 언제든지 strema record로 실시간 스트리밍으로 받을 수 있다.

여러 개의 스트림 레코드는 빠르고 효율적인 처리를 위해 샤드에 그룹으로 만들어져 하나의 단위로 변환된다. 테이블 변경 내역들은 하나의 고유키가 부여되어 샤드안에 저장된다. 이를 통해 항목 변화를 정확히 추적할 수 있고 쉽게 처리가 가능하다. 프로그래밍 코드를 사용해 샤드에서 레코드를 추출한 후 변환 받은 다음 필요한 기능을 수행할 수 있다.

스트림을 생성할 때 보기 형식을 정할 수 있다. 보기형식의 종류는 4가지가 있다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a1fa9eff-86c2-42bc-ae63-d8d2a191fdfe/2020-12-10-12-20-20.png

생성된 스트림에 트리거를 추가해 Lambda를 호출할 수 있다. 이는 예전에 관계형 DB의 DB 트리거와 같은 역할을 하고있다. 관계형 DB 트리거는 DB 엔진 내에서 구현되었기 때문에 DB엔진에서 정의된 동작만 수행 할 수 있다는 한계가 있었다. 하지만 스트림과 람다를 사용한다면 테이블에 항목 변경이 일어날 때마다 관련되는 동작을 원하는 대로 구현할 수 있다. (AWS Kinesis와 유사하게 동작하는 기능이라고 한다)

테이블 스키마

참고