Индексы для моделей данных Google App Engine - PullRequest
1 голос
/ 18 августа 2011

У нас есть многолетние данные о погоде, которые нам нужны для создания приложения для составления отчетов.Данные о погоде имеют много полей различных типов, например, город, штат, страна, почтовый индекс, широта, долгота, температура (привет / нет), температура (средн.), Осадки, скорость ветра, дата и т. Д. И т. Д.отчеты требуют, чтобы мы выбирали комбинации этих полей, а затем сортировали, искали и фильтровали их, например,

WeatherData.all().filter('avg_temp =',20).filter('city','palo alto').filter('hi_temp',30).order('date').fetch(100)

или

WeatherData.all().filter('lo_temp =',20).filter('city','palo alto').filter('hi_temp',30).order('date').fetch(100)

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

Может кто-нибудь порекомендовать способ моделирования этих данных, который учитываетвсе запросы, которые все еще будут выполняться, в то же время оставаясь в пределах 200 индексов?Стоимость записи в этой модели не такая большая, но нам нужно супер быстрое чтение.

Ответы [ 2 ]

1 голос
/ 19 августа 2011

Лучшим вариантом является использование встроенной поддержки запросов объединения слиянием, которые могут удовлетворить эти запросы без индекса для комбинации.Все, что вам нужно сделать, это определить один индекс для каждого поля, по которому вы хотите фильтровать, и порядок сортировки (если это всегда дата, то вы можете использовать только один индекс для каждого поля).Подробнее см. в этой части .

0 голосов
/ 19 августа 2011

Я знаю, что это кажется нелогичным, но вы можете использовать систему полнотекстового поиска, которая поддерживает категории (свойства / что угодно), чтобы делать что-то подобное, если вы в основном используете фильтры равенства.Существуют способы заставить работать фильтры неравенства, но они часто ограничены.Также могут быть полезны функции огранки.

РЕДАКТИРОВАТЬ:

Да, это совершенно хакерское решение.Документы, для которых я его использую, уже есть в моем поисковом индексе, и я почти всегда также фильтрую по поисковым запросам.

...