В настоящее время многие из моего кода широко используют предков для размещения и извлечения объектов. Тем не менее, я хочу изменить кое-что.
Первоначально я думал, что предки помогли быстрее запросить запросы, если вы знали, кем был предком сущности, которую вы искали. Но я думаю, что оказывается, что предки в основном полезны для поддержки транзакций. Я не использую транзакции, поэтому мне интересно, не являются ли предки более сложными для системы, чем помощь.
У меня есть пользовательский объект и множество других объектов, например, комментарии, теги, друзья. Пользователь может создавать много комментариев, тегов и друзей, и поэтому всякий раз, когда пользователь делает это, я устанавливаю предок для всех этих вновь созданных объектов как пользователя.
Поэтому, когда я создаю комментарий, я устанавливаю предка как пользователя:
comment = Comment(aUser, key_name = commentId)
Теперь единственная причина, по которой я это делаю, - это строго для запросов. Я думал, что это будет быстрее, когда я захочу получить все комментарии определенного пользователя, чтобы просто получить комментарии к общему предку, а не запрашивать все комментарии, где authorEmail = userEmail.
Поэтому, когда я хочу получить комментарии от определенного пользователя, я:
commentQuery = db.GqlQuery('SELECT * FROM Comment WHERE ANCESTOR IS :1', userKey)
Итак, мой вопрос: хорошо ли это использование предков? Должен ли каждый комментарий ссылаться на объект User, создавший комментарий, и ссылаться на него?
(Кроме того, я думал, что использование предков вместо индексированного ReferenceProperty сэкономит на расходах на запись. Я ошибаюсь здесь?)