AppEngine: Как получить последовательность событий записи в хранилище данных? - PullRequest
0 голосов
/ 27 июня 2011

Мне нужен секвенсор для данных всего приложения.

Использование объекта счетчика - плохая идея (ограничение 5 операций записи в секунду), а счетчики Sharding - не вариант.

GMTотметка времени кажется небезопасной из-за разницы часов с серверами, а также из-за возможной установки / сброса времени сервера.

Есть идеи?Как получить свойство сущности, которое я могу запросить для всех сущностей, измененных с данного значения?

TIA

1 Ответ

1 голос
/ 28 июня 2011

Распределенные хранилища данных, такие как хранилище данных ядра приложения, не имеют глобальной последовательности - буквально невозможно определить, была ли сущность A записана на сервер A до того, как сущность B была записана на сервер B, если эти события происходят достаточно близко друг к другу, если только у вас нет единственной машины, которая опосредует все транзакции и сериализует их, что накладывает жесткую верхнюю границу на то, насколько масштабируемой может быть ваша система.

Для вашей реальной практической проблемы самым простым решением было бы назначить метку времени модификацииДля каждой записи и каждый раз, когда вам нужно синхронизировать, ищите записи, более новые, чем (эта временная метка) - (epsilon), где epsilon - это короткий интервал времени, который больше, чем ожидаемая разница в синхронизации времени между серверами (примерно 10 секунддолжно быть достаточно ).Ваш клиент может затем отбросить любые дублирующиеся записи, которые он получает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...