Klucz encji pobierania ndb przez ID bez rodzica

Chcę uzyskać klucz encji znający identyfikator encji i przodka. Identyfikator jest unikalny w obrębie grupy jednostek zdefiniowanej przez przodka. Wydaje mi się, że nie jest to możliwe przy użyciu interfejsu ndb. Jak rozumiem magazyn danych, może to być spowodowane faktem, że operacja ta wymaga pełnego skanowania indeksu. Zastosowane przeze mnie obejście polega na utworzeniu obliczonej właściwości w modelu, która będzie zawierać część id klucza. Teraz mogę wykonać zapytanie przodka i uzyskać klucz

class SomeModel(ndb.Model):
    ID = ndb.ComputedProperty( lambda self: self.key.id() )

    @classmethod
    def id_to_key(cls, identifier, ancestor):
        return cls.query(cls.ID == identifier,
                         ancestor = ancestor.key ).get( keys_only = True)

Wydaje się działać, ale czy są jakieś lepsze rozwiązania tego problemu?

Aktualizacja Wydaje się, że dla magazynu danych naturalnym rozwiązaniem jest użycie pełnych ścieżek zamiast identyfikatorów. Początkowo myślałem, że to będzie zbyt uciążliwe. Po przeczytaniu odpowiedzi Dragonx przeprojektowałem swoją aplikację. Ku mojemu zaskoczeniu wszystko wygląda teraz znacznie prostsze. Dodatkowe korzyści polegają na tym, że moje jednostki zużywają mniej miejsca i nie potrzebuję dodatkowych indeksów.

questionAnswers(4)

yourAnswerToTheQuestion