Оптимизация использования ключа сущности appengine - PullRequest
3 голосов
/ 26 июня 2010

Должен ли я заботиться о местонахождении сущностей в хранилище данных Google App Engine?Стоит ли использовать для этого имена ключей пользовательских сущностей?

Например, я мог бы использовать "$ article_uuid, $ comment_id" в качестве имени ключа сущности Comment.Повысит ли это скорость получения всех комментариев к статье?Или лучше использовать более короткие клавиши?

Это хорошая практика, чтобы использовать ключ таким образом?Я мог бы использовать "$ article_uuid, $ comment_id" имя ключа также вместо индекса:

def get_comments(article_uuid, limit=1000):
    key_prefix=db.Key.from_path('Comment', article_uuid)
    q = Comment.gql("where __key__ > :key_prefix and __key__ < :range_end",
        key_prefix=key_prefix, range_end=key_prefix+chr(ord(',')+1))
    return q.fetch(limit)

1 Ответ

1 голос
/ 26 июня 2010

Местонахождение ваших данных будет улучшено с помощью вашей схемы key_name ( ref, см. Слайд 40 ) - поскольку ваш key_name имеет префикс с соответствующим идентификатором статьи, комментарии для данной статьи должны храниться рядом друг с другом.

Предложение key_name, которое вы предложили, не кажется слишком длинным. Я не думаю, что вы увидите слишком большую разницу между этим и более короткими ключами с точки зрения пространства хранения или времени сериализации / десериализации. Я ожидаю, что в размере Comment объекта будет доминировать остальная часть объекта.

...