1

в моем проекте (Java) Мне нужен инкрементный идентификатор для объекта, хранящегося в хранилище данных. Самое главное для меня, что каждое следующее значение будет больше, чем предыдущее.GAE Datastore инкрементный ID

Я попытался использовать DatastoreService.allocateIds(), но после некоторых истекших идентификаторов он принимает идентификатор из случайного места в магазине и нарушает порядок.

Может кто-нибудь мне помочь? Спасибо заранее.

+1

вы можете сделать счет + 1, но не очень. Зачем вам нужны инкрементные идентификаторы? – marcadian

+1

@marcadian, Этот метод, который я использую сейчас, и мне это кажется нехорошим. Мне нужно сохранить объекты последовательности. Ситуация осложняется их большим количеством и поэтому может быть добавлена ​​более 10K в секунду. –

+1

Посмотрите на memcached api. это единственный возможный способ сделать это. однако его трудно реализовать правильно, если вы хотите обработать случай, когда кеш будет выселен. –

ответ

0

Вы должны использовать встроенный идентификатор ID и использовать другое поле для вашего последовательного идентификатора. Я попробовал это сам, и почти невозможно выделить идентификаторы так, как вы хотите, и если вы сделаете одну ошибку, тогда весь ваш ap будет b0rked, потому что идентификаторы могут использоваться только один раз.

Итак, используйте этот метод: два идентификатора, один из которых создается хранилищем данных и одно настраиваемое поле, которое является целым или строкой, имеющей свой собственный идентификатор.

+1

В результате я почти сделал это. Такая система более сложна, но после дня поиска решений я понял, что автоматически сгенерированный идентификатор только правильный вариант. –

+0

На самом деле, если вам нужны секвенциальные идентификаторы, вы не используете автоматически генерируемые идентификаторы, а счетчик осколков, см. Https://cloud.google.com/appengine/articles/sharding_counters. – konqi

Смежные вопросы