Google App Engine에서 실행되는 응용 프로그램이 있습니다. 작업의 일부로 시퀀스 번호가 생성됩니다. 이 번호는 다음과 같은 기준을 충족해야합니다Google Datastore의 원자 시퀀스 카운터
- 그들은 지정된 시작과 끝 범위 사이에 속해야
- 이 경우 우리가 시작할 수있는 범위의 끝은, 어떤 경우에 도달 할 때까지 그들은 (고유해야합니다
- ) 다시 순서의 처음부터 그들은 (임의 번호가 다른 두 기준을 충족하는 경우에도, 좋은 없음) 순차적해야
우리는 생성 된 번호가 있는지 확인하려고 할 코드를 작성했다 전 세계적으로 유일하지만 그 코드를 공유 할 수 없기 때문에 a) 그것은 다소 복잡하다. b) 그것은 나의 고용주의 재산이며, c) 과부하 상태에서 작동하지 않는 것처럼 보인다.
I했습니다 수행 일부 우리 고유의 기준을 충족하고 있으며 sharded counters에 관한 몇 가지 정보를 발견 보장하기 위해 실패 이후 최대 읽기하지만, 내가 생각하는 동안이 방법은 내가 여전히 보장 할 수 있다고 생각하지 않습니다 도움이 될 우리 고유 한 서열을 생성하는 데 100 % 확실합니다. 저의 의문점은 Datastore에 upserts가있을 때 약간의 대기 시간이 있으며 업데이트되는 카운터와 그 이후의 읽기에 반영되는 업데이트 사이의 지연은 비난입니다. 게다가 샤딩을 다루는 PHP 예제가 없다. (PHP 예제가 있으면 다른 예제에서도 알 수있다.)
- 모두에서 Memcache에서 카운터의 현재 값을 유지한다 (정수 원자 증분을 지원하는)와 데이터 저장소 (지속성) 다음으로이 문제
내 제안 된 해결책이다. Datastore에서 카운터를 파기하려고합니다. 현재 값에 대한
- 확인 Memcache를 :
- 은 주어진 순서에서 새 번호에 대한 요청이 들어 오면. 데이터가 Memcache를하지 않을 경우,
- 이 Memcache를
- 를 사용하여 우리의 프로세스에서 Memcache에서 반환 된 값에 원자 증가를 수행 데이터 저장소에서 그것을 채울
- 지속성을 을 보장하기 위해 다시 데이터 저장소에 새 카운터 값을 쓰기 그것은이의 얼굴에
데이터 저장소 쓰기는받은 순서대로 적용됩니까? 모든 기록이 실행 된 후 Datastore의 값이 Memcache의 값과 일치 함을 보장 할 수 있습니까? 이 문제에 대한 더 나은 해결책이 있습니까 (autoincrement/sequence 지원을 사용하여 SQL 데이터베이스로 전환하는 것 외에는)?
죄송하지만 Go를 사용하지 않으므로 NDS 라이브러리를 사용할 수 없습니다. 우리는 우리 자신의 PHP 버전을 굴릴 수 있습니다. – GordonM
괜찮습니다. NDS lib의 저자가 아닙니다. 그러나 그것은 당신에게 몇 가지 아이디어와 어려움을 줄 수 있습니다. –