Google AppEngine HRD - согласованность против разногласий? - PullRequest
1 голос
/ 17 марта 2012

Я пытаюсь смоделировать простой редактор диаграмм, который сохраняет данные в хранилище данных HRD GAE, и я сталкиваюсь с проблемами, которые меня интересуют, можете ли вы дать мне несколько советов. В основном, модель редактора:

[Диаграмма] - содержит -> [Фигуры] - содержит -> [Текст]

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

В качестве альтернативы я мог бы сделать так:

[Диаграмма] [Форма - содержит идентификатор диаграммы] [Текст - содержит идентификатор формы]

, которые помещают их в другую группу сущностей, и когда я создаю новую фигуру, мне просто нужно сохранить сам объект фигуры. Это решает проблему конфликта записи, но данные больше не согласованы - в зависимости от того, как скоро HRD завершит запись, я могу получить устаревшие данные.

Я пробовал комбинации, такие как помещение диаграмм в кеш и извлечение из HRD, только если кеш не содержит диаграмму; однако, это непредсказуемо, так как я не могу быть уверен, что диаграмма будет в кеше (я ожидаю, что многие диаграммы будут редактироваться одновременно) ...

Как лучше всего справляться с такой проблемой? Я использую Java и JDO, если это что-то меняет ...

1 Ответ

1 голос
/ 17 марта 2012

Несколько замечаний:

  1. Чтения HRD строго согласованы, если вы используете get, и в конечном итоге согласованы, если вы используете query (поскольку запросы зависят от индексов, а для этого требуется времявстроенный).Вы можете обойти вашу проблему, используя get, если это возможно.

  2. Если Тексты и Фигуры являются частью одной Диаграммы и если вам нет необходимости получать к ним отдельный доступ И вы этого не делаетенужно искать по свойствам текста или формы, тогда вы можете просто сериализовать текст и форму внутри диаграммы.Я использую Objectify, и это просто достигается с помощью аннотации @Serialize на поле (не знаю о JDO, поскольку я ее не использую).

...