0

Я работаю над преобразованием приложения из db в ndb и работаю над тем, чтобы сделать мои запросы более эффективными. Приложение стало немного медленным с увеличением количества данных, заставив нас понять, что запросы довольно неэффективны.Запрос для лиц без родителей

фон:

Наша модель данных урезанной похожа на это (не стесняйтесь критиковать):

class ServiceRequest(ndb.Model): 
    technician = ndb.UserProperty() 
    application = ndb.KeyProperty() # ServiceRequestApplication kind 


class ServiceRequestApplication(ndb.Model): 
    applicant = ndb.UserProperty() 

Админы могут "утвердить" в ServiceRequestApplication для ServiceRequest. Службы ServiceRequestApplications создаются с помощью родительского ServiceRequest. Если одобрено ServiceRequestApplication, ключ приложения сохраняется в свойстве приложения запроса.

Хитрости:

Там может быть несколько лиц ServiceRequest для 1 фактического назначения службы (1 за техник). У нас есть один ServiceRequest, и если требуется несколько технологий, мы создаем дополнительные ServiceRequests с основным ServiceRequest в качестве родителя. Мы первоначально подошли к проблеме таким образом, потому что запросы предков были бы довольно легкими, включая некоторые другие причины в отношении того, как эти данные будут запрашиваться/представлены.

Может ли кто-нибудь подумать о способе запроса для объектов ServiceRequest, которые не have have children ServiceRequests?

Спасибо!

ответ

1

В теме, которую вы спрашиваете о запросе для лиц без родителей; в теле, которое вы спрашиваете о запросе для лиц без детей. В любом случае, ответ один и тот же: это невозможно при использовании стандартных индексов App Engine. Первый требует поиска чего-то , а не, присутствующего в ключе (что невозможно, как структурируются индексы), а для последнего требуется объединение, поскольку он выбирает объекты на основе свойств (или наличия) других объектов.

Вместо этого вам необходимо будет денормализовать: добавьте свойство ServiceRequest, которое указывает, является ли оно корневым объектом или имеет дочерние элементы, если это необходимо.

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