2010-06-11 2 views
2

У меня есть запрос, который совсем недавно, начиная бросить:Appengine backreferences - нужен составной индекс?

"The built-in indices are not efficient enough for this query and your data. Please add a composite index for this query." 

Я проверил линию, на которой это исключение бросают, и запрос проблемы это одна:

count = self.vote_set.filter("direction =", 1).count() 

Это буквально операция с одним фильтром, использующая встроенные обратные ссылки appengine. Я понятия не имею, как оптимизировать этот запрос ... у кого есть предложения? Я попытался добавить этот показатель:

- kind: Vote 
    properties: 
    - name: direction 
    direction: desc 

- kind: Vote 
    properties: 
    - name: direction 

И я получил сообщение (очевидно), что это лишний индекс.

Спасибо за вашу помощь заранее.

ответ

3

Если выполнять все соответствующие запросы на локальном SDK, он должен генерировать все необходимые показатели (в index.yaml) и рекомендованная политика не редактировать index.yaml себя а скорее, чтобы локальный SDK сделал это за вас. Если SDK не генерирует все необходимые индексы, как вы, конечно, используете все соответствующие коды кода в локальном тестировании !, вы должны открыть ошибку для него в Tracker App Engine here (после проверки того, что еще нет отчет об ошибке для этой проблемы, конечно).

+0

См., Я определенно сделал это, поэтому он заставляет меня думать, что размер моего хранилища данных имеет к этому какое-то отношение. В настоящее время я жду некоторых новых индексов для сборки, но после этого мне, возможно, придется открыть отчет об ошибке. Очень странно. –

+0

SDK не будет генерировать индексы для запросов, которые могут быть выполнены с помощью алгоритма объединения слиянием. Возможно, запрос может быть нецелесообразным делать с объединением-join, хотя - вот что мы видим здесь. –

+0

Итак, Ник: есть ли что-нибудь, что я могу сделать, кроме перепроектирования моей схемы? –

3

Обратные ссылки фактически просто создают запрос, отфильтрованный по ссылочному свойству, поэтому, добавляя еще один фильтр, у вас есть запрос с 2 фильтрами.

Ваш compsite индекс будет выглядеть примерно так:

- kind: Vote 
    properties: 
    - name: your_reference_property_name 
    - name: direction 
    direction: desc 
+1

После ожидания двух дней для создания этого индекса это, кажется, не имеет никакого эффекта. После проверки этой страницы: http://www.allbuttonspressed.com/blog/django/2010/01/An-App-Engine-limitation-you-didn-t-know-about Я думаю, что я возможно, не сможет придерживаться этой схемы. Argh. Смотрите, болезненная часть, это живой сайт, который используется, это не просто проект для хобби. Он зарабатывает деньги, поэтому теперь я должен работать над этим ограничением и тратить время. Я рассматриваю возможность просто портировать это, чтобы работать на обычном сервере. –

Смежные вопросы