Об индексах хранилища данных GAE - PullRequest
2 голосов
/ 21 апреля 2011

У меня есть следующая модель в приложении GAE.

class User
    school_name = db.StringProperty(Indexed=True)
    country = db.StringProperty(Indexed=True)
    city = db.StringProperty(Indexed=True)
    sex = db.StringProperty(Indexed=True)
    profession = db.StringProperty(Indexed=True)
    joined_date = db.DateTimeProperty(Indexed=True)

И я хочу отфильтровать пользователей по комбинациям этих полей. Результат фильтра сначала должен показать пользователя, который недавно присоединился. Так что это означает, что любой запрос завершается с помощью операции заказа, я полагаю. вот так:

User.all().filter('country =','US').filter('profession =','SE').order('-joined_date')
User.all().filter('school_name =','AAA').filter('profession =','SE').order('-joined_date')
....
User.all().filter('sex =','Female').filter('profession =','HR').order('-joined_date')

Все эти комбинации полей будут C (5,1) + C (5,2) + ... + C (5,5) = 31.

Мой вопрос заключается в том, чтобы реализовать его, нужно ли создавать индексы для всех этих случаев (31) в Google AppEngine. Или вы можете предложить другой способ его реализации?

Примечание: C (n, k) - комбинационная формула, подробнее см. http://en.wikipedia.org/wiki/Combination

Заранее спасибо!

1 Ответ

4 голосов
/ 21 апреля 2011

У вас есть несколько вариантов:

  1. Создайте все 31 индекс, как вы предлагаете.
  2. Выполнить сортировку в памяти. Без порядка сортировки все ваши запросы могут быть выполнены с помощью встроенной стратегии слияния, поэтому вам вообще не понадобятся индексы.
  3. Ограничьте запросы более вероятными или теми, которые устраняют большинство несоответствующих результатов, и выполните дополнительную фильтрацию в памяти.
  4. Поместите все ваши данные в ListProperty для индексации в виде строк "ключ: значение" и выполняйте фильтрацию только по ним. Вам нужно будет создать несколько индексов с различным количеством вхождений в этом поле (например, индексировать его один раз, два раза и т. Д.), И это приведет к тому же количеству записей индекса, но меньше используемых пользовательских индексов.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...