Я изучаю AppEngine и начал разрабатывать новое приложение и хочу кое-что прояснить.
Я понял, что а.Чтобы добиться атомарности обновления / удаления нескольких объектов, нам нужно сделать это в транзакции, и, следовательно, все они должны находиться в одной группе объектов b.Наличие больших групп сущностей не масштабируется, так как вызывает конфликт.(Q1: Правильно?)
Итак, вот модель сущности системы онлайн-экзаменов для обсуждения:
Сущности: Страница предметного экзамена Вопрос Ответ
Как вы можетесмотри сверху, каждая сущность 1 - множество отношений с ближайшей нижней, т. е. 1 у субъекта может быть много экзаменов, 1 экзамен -> много страниц, на 1 странице может быть много вопросов ...
Как видите,я хотел бы установить каскадные отношения обновления / удаления между этими объектами (реализация приложения AppAgine JPA datanucleus поддерживает это (скрыто), помещая все объекты в одну группу объектов (Q2: исправить?), хотя AppEngine изначально не поддерживает это ограничение), такЕстественно, все будет идти под одной и той же группой лиц, так чтоя могу удалить страницу (если это сделал мой пользователь) в транзакции и быть уверенным, что все страницы, вопросы, ответы удалены. б.или я могу полностью удалить тему в транзакции, очистить все, что находится под ней
Так что, когда я расширяю это на свое реальное приложение, я вижу, что все мои (или, по крайней мере, большинство) сущностей взаимосвязаны и вписываются в один и тот же объект.группа сущностей, чтобы иметь возможность проводить их в целом, что делает мою модель неэффективной.
Q3: Пожалуйста, посоветуйте, как переосмыслить этот дизайн (и лучшие практики) и все же достичь того, что мне нужно.Спроси меня больше, если нужно.Было бы замечательно, если бы вы могли указать мне на соответствующие примеры.
PS 1 решение, о котором я мог бы подумать, - это иметь каждую сущность в отдельной группе сущностей и отдельное постоянное поле в каждой сущности (скажем, экзамен) с именем «IS_DELETED».по умолчанию FALSE (значение 0).Как только пользователь удалит экзамен, я установлю поле в 1 (ИСТИНА), и я больше не буду их загружать.Я напишу задание Cron, которое очищает все связанные сущности в отдельной отдельной транзакции в серверной части, которая при необходимости будет повторять попытки при сбоях.Но я уверен, что это не элегантно, и не уверен, сработает ли это.
Спасибо всем за ответы, Хари