Каковы значения производительности полимоделей по сравнению с обычными моделями Bigtable в Google App Engine?

12

Что дает лучшую производительность при обычном использовании Google App Engine, полимодели или обычной модели Bigtable?

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

Брайан Баллсун-Стэнтон
источник

Ответы:

3

Вероятно, есть разница в производительности, но она, вероятно, довольно мала.

Вот что я нашел (все основано на Google Docs для Python ).

  1. BigTable изначально не поддерживает информацию PolyModel. Вместо этого он реализован с использованием свойства 'class'. Таким образом, когда вы пытаетесь выполнить поиск, например, чтобы найти базовый класс, вы будете искать по этому свойству 'class'.

  2. Все запросы, которые используют класс PolyModel, имеют дополнительный фильтр, который фильтрует по заданному классу (используя свойство 'class').

  3. Любые индексы, созданные для класса PolyModel, должны учитывать дополнительный столбец «класс».

По сути, класс PolyModel заботится о свойстве class самостоятельно, вставляя его в запросы и используя для других запросов. Помимо этого, он работает идентично стандартному использованию BigTable.

Таким образом, разница заключается в добавлении и поддержании одного дополнительного столбца.

Есть ли разница в производительности? Да, наверное так. Каждый столбец, который вы добавляете в любую систему баз данных, будет влиять на производительность. Но важно ли это? Возможно нет.

Ричард
источник