App Engine – хранилище данных – индексирование

Это общий вопрос об индексации хранилища данных App Engine. Хранилище данных автоматически создает индексы, которые можно использовать для простых запросов с одним свойством (запросов, не использующих составные ключи).

Зависят ли накладные расходы при создании этого индекса от базового типа данных свойства объекта?

По сути мой вопрос сводится к следующему:

def Person(db.Model):
  name = db.StringProperty()
  rollnumber = db.IntegerProperty()

Меньше ли накладные расходы на индексирование свойства rollnumber по сравнению со свойством name?


person Rahul    schedule 16.08.2010    source источник


Ответы (1)


Пространство, необходимое для индексации значения, состоит из:

  • Размер самого значения,
  • Если это переменная длина, например строка, от 1 до 3 байтов для хранения длины значения.
  • Размер имени (например, 'rollnumber') плюс, опять же, несколько байтов для хранения длины.
  • Размер ключа объекта
  • Несколько дополнительных байтов служебных данных

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

person Nick Johnson    schedule 16.08.2010
comment
Есть ли разница в аспекте запроса, т.е. зависит ли производительность запроса от типа данных свойства? Судя по вашему ответу, я бы не подумал, но я просто хотел убедиться. - person Rahul; 17.08.2010
comment
Нет, не должно быть существенной разницы в фильтрации разных типов данных, если вы, например, не говорите о фильтрации очень длинной строки. - person Nick Johnson; 17.08.2010