2017-12-27 1 views
0

현재 iOS 어플리케이션에서 세마포어를 구현하는 방법을 결정하려고합니다. 각 행이 노래를 나타내는 테이블보기가 있습니다. 각 행에는 노래가받은 득표 수와 윗쪽 화살표와 아래쪽 화살표가 포함됩니다. 각 노래에는 자체 카운트가 있으므로 Song 1은 0 표를, Song 2는 5 표를 가질 수 있습니다. 현재 여러 사람이 동시에 노래 1에 투표하는 경우 숫자가 올바르게 업데이트되지 않기 때문에 문제가 발생합니다.스위프트 4와 파이어베이스에서의 세마포어 제안

이 문제를 해결하기 위해 세마포를 사용할 계획이었습니다. 그러나 테이블보기의 각 행에 대한 세마포가 있어야합니다. 이것이 가능한가? 이 문제를 더 잘 해결할 수있는 방법에 대한 제안이 있으십니까?

+0

동시 대기열을 사용하고 대기열에서 데이터베이스를 업데이트하십시오. 왜 행마다 1 개의 세마포가 필요합니까? 같은 시간에 여러 사람이 투표한다는 것은 무엇을 의미합니까? – Brandon

+0

답장을 보내 주셔서 감사합니다. 1000 개의 노래와 1000 명의 투표자가있는 경우, 하나의 세마포어를 만들면 모두 다른 노래에 투표하는 경우에도 999 명이 대기하게됩니다. 옳은? – Sarah

답변

3

그들은 모두 서로 다른 노래에 투표하는 경우에도 대기 999명있을 것이다 일 세마포어 를 작성 투표 1000 노래와 천명이 있으면. 옳은?

100 만 명이 있다면 데이터베이스를 동기화하기 위해 100 만 개의 세마포가 있습니까? 확장에 대해 생각해보십시오.

데이터베이스에 Transaction 작업을 사용해야합니다. 여기를 참조하십시오 : https://firebase.google.com/docs/database/ios/read-and-write#save_data_as_transactions

위의 예는 당신이하려는 것과 똑같은 것 같습니다 (별표와 증분 카운터로 투표).

어쨌든 클라이언트 쪽에서는 원격 데이터베이스를 sempahore와 동기화 할 수 없습니다. 내가 잘못하고 DB가 로컬이 아니라면. 어쨌든, 트랜잭션 연산이 필요합니다.

+1

이것은 내가 찾고있는 것입니다. 내가 어떻게 그것을 놓쳤는 지 잘 모르겠다. 정말 고마워! – Sarah