한개의 필드로 업데이트하는걸 최대한 방지하도록 설계하는게 우선인거 같아요. 뭐 그런 설계가 어렵다고 하면 조회수 증가의 경우 API를 호출 -> 기존값 + 1 같은 로직으로 짤거 같은데요. 동시성으로 인해 값이 실제와 점점 차이나게 되고. 후보정으로 로우데이터들을 집계해서 다시 업데이트 하는 스케쥴링같은걸 사용해야 하지 않을까 싶습니다. (유튜브 조회수도 보는 곳마다 다르기도 한데 이게 쉬운문제는 아닌거 같아요👀)
@@allssu 답변해주셔서 감사합니다. 조회수 증가의 코드의 예로 final obj = await Amplify.Datastore.query(Object, where: Object.ID.eq('123')); Amplify.Datastore.save(obj.copywith(count: obj.count + 1)); 처럼 기존 값을 읽은 후, 그 값에 1을 증가한 값을 저장하는 흐름이 있다고 볼 때 user A와 B가 동시에 이 과정을 수행할 경우 +2가 최종적으로 저장될 때도 있고, +1이 최종적으로 저장될 때도 있는 레이스컨디션이 발생하는데, 이 과정에서 도움을 구하고 싶습니다 ㅜㅜ
00:00 내용 소개
00:35 Amplify 세팅
01:08 시작하기 (amplify init)
02:16 API 추가(amplify add api)
04:09 GraphQL 스키마
05:03 클라우드 상태 및 배포(amplify status, push)
07:16 어떤 서비스가 배포될까?
07:38 프론트엔드에서의 GraphQL
08:37 GraphQL 테스트(Appsync)
11:28 데이터 확인(DynamoDB)
12:44 정리
진짜 돈 주고 들을 만한 내용에다가 설명까지 깔끔하게 잘하시니 너무 최고입니다!
그 동안 영어자료만 따로 분리해서 적용했는데 10분만에 정리해주시니 정말 편하네요 ... 감사합니다!
감사합니다☺️
Appsync에서 데이터 생성하려고하면 "message": "Not Authorized to access createTodo on type Todo" 라고 나오는데 왜이러는건가요?
graphql 사용 권한이 없다는건데, 설정이 잘못된건 아닌지 확인해보세요!
해결했습니다 감사합니다.
플러터는 graphql api 자동 생성 지원이 안되나봐요?
조회수 증가처럼, 다중 사용자가 동시에 하나의 오브젝트의 값을 업데이트하게 될 경우에 생기는 레이스 컨디션은 어떻게 해결할까요..??
한개의 필드로 업데이트하는걸 최대한 방지하도록 설계하는게 우선인거 같아요. 뭐 그런 설계가 어렵다고 하면 조회수 증가의 경우 API를 호출 -> 기존값 + 1 같은 로직으로 짤거 같은데요. 동시성으로 인해 값이 실제와 점점 차이나게 되고. 후보정으로 로우데이터들을 집계해서 다시 업데이트 하는 스케쥴링같은걸 사용해야 하지 않을까 싶습니다. (유튜브 조회수도 보는 곳마다 다르기도 한데 이게 쉬운문제는 아닌거 같아요👀)
@@allssu 답변해주셔서 감사합니다. 조회수 증가의 코드의 예로
final obj = await Amplify.Datastore.query(Object, where: Object.ID.eq('123'));
Amplify.Datastore.save(obj.copywith(count: obj.count + 1));
처럼 기존 값을 읽은 후, 그 값에 1을 증가한 값을 저장하는 흐름이 있다고 볼 때
user A와 B가 동시에 이 과정을 수행할 경우 +2가 최종적으로 저장될 때도 있고, +1이 최종적으로 저장될 때도 있는 레이스컨디션이 발생하는데, 이 과정에서 도움을 구하고 싶습니다 ㅜㅜ
음 이런상황에서는 datastore 기능에서 지원할지 모르겠지만, locking을 이용해보는게 좋지 않을까 싶어요.
docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html