Как получить отличное значение одной из моих моделей в Google App Engine

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

я не полагаю, что каскад удаляет, чтобы быть вполне настолько же плохим как триггеры, как они только удаляют данные, триггеры могут иметь все виды противного материала внутри.

В целом я избегаю реальный, Удаляет в целом, и используйте логичный, удаляет (т.е. имеющий немного столбца, названного isDeleted, который установлен на истинный), вместо этого.

5
задан David Underhill 21 July 2010 в 20:03
поделиться

2 ответа

Хранилище данных не может сделать это за вас с помощью одного запроса. Запрос хранилища данных всегда возвращает последовательный блок результатов из индекса, а индекс всегда состоит из всех сущностей данного типа, отсортированных в соответствии с указанными порядками. Запрос не может пропускать элементы только потому, что одно поле имеет повторяющиеся значения.

Один из вариантов - реструктурировать данные. Например, введите новый тип объекта, представляющий «область». При добавлении учебника вы создаете соответствующую «область», если она еще не существует, а при удалении учебного пособия удаляйте соответствующую «область», если в той же «области» не осталось учебных пособий. Если в каждой области хранится определенное количество уроков в этой области, это может быть не слишком обременительно (хотя поддерживать согласованность с транзакциями и т. д. на самом деле было бы довольно утомительно). Я ожидаю, что ключ объекта может быть основан на самой строке области, что означает, что вы всегда можете выполнять поиск по ключу, а не запросы для получения объектов области.

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

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

7
ответ дан 14 December 2019 в 04:44
поделиться

Этот вопрос задавался ранее , и был сделан вывод, что использование наборов - это нормально.

0
ответ дан 14 December 2019 в 04:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: